From 2e848e00636939fa169513b11fd738bd5098df66 Mon Sep 17 00:00:00 2001 From: Kyle McCullough Date: Wed, 14 May 2025 18:31:04 -0700 Subject: [PATCH] chore(all): sync types Signed-off-by: Kyle McCullough --- .github/workflows/check.yml | 4 +- .golangci.yml | 196 ++++----- client/client.go | 6 +- client/mocks/cloudfront.go | 240 ++++++++++ client/mocks/codebuild.go | 100 +++++ client/mocks/cognitoidentityprovider.go | 20 + client/mocks/ec2.go | 160 +++++++ client/mocks/kinesis.go | 20 + client/mocks/s3control.go | 40 ++ client/mocks/ssm.go | 20 + client/services/cloudfront.go | 12 + client/services/codebuild.go | 5 + client/services/cognitoidentityprovider.go | 1 + client/services/ec2.go | 8 + client/services/kinesis.go | 1 + client/services/s3control.go | 2 + client/services/ssm.go | 1 + codegen/recipes/acm.go | 10 +- codegen/recipes/athena.go | 16 +- codegen/recipes/backup.go | 23 +- codegen/recipes/base.go | 12 +- codegen/recipes/cloudtrail.go | 5 +- codegen/recipes/cloudwatch.go | 19 +- codegen/recipes/cognito.go | 13 +- codegen/recipes/discover/discover.go | 12 +- codegen/recipes/ec2.go | 6 +- codegen/recipes/ecr.go | 17 +- codegen/recipes/ecrpublic.go | 18 +- codegen/recipes/elasticache.go | 32 +- codegen/recipes/elasticsearch.go | 10 +- codegen/recipes/elbv2.go | 109 +++-- codegen/recipes/eventbridge.go | 109 ++--- codegen/recipes/firehose.go | 10 +- codegen/recipes/glue.go | 50 +-- codegen/recipes/iam.go | 21 +- codegen/recipes/iot.go | 50 +-- codegen/recipes/kms.go | 9 +- codegen/recipes/lambda.go | 3 +- codegen/recipes/route53.go | 11 +- codegen/recipes/sagemaker.go | 18 +- codegen/recipes/wafv2.go | 17 +- codegen/services/clients.go | 2 +- codegen/services/generate.go | 4 +- docs/tables/README.md | 1 - docs/tables/aws_acm_certificates.md | 28 +- docs/tables/aws_apigatewayv2_apis.md | 1 + docs/tables/aws_athena_data_catalogs.md | 10 +- docs/tables/aws_athena_work_groups.md | 9 +- docs/tables/aws_backup_plans.md | 12 +- docs/tables/aws_backup_vaults.md | 14 +- docs/tables/aws_cloudtrail_trails.md | 16 +- docs/tables/aws_cloudwatch_alarms.md | 30 +- docs/tables/aws_cognito_user_pools.md | 3 +- docs/tables/aws_ec2_ebs_volumes.md | 1 + docs/tables/aws_ec2_eips.md | 1 + docs/tables/aws_ec2_reserved_instances.md | 1 + docs/tables/aws_ec2_vpcs.md | 1 + docs/tables/aws_ecr_repositories.md | 10 +- docs/tables/aws_ecrpublic_repositories.md | 7 +- docs/tables/aws_elasticache_clusters.md | 3 +- .../aws_elasticache_replication_groups.md | 3 +- docs/tables/aws_elasticache_subnet_groups.md | 3 +- docs/tables/aws_elasticsearch_domains.md | 29 +- docs/tables/aws_elbv2_listeners.md | 11 +- .../aws_elbv2_load_balancer_attributes.md | 22 - docs/tables/aws_elbv2_load_balancers.md | 19 +- docs/tables/aws_elbv2_target_groups.md | 21 +- .../aws_eventbridge_api_destinations.md | 5 +- .../tables/aws_eventbridge_event_bus_rules.md | 6 +- docs/tables/aws_eventbridge_event_buses.md | 7 +- docs/tables/aws_firehose_delivery_streams.md | 14 +- docs/tables/aws_glue_database_tables.md | 3 +- docs/tables/aws_glue_databases.md | 4 +- docs/tables/aws_glue_jobs.md | 4 +- docs/tables/aws_glue_triggers.md | 4 +- docs/tables/aws_iam_password_policies.md | 11 +- docs/tables/aws_iam_user_access_keys.md | 6 +- docs/tables/aws_iot_certificates.md | 3 +- docs/tables/aws_iot_policies.md | 10 +- docs/tables/aws_iot_thing_groups.md | 4 +- docs/tables/aws_iot_things.md | 7 +- docs/tables/aws_kms_keys.md | 27 +- docs/tables/aws_lambda_function_aliases.md | 6 +- docs/tables/aws_route53_hosted_zones.md | 1 + .../aws_sagemaker_endpoint_configurations.md | 3 +- docs/tables/aws_wafv2_ipsets.md | 7 +- docs/tables/aws_wafv2_web_acls.md | 22 +- go.mod | 195 +++++---- go.sum | 413 +++++++++--------- resources/forks/apigatewayv2/deserializers.go | 52 +-- resources/services/acm/certificates.go | 128 +----- resources/services/acm/certificates_fetch.go | 30 +- resources/services/apigatewayv2/apis.go | 5 + resources/services/athena/data_catalogs.go | 38 +- .../services/athena/data_catalogs_fetch.go | 61 ++- resources/services/athena/work_groups.go | 33 +- .../services/athena/work_groups_fetch.go | 64 +-- resources/services/backup/plans.go | 48 +- resources/services/backup/plans_fetch.go | 48 +- resources/services/backup/vaults.go | 69 +-- resources/services/backup/vaults_fetch.go | 49 ++- resources/services/backup/vaults_mock_test.go | 7 +- .../services/cloudtrail/models/cloudtrail.go | 8 - resources/services/cloudtrail/trails.go | 78 +--- resources/services/cloudtrail/trails_fetch.go | 23 +- resources/services/cloudwatch/alarms.go | 151 +------ resources/services/cloudwatch/alarms_fetch.go | 34 +- resources/services/cognito/user_pools.go | 5 + .../services/cognito/user_pools_fetch.go | 32 +- .../services/cognito/user_pools_mock_test.go | 15 +- resources/services/ec2/ebs_volumes.go | 5 + resources/services/ec2/eips.go | 5 + resources/services/ec2/models/ec2.go | 14 - .../services/ec2/regional_config_fetch.go | 4 +- resources/services/ec2/regions_fetch.go | 13 +- resources/services/ec2/reserved_instances.go | 5 + resources/services/ec2/vpcs.go | 5 + resources/services/ecr/repositories.go | 47 +- resources/services/ecr/repositories_fetch.go | 24 +- resources/services/ecrpublic/repositories.go | 36 +- .../services/ecrpublic/repositories_fetch.go | 24 +- resources/services/elasticache/clusters.go | 14 +- .../services/elasticache/clusters_fetch.go | 34 +- .../elasticache/clusters_mock_test.go | 16 +- .../elasticache/replication_groups.go | 14 +- .../elasticache/replication_groups_fetch.go | 34 +- .../replication_groups_mock_test.go | 16 +- .../services/elasticache/subnet_groups.go | 14 +- .../elasticache/subnet_groups_fetch.go | 34 +- .../elasticache/subnet_groups_mock_test.go | 16 +- resources/services/elasticsearch/domains.go | 133 +----- .../services/elasticsearch/domains_fetch.go | 37 +- resources/services/elbv2/listeners.go | 52 +-- resources/services/elbv2/listeners_fetch.go | 29 +- .../elbv2/load_balancer_attributes.go | 44 -- resources/services/elbv2/load_balancers.go | 84 +--- .../services/elbv2/load_balancers_fetch.go | 81 ++-- resources/services/elbv2/target_groups.go | 100 +---- .../services/elbv2/target_groups_fetch.go | 57 ++- .../services/elbv2/target_groups_mock_test.go | 12 +- .../services/eventbridge/api_destinations.go | 24 +- .../eventbridge/api_destinations_fetch.go | 27 +- .../eventbridge/api_destinations_mock_test.go | 41 -- .../services/eventbridge/event_bus_rules.go | 29 +- resources/services/eventbridge/event_buses.go | 34 +- .../services/eventbridge/event_buses_fetch.go | 71 ++- .../eventbridge/event_buses_mock_test.go | 17 +- .../services/firehose/delivery_streams.go | 58 +-- .../firehose/delivery_streams_fetch.go | 28 +- resources/services/glue/database_tables.go | 12 +- resources/services/glue/databases.go | 17 +- resources/services/glue/databases_fetch.go | 67 ++- .../services/glue/databases_mock_test.go | 11 +- resources/services/glue/jobs.go | 17 +- resources/services/glue/jobs_fetch.go | 24 +- resources/services/glue/triggers.go | 10 +- resources/services/glue/triggers_fetch.go | 37 +- .../services/iam/credential_reports_fetch.go | 10 +- .../iam/credential_reports_mock_test.go | 11 +- resources/services/iam/models/iam.go | 56 --- resources/services/iam/password_policies.go | 51 +-- .../services/iam/password_policies_fetch.go | 6 +- resources/services/iam/user_access_keys.go | 29 +- resources/services/iam/users_fetch.go | 61 +-- resources/services/iot/certificates.go | 14 +- .../services/iot/iot_certificates_fetch.go | 32 +- .../iot/iot_certificates_mock_test.go | 14 +- resources/services/iot/iot_policies_fetch.go | 29 +- .../services/iot/iot_thing_groups_fetch.go | 56 ++- resources/services/iot/iot_things_fetch.go | 62 ++- .../services/iot/iot_things_mock_test.go | 21 +- resources/services/iot/policies.go | 49 ++- resources/services/iot/thing_groups.go | 17 +- resources/services/iot/things.go | 34 +- resources/services/kms/key_grants_fetch.go | 7 +- resources/services/kms/keys.go | 123 +----- resources/services/kms/keys_fetch.go | 45 +- resources/services/lambda/function_aliases.go | 24 +- resources/services/lambda/functions_fetch.go | 9 +- resources/services/lambda/models/lambda.go | 10 - resources/services/route53/hosted_zones.go | 5 + .../services/route53/hosted_zones_fetch.go | 22 +- resources/services/route53/models/route53.go | 10 - .../sagemaker/endpoint_configurations.go | 10 +- .../endpoint_configurations_fetch.go | 40 +- .../endpoint_configurations_mock_test.go | 6 +- resources/services/wafv2/ipsets.go | 27 +- resources/services/wafv2/ipsets_fetch.go | 38 +- resources/services/wafv2/ipsets_mock_test.go | 5 +- resources/services/wafv2/models/wafv2.go | 8 - resources/services/wafv2/web_acls.go | 92 +--- resources/services/wafv2/web_acls_fetch.go | 46 +- website/pages/docs/tables.md | 1 - 193 files changed, 2977 insertions(+), 3068 deletions(-) delete mode 100644 docs/tables/aws_elbv2_load_balancer_attributes.md delete mode 100644 resources/services/cloudtrail/models/cloudtrail.go delete mode 100644 resources/services/ec2/models/ec2.go delete mode 100644 resources/services/elbv2/load_balancer_attributes.go delete mode 100644 resources/services/eventbridge/api_destinations_mock_test.go delete mode 100644 resources/services/route53/models/route53.go delete mode 100644 resources/services/wafv2/models/wafv2.go diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 38046169..ee1c6559 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -46,7 +46,7 @@ jobs: - name: Check run: make test - name: golangci-lint - uses: golangci/golangci-lint-action@v6 + uses: golangci/golangci-lint-action@v8 with: - version: v1.64 + version: v2.1 args: --timeout=5m diff --git a/.golangci.yml b/.golangci.yml index cf307803..1f2fbdcd 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,114 +1,114 @@ +version: "2" run: - tests: true - skip-dirs: - - bin - - docs - - client/mocks - - resources/forks - - codegen - timeout: 10m build-tags: - all - -linters-settings: - gofmt: - rewrite-rules: - - pattern: 'interface{}' - replacement: 'any' - errcheck: - check-blank: false - ignore: fmt:.*,[rR]ead|[wW]rite|[cC]lose,io:Copy - gocritic: - disabled-checks: - - commentFormatting - dupl: - # tokens count to trigger issue, 150 by default - threshold: 500 - - revive: - enable-all-rules: true - rules: - - name: cyclomatic - disabled: true - - name: argument-limit - disabled: true - - name: function-length - disabled: true - - name: function-result-limit - disabled: true - - name: line-length-limit - disabled: true - - name: file-header - disabled: true - - name: cognitive-complexity - disabled: true - - name: banned-characters - disabled: true - - name: max-public-structs - disabled: true - - name: add-constant - disabled: true - - name: unhandled-error - disabled: true - - name: var-naming - disabled: true - - name: deep-exit - disabled: true - - name: exported - disabled: false - arguments: - - 'disableStutteringCheck' - - name: unused-parameter - disabled: true - - name: confusing-naming - disabled: true - - name: confusing-results - disabled: true - - name: flag-parameter - disabled: true - - name: nested-structs - disabled: true - - name: unchecked-type-assertion - disabled: true - - name: import-alias-naming - disabled: true - - name: use-errors-new - disabled: true - + tests: true linters: enable: - asciicheck - bodyclose - dupl - - errcheck - gocritic - - gofmt - - gosimple - - govet - - ineffassign - importas - misspell - nakedret - prealloc - revive - - staticcheck - unconvert - unparam - - unused - -issues: - exclude-rules: - # Exclude some linters from running on tests files. - - path: _test\.go - linters: - - dupl - - gocritic - - revive - # Exclude some linters from running on resource files. - - path: resources(\\|\/).*\.go - linters: - - dupl - # Exclude some linters from running on services files. - - path: services\.go - linters: - - dupl + settings: + dupl: + threshold: 500 + errcheck: + check-blank: false + gocritic: + disabled-checks: + - commentFormatting + revive: + enable-all-rules: true + rules: + - name: cyclomatic + disabled: true + - name: argument-limit + disabled: true + - name: function-length + disabled: true + - name: function-result-limit + disabled: true + - name: line-length-limit + disabled: true + - name: file-header + disabled: true + - name: cognitive-complexity + disabled: true + - name: banned-characters + disabled: true + - name: max-public-structs + disabled: true + - name: add-constant + disabled: true + - name: unhandled-error + disabled: true + - name: var-naming + disabled: true + - name: deep-exit + disabled: true + - name: exported + arguments: + - disableStutteringCheck + disabled: false + - name: unused-parameter + disabled: true + - name: confusing-naming + disabled: true + - name: confusing-results + disabled: true + - name: flag-parameter + disabled: true + - name: nested-structs + disabled: true + - name: unchecked-type-assertion + disabled: true + - name: import-alias-naming + disabled: true + - name: use-errors-new + disabled: true + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - dupl + - gocritic + - revive + path: _test\.go + - linters: + - dupl + path: resources(\\|\/).*\.go + - linters: + - dupl + path: services\.go + paths: + - third_party$ + - builtin$ + - examples$ + - resources/forks + - codegen +formatters: + enable: + - gofmt + settings: + gofmt: + rewrite-rules: + - pattern: interface{} + replacement: any + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/client/client.go b/client/client.go index c4baab4f..7150499b 100644 --- a/client/client.go +++ b/client/client.go @@ -212,10 +212,8 @@ func isAllRegions(regions []string) bool { return false } - wildcardAllRegions := false - if (len(regions) == 1 && regions[0] == "*") || (len(regions) == 0) { - wildcardAllRegions = true - } + wildcardAllRegions := (len(regions) == 1 && regions[0] == "*") || (len(regions) == 0) + return wildcardAllRegions } diff --git a/client/mocks/cloudfront.go b/client/mocks/cloudfront.go index a65d0935..7cfe8d77 100644 --- a/client/mocks/cloudfront.go +++ b/client/mocks/cloudfront.go @@ -175,6 +175,46 @@ func (mr *MockCloudfrontClientMockRecorder) GetCloudFrontOriginAccessIdentityCon return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCloudFrontOriginAccessIdentityConfig", reflect.TypeOf((*MockCloudfrontClient)(nil).GetCloudFrontOriginAccessIdentityConfig), varargs...) } +// GetConnectionGroup mocks base method. +func (m *MockCloudfrontClient) GetConnectionGroup(arg0 context.Context, arg1 *cloudfront.GetConnectionGroupInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetConnectionGroupOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetConnectionGroup", varargs...) + ret0, _ := ret[0].(*cloudfront.GetConnectionGroupOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetConnectionGroup indicates an expected call of GetConnectionGroup. +func (mr *MockCloudfrontClientMockRecorder) GetConnectionGroup(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetConnectionGroup", reflect.TypeOf((*MockCloudfrontClient)(nil).GetConnectionGroup), varargs...) +} + +// GetConnectionGroupByRoutingEndpoint mocks base method. +func (m *MockCloudfrontClient) GetConnectionGroupByRoutingEndpoint(arg0 context.Context, arg1 *cloudfront.GetConnectionGroupByRoutingEndpointInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetConnectionGroupByRoutingEndpointOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetConnectionGroupByRoutingEndpoint", varargs...) + ret0, _ := ret[0].(*cloudfront.GetConnectionGroupByRoutingEndpointOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetConnectionGroupByRoutingEndpoint indicates an expected call of GetConnectionGroupByRoutingEndpoint. +func (mr *MockCloudfrontClientMockRecorder) GetConnectionGroupByRoutingEndpoint(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetConnectionGroupByRoutingEndpoint", reflect.TypeOf((*MockCloudfrontClient)(nil).GetConnectionGroupByRoutingEndpoint), varargs...) +} + // GetContinuousDeploymentPolicy mocks base method. func (m *MockCloudfrontClient) GetContinuousDeploymentPolicy(arg0 context.Context, arg1 *cloudfront.GetContinuousDeploymentPolicyInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetContinuousDeploymentPolicyOutput, error) { m.ctrl.T.Helper() @@ -255,6 +295,46 @@ func (mr *MockCloudfrontClientMockRecorder) GetDistributionConfig(arg0, arg1 int return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDistributionConfig", reflect.TypeOf((*MockCloudfrontClient)(nil).GetDistributionConfig), varargs...) } +// GetDistributionTenant mocks base method. +func (m *MockCloudfrontClient) GetDistributionTenant(arg0 context.Context, arg1 *cloudfront.GetDistributionTenantInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetDistributionTenantOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDistributionTenant", varargs...) + ret0, _ := ret[0].(*cloudfront.GetDistributionTenantOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDistributionTenant indicates an expected call of GetDistributionTenant. +func (mr *MockCloudfrontClientMockRecorder) GetDistributionTenant(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDistributionTenant", reflect.TypeOf((*MockCloudfrontClient)(nil).GetDistributionTenant), varargs...) +} + +// GetDistributionTenantByDomain mocks base method. +func (m *MockCloudfrontClient) GetDistributionTenantByDomain(arg0 context.Context, arg1 *cloudfront.GetDistributionTenantByDomainInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetDistributionTenantByDomainOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetDistributionTenantByDomain", varargs...) + ret0, _ := ret[0].(*cloudfront.GetDistributionTenantByDomainOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetDistributionTenantByDomain indicates an expected call of GetDistributionTenantByDomain. +func (mr *MockCloudfrontClientMockRecorder) GetDistributionTenantByDomain(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDistributionTenantByDomain", reflect.TypeOf((*MockCloudfrontClient)(nil).GetDistributionTenantByDomain), varargs...) +} + // GetFieldLevelEncryption mocks base method. func (m *MockCloudfrontClient) GetFieldLevelEncryption(arg0 context.Context, arg1 *cloudfront.GetFieldLevelEncryptionInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetFieldLevelEncryptionOutput, error) { m.ctrl.T.Helper() @@ -375,6 +455,26 @@ func (mr *MockCloudfrontClientMockRecorder) GetInvalidation(arg0, arg1 interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInvalidation", reflect.TypeOf((*MockCloudfrontClient)(nil).GetInvalidation), varargs...) } +// GetInvalidationForDistributionTenant mocks base method. +func (m *MockCloudfrontClient) GetInvalidationForDistributionTenant(arg0 context.Context, arg1 *cloudfront.GetInvalidationForDistributionTenantInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetInvalidationForDistributionTenantOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetInvalidationForDistributionTenant", varargs...) + ret0, _ := ret[0].(*cloudfront.GetInvalidationForDistributionTenantOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetInvalidationForDistributionTenant indicates an expected call of GetInvalidationForDistributionTenant. +func (mr *MockCloudfrontClientMockRecorder) GetInvalidationForDistributionTenant(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInvalidationForDistributionTenant", reflect.TypeOf((*MockCloudfrontClient)(nil).GetInvalidationForDistributionTenant), varargs...) +} + // GetKeyGroup mocks base method. func (m *MockCloudfrontClient) GetKeyGroup(arg0 context.Context, arg1 *cloudfront.GetKeyGroupInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetKeyGroupOutput, error) { m.ctrl.T.Helper() @@ -415,6 +515,26 @@ func (mr *MockCloudfrontClientMockRecorder) GetKeyGroupConfig(arg0, arg1 interfa return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetKeyGroupConfig", reflect.TypeOf((*MockCloudfrontClient)(nil).GetKeyGroupConfig), varargs...) } +// GetManagedCertificateDetails mocks base method. +func (m *MockCloudfrontClient) GetManagedCertificateDetails(arg0 context.Context, arg1 *cloudfront.GetManagedCertificateDetailsInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetManagedCertificateDetailsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetManagedCertificateDetails", varargs...) + ret0, _ := ret[0].(*cloudfront.GetManagedCertificateDetailsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetManagedCertificateDetails indicates an expected call of GetManagedCertificateDetails. +func (mr *MockCloudfrontClientMockRecorder) GetManagedCertificateDetails(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetManagedCertificateDetails", reflect.TypeOf((*MockCloudfrontClient)(nil).GetManagedCertificateDetails), varargs...) +} + // GetMonitoringSubscription mocks base method. func (m *MockCloudfrontClient) GetMonitoringSubscription(arg0 context.Context, arg1 *cloudfront.GetMonitoringSubscriptionInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.GetMonitoringSubscriptionOutput, error) { m.ctrl.T.Helper() @@ -755,6 +875,26 @@ func (mr *MockCloudfrontClientMockRecorder) ListConflictingAliases(arg0, arg1 in return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListConflictingAliases", reflect.TypeOf((*MockCloudfrontClient)(nil).ListConflictingAliases), varargs...) } +// ListConnectionGroups mocks base method. +func (m *MockCloudfrontClient) ListConnectionGroups(arg0 context.Context, arg1 *cloudfront.ListConnectionGroupsInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListConnectionGroupsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListConnectionGroups", varargs...) + ret0, _ := ret[0].(*cloudfront.ListConnectionGroupsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListConnectionGroups indicates an expected call of ListConnectionGroups. +func (mr *MockCloudfrontClientMockRecorder) ListConnectionGroups(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListConnectionGroups", reflect.TypeOf((*MockCloudfrontClient)(nil).ListConnectionGroups), varargs...) +} + // ListContinuousDeploymentPolicies mocks base method. func (m *MockCloudfrontClient) ListContinuousDeploymentPolicies(arg0 context.Context, arg1 *cloudfront.ListContinuousDeploymentPoliciesInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListContinuousDeploymentPoliciesOutput, error) { m.ctrl.T.Helper() @@ -775,6 +915,46 @@ func (mr *MockCloudfrontClientMockRecorder) ListContinuousDeploymentPolicies(arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListContinuousDeploymentPolicies", reflect.TypeOf((*MockCloudfrontClient)(nil).ListContinuousDeploymentPolicies), varargs...) } +// ListDistributionTenants mocks base method. +func (m *MockCloudfrontClient) ListDistributionTenants(arg0 context.Context, arg1 *cloudfront.ListDistributionTenantsInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListDistributionTenantsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListDistributionTenants", varargs...) + ret0, _ := ret[0].(*cloudfront.ListDistributionTenantsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListDistributionTenants indicates an expected call of ListDistributionTenants. +func (mr *MockCloudfrontClientMockRecorder) ListDistributionTenants(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDistributionTenants", reflect.TypeOf((*MockCloudfrontClient)(nil).ListDistributionTenants), varargs...) +} + +// ListDistributionTenantsByCustomization mocks base method. +func (m *MockCloudfrontClient) ListDistributionTenantsByCustomization(arg0 context.Context, arg1 *cloudfront.ListDistributionTenantsByCustomizationInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListDistributionTenantsByCustomizationOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListDistributionTenantsByCustomization", varargs...) + ret0, _ := ret[0].(*cloudfront.ListDistributionTenantsByCustomizationOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListDistributionTenantsByCustomization indicates an expected call of ListDistributionTenantsByCustomization. +func (mr *MockCloudfrontClientMockRecorder) ListDistributionTenantsByCustomization(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDistributionTenantsByCustomization", reflect.TypeOf((*MockCloudfrontClient)(nil).ListDistributionTenantsByCustomization), varargs...) +} + // ListDistributions mocks base method. func (m *MockCloudfrontClient) ListDistributions(arg0 context.Context, arg1 *cloudfront.ListDistributionsInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsOutput, error) { m.ctrl.T.Helper() @@ -835,6 +1015,26 @@ func (mr *MockCloudfrontClientMockRecorder) ListDistributionsByCachePolicyId(arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDistributionsByCachePolicyId", reflect.TypeOf((*MockCloudfrontClient)(nil).ListDistributionsByCachePolicyId), varargs...) } +// ListDistributionsByConnectionMode mocks base method. +func (m *MockCloudfrontClient) ListDistributionsByConnectionMode(arg0 context.Context, arg1 *cloudfront.ListDistributionsByConnectionModeInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByConnectionModeOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListDistributionsByConnectionMode", varargs...) + ret0, _ := ret[0].(*cloudfront.ListDistributionsByConnectionModeOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListDistributionsByConnectionMode indicates an expected call of ListDistributionsByConnectionMode. +func (mr *MockCloudfrontClientMockRecorder) ListDistributionsByConnectionMode(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDistributionsByConnectionMode", reflect.TypeOf((*MockCloudfrontClient)(nil).ListDistributionsByConnectionMode), varargs...) +} + // ListDistributionsByKeyGroup mocks base method. func (m *MockCloudfrontClient) ListDistributionsByKeyGroup(arg0 context.Context, arg1 *cloudfront.ListDistributionsByKeyGroupInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByKeyGroupOutput, error) { m.ctrl.T.Helper() @@ -955,6 +1155,26 @@ func (mr *MockCloudfrontClientMockRecorder) ListDistributionsByWebACLId(arg0, ar return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDistributionsByWebACLId", reflect.TypeOf((*MockCloudfrontClient)(nil).ListDistributionsByWebACLId), varargs...) } +// ListDomainConflicts mocks base method. +func (m *MockCloudfrontClient) ListDomainConflicts(arg0 context.Context, arg1 *cloudfront.ListDomainConflictsInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListDomainConflictsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListDomainConflicts", varargs...) + ret0, _ := ret[0].(*cloudfront.ListDomainConflictsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListDomainConflicts indicates an expected call of ListDomainConflicts. +func (mr *MockCloudfrontClientMockRecorder) ListDomainConflicts(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListDomainConflicts", reflect.TypeOf((*MockCloudfrontClient)(nil).ListDomainConflicts), varargs...) +} + // ListFieldLevelEncryptionConfigs mocks base method. func (m *MockCloudfrontClient) ListFieldLevelEncryptionConfigs(arg0 context.Context, arg1 *cloudfront.ListFieldLevelEncryptionConfigsInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListFieldLevelEncryptionConfigsOutput, error) { m.ctrl.T.Helper() @@ -1035,6 +1255,26 @@ func (mr *MockCloudfrontClientMockRecorder) ListInvalidations(arg0, arg1 interfa return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListInvalidations", reflect.TypeOf((*MockCloudfrontClient)(nil).ListInvalidations), varargs...) } +// ListInvalidationsForDistributionTenant mocks base method. +func (m *MockCloudfrontClient) ListInvalidationsForDistributionTenant(arg0 context.Context, arg1 *cloudfront.ListInvalidationsForDistributionTenantInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListInvalidationsForDistributionTenantOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListInvalidationsForDistributionTenant", varargs...) + ret0, _ := ret[0].(*cloudfront.ListInvalidationsForDistributionTenantOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListInvalidationsForDistributionTenant indicates an expected call of ListInvalidationsForDistributionTenant. +func (mr *MockCloudfrontClientMockRecorder) ListInvalidationsForDistributionTenant(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListInvalidationsForDistributionTenant", reflect.TypeOf((*MockCloudfrontClient)(nil).ListInvalidationsForDistributionTenant), varargs...) +} + // ListKeyGroups mocks base method. func (m *MockCloudfrontClient) ListKeyGroups(arg0 context.Context, arg1 *cloudfront.ListKeyGroupsInput, arg2 ...func(*cloudfront.Options)) (*cloudfront.ListKeyGroupsOutput, error) { m.ctrl.T.Helper() diff --git a/client/mocks/codebuild.go b/client/mocks/codebuild.go index bb488697..09b4c8d5 100644 --- a/client/mocks/codebuild.go +++ b/client/mocks/codebuild.go @@ -75,6 +75,26 @@ func (mr *MockCodebuildClientMockRecorder) BatchGetBuilds(arg0, arg1 interface{} return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchGetBuilds", reflect.TypeOf((*MockCodebuildClient)(nil).BatchGetBuilds), varargs...) } +// BatchGetCommandExecutions mocks base method. +func (m *MockCodebuildClient) BatchGetCommandExecutions(arg0 context.Context, arg1 *codebuild.BatchGetCommandExecutionsInput, arg2 ...func(*codebuild.Options)) (*codebuild.BatchGetCommandExecutionsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "BatchGetCommandExecutions", varargs...) + ret0, _ := ret[0].(*codebuild.BatchGetCommandExecutionsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BatchGetCommandExecutions indicates an expected call of BatchGetCommandExecutions. +func (mr *MockCodebuildClientMockRecorder) BatchGetCommandExecutions(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchGetCommandExecutions", reflect.TypeOf((*MockCodebuildClient)(nil).BatchGetCommandExecutions), varargs...) +} + // BatchGetFleets mocks base method. func (m *MockCodebuildClient) BatchGetFleets(arg0 context.Context, arg1 *codebuild.BatchGetFleetsInput, arg2 ...func(*codebuild.Options)) (*codebuild.BatchGetFleetsOutput, error) { m.ctrl.T.Helper() @@ -155,6 +175,26 @@ func (mr *MockCodebuildClientMockRecorder) BatchGetReports(arg0, arg1 interface{ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchGetReports", reflect.TypeOf((*MockCodebuildClient)(nil).BatchGetReports), varargs...) } +// BatchGetSandboxes mocks base method. +func (m *MockCodebuildClient) BatchGetSandboxes(arg0 context.Context, arg1 *codebuild.BatchGetSandboxesInput, arg2 ...func(*codebuild.Options)) (*codebuild.BatchGetSandboxesOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "BatchGetSandboxes", varargs...) + ret0, _ := ret[0].(*codebuild.BatchGetSandboxesOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BatchGetSandboxes indicates an expected call of BatchGetSandboxes. +func (mr *MockCodebuildClientMockRecorder) BatchGetSandboxes(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BatchGetSandboxes", reflect.TypeOf((*MockCodebuildClient)(nil).BatchGetSandboxes), varargs...) +} + // DescribeCodeCoverages mocks base method. func (m *MockCodebuildClient) DescribeCodeCoverages(arg0 context.Context, arg1 *codebuild.DescribeCodeCoveragesInput, arg2 ...func(*codebuild.Options)) (*codebuild.DescribeCodeCoveragesOutput, error) { m.ctrl.T.Helper() @@ -315,6 +355,26 @@ func (mr *MockCodebuildClientMockRecorder) ListBuildsForProject(arg0, arg1 inter return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListBuildsForProject", reflect.TypeOf((*MockCodebuildClient)(nil).ListBuildsForProject), varargs...) } +// ListCommandExecutionsForSandbox mocks base method. +func (m *MockCodebuildClient) ListCommandExecutionsForSandbox(arg0 context.Context, arg1 *codebuild.ListCommandExecutionsForSandboxInput, arg2 ...func(*codebuild.Options)) (*codebuild.ListCommandExecutionsForSandboxOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListCommandExecutionsForSandbox", varargs...) + ret0, _ := ret[0].(*codebuild.ListCommandExecutionsForSandboxOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListCommandExecutionsForSandbox indicates an expected call of ListCommandExecutionsForSandbox. +func (mr *MockCodebuildClientMockRecorder) ListCommandExecutionsForSandbox(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListCommandExecutionsForSandbox", reflect.TypeOf((*MockCodebuildClient)(nil).ListCommandExecutionsForSandbox), varargs...) +} + // ListCuratedEnvironmentImages mocks base method. func (m *MockCodebuildClient) ListCuratedEnvironmentImages(arg0 context.Context, arg1 *codebuild.ListCuratedEnvironmentImagesInput, arg2 ...func(*codebuild.Options)) (*codebuild.ListCuratedEnvironmentImagesOutput, error) { m.ctrl.T.Helper() @@ -435,6 +495,46 @@ func (mr *MockCodebuildClientMockRecorder) ListReportsForReportGroup(arg0, arg1 return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListReportsForReportGroup", reflect.TypeOf((*MockCodebuildClient)(nil).ListReportsForReportGroup), varargs...) } +// ListSandboxes mocks base method. +func (m *MockCodebuildClient) ListSandboxes(arg0 context.Context, arg1 *codebuild.ListSandboxesInput, arg2 ...func(*codebuild.Options)) (*codebuild.ListSandboxesOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListSandboxes", varargs...) + ret0, _ := ret[0].(*codebuild.ListSandboxesOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListSandboxes indicates an expected call of ListSandboxes. +func (mr *MockCodebuildClientMockRecorder) ListSandboxes(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSandboxes", reflect.TypeOf((*MockCodebuildClient)(nil).ListSandboxes), varargs...) +} + +// ListSandboxesForProject mocks base method. +func (m *MockCodebuildClient) ListSandboxesForProject(arg0 context.Context, arg1 *codebuild.ListSandboxesForProjectInput, arg2 ...func(*codebuild.Options)) (*codebuild.ListSandboxesForProjectOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListSandboxesForProject", varargs...) + ret0, _ := ret[0].(*codebuild.ListSandboxesForProjectOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListSandboxesForProject indicates an expected call of ListSandboxesForProject. +func (mr *MockCodebuildClientMockRecorder) ListSandboxesForProject(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListSandboxesForProject", reflect.TypeOf((*MockCodebuildClient)(nil).ListSandboxesForProject), varargs...) +} + // ListSharedProjects mocks base method. func (m *MockCodebuildClient) ListSharedProjects(arg0 context.Context, arg1 *codebuild.ListSharedProjectsInput, arg2 ...func(*codebuild.Options)) (*codebuild.ListSharedProjectsOutput, error) { m.ctrl.T.Helper() diff --git a/client/mocks/cognitoidentityprovider.go b/client/mocks/cognitoidentityprovider.go index e503fd47..df1a1dfa 100644 --- a/client/mocks/cognitoidentityprovider.go +++ b/client/mocks/cognitoidentityprovider.go @@ -335,6 +335,26 @@ func (mr *MockCognitoidentityproviderClientMockRecorder) GetSigningCertificate(a return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetSigningCertificate", reflect.TypeOf((*MockCognitoidentityproviderClient)(nil).GetSigningCertificate), varargs...) } +// GetTokensFromRefreshToken mocks base method. +func (m *MockCognitoidentityproviderClient) GetTokensFromRefreshToken(arg0 context.Context, arg1 *cognitoidentityprovider.GetTokensFromRefreshTokenInput, arg2 ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetTokensFromRefreshTokenOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetTokensFromRefreshToken", varargs...) + ret0, _ := ret[0].(*cognitoidentityprovider.GetTokensFromRefreshTokenOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetTokensFromRefreshToken indicates an expected call of GetTokensFromRefreshToken. +func (mr *MockCognitoidentityproviderClientMockRecorder) GetTokensFromRefreshToken(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTokensFromRefreshToken", reflect.TypeOf((*MockCognitoidentityproviderClient)(nil).GetTokensFromRefreshToken), varargs...) +} + // GetUICustomization mocks base method. func (m *MockCognitoidentityproviderClient) GetUICustomization(arg0 context.Context, arg1 *cognitoidentityprovider.GetUICustomizationInput, arg2 ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetUICustomizationOutput, error) { m.ctrl.T.Helper() diff --git a/client/mocks/ec2.go b/client/mocks/ec2.go index ec9e8dc8..31dface9 100644 --- a/client/mocks/ec2.go +++ b/client/mocks/ec2.go @@ -1855,6 +1855,26 @@ func (mr *MockEc2ClientMockRecorder) DescribeNetworkInterfaces(arg0, arg1 interf return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeNetworkInterfaces", reflect.TypeOf((*MockEc2Client)(nil).DescribeNetworkInterfaces), varargs...) } +// DescribeOutpostLags mocks base method. +func (m *MockEc2Client) DescribeOutpostLags(arg0 context.Context, arg1 *ec2.DescribeOutpostLagsInput, arg2 ...func(*ec2.Options)) (*ec2.DescribeOutpostLagsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DescribeOutpostLags", varargs...) + ret0, _ := ret[0].(*ec2.DescribeOutpostLagsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeOutpostLags indicates an expected call of DescribeOutpostLags. +func (mr *MockEc2ClientMockRecorder) DescribeOutpostLags(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeOutpostLags", reflect.TypeOf((*MockEc2Client)(nil).DescribeOutpostLags), varargs...) +} + // DescribePlacementGroups mocks base method. func (m *MockEc2Client) DescribePlacementGroups(arg0 context.Context, arg1 *ec2.DescribePlacementGroupsInput, arg2 ...func(*ec2.Options)) (*ec2.DescribePlacementGroupsOutput, error) { m.ctrl.T.Helper() @@ -2055,6 +2075,66 @@ func (mr *MockEc2ClientMockRecorder) DescribeReservedInstancesOfferings(arg0, ar return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeReservedInstancesOfferings", reflect.TypeOf((*MockEc2Client)(nil).DescribeReservedInstancesOfferings), varargs...) } +// DescribeRouteServerEndpoints mocks base method. +func (m *MockEc2Client) DescribeRouteServerEndpoints(arg0 context.Context, arg1 *ec2.DescribeRouteServerEndpointsInput, arg2 ...func(*ec2.Options)) (*ec2.DescribeRouteServerEndpointsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DescribeRouteServerEndpoints", varargs...) + ret0, _ := ret[0].(*ec2.DescribeRouteServerEndpointsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeRouteServerEndpoints indicates an expected call of DescribeRouteServerEndpoints. +func (mr *MockEc2ClientMockRecorder) DescribeRouteServerEndpoints(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeRouteServerEndpoints", reflect.TypeOf((*MockEc2Client)(nil).DescribeRouteServerEndpoints), varargs...) +} + +// DescribeRouteServerPeers mocks base method. +func (m *MockEc2Client) DescribeRouteServerPeers(arg0 context.Context, arg1 *ec2.DescribeRouteServerPeersInput, arg2 ...func(*ec2.Options)) (*ec2.DescribeRouteServerPeersOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DescribeRouteServerPeers", varargs...) + ret0, _ := ret[0].(*ec2.DescribeRouteServerPeersOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeRouteServerPeers indicates an expected call of DescribeRouteServerPeers. +func (mr *MockEc2ClientMockRecorder) DescribeRouteServerPeers(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeRouteServerPeers", reflect.TypeOf((*MockEc2Client)(nil).DescribeRouteServerPeers), varargs...) +} + +// DescribeRouteServers mocks base method. +func (m *MockEc2Client) DescribeRouteServers(arg0 context.Context, arg1 *ec2.DescribeRouteServersInput, arg2 ...func(*ec2.Options)) (*ec2.DescribeRouteServersOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DescribeRouteServers", varargs...) + ret0, _ := ret[0].(*ec2.DescribeRouteServersOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeRouteServers indicates an expected call of DescribeRouteServers. +func (mr *MockEc2ClientMockRecorder) DescribeRouteServers(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeRouteServers", reflect.TypeOf((*MockEc2Client)(nil).DescribeRouteServers), varargs...) +} + // DescribeRouteTables mocks base method. func (m *MockEc2Client) DescribeRouteTables(arg0 context.Context, arg1 *ec2.DescribeRouteTablesInput, arg2 ...func(*ec2.Options)) (*ec2.DescribeRouteTablesOutput, error) { m.ctrl.T.Helper() @@ -2195,6 +2275,26 @@ func (mr *MockEc2ClientMockRecorder) DescribeSecurityGroups(arg0, arg1 interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeSecurityGroups", reflect.TypeOf((*MockEc2Client)(nil).DescribeSecurityGroups), varargs...) } +// DescribeServiceLinkVirtualInterfaces mocks base method. +func (m *MockEc2Client) DescribeServiceLinkVirtualInterfaces(arg0 context.Context, arg1 *ec2.DescribeServiceLinkVirtualInterfacesInput, arg2 ...func(*ec2.Options)) (*ec2.DescribeServiceLinkVirtualInterfacesOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "DescribeServiceLinkVirtualInterfaces", varargs...) + ret0, _ := ret[0].(*ec2.DescribeServiceLinkVirtualInterfacesOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DescribeServiceLinkVirtualInterfaces indicates an expected call of DescribeServiceLinkVirtualInterfaces. +func (mr *MockEc2ClientMockRecorder) DescribeServiceLinkVirtualInterfaces(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeServiceLinkVirtualInterfaces", reflect.TypeOf((*MockEc2Client)(nil).DescribeServiceLinkVirtualInterfaces), varargs...) +} + // DescribeSnapshotAttribute mocks base method. func (m *MockEc2Client) DescribeSnapshotAttribute(arg0 context.Context, arg1 *ec2.DescribeSnapshotAttributeInput, arg2 ...func(*ec2.Options)) (*ec2.DescribeSnapshotAttributeOutput, error) { m.ctrl.T.Helper() @@ -3935,6 +4035,66 @@ func (mr *MockEc2ClientMockRecorder) GetReservedInstancesExchangeQuote(arg0, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetReservedInstancesExchangeQuote", reflect.TypeOf((*MockEc2Client)(nil).GetReservedInstancesExchangeQuote), varargs...) } +// GetRouteServerAssociations mocks base method. +func (m *MockEc2Client) GetRouteServerAssociations(arg0 context.Context, arg1 *ec2.GetRouteServerAssociationsInput, arg2 ...func(*ec2.Options)) (*ec2.GetRouteServerAssociationsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetRouteServerAssociations", varargs...) + ret0, _ := ret[0].(*ec2.GetRouteServerAssociationsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRouteServerAssociations indicates an expected call of GetRouteServerAssociations. +func (mr *MockEc2ClientMockRecorder) GetRouteServerAssociations(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRouteServerAssociations", reflect.TypeOf((*MockEc2Client)(nil).GetRouteServerAssociations), varargs...) +} + +// GetRouteServerPropagations mocks base method. +func (m *MockEc2Client) GetRouteServerPropagations(arg0 context.Context, arg1 *ec2.GetRouteServerPropagationsInput, arg2 ...func(*ec2.Options)) (*ec2.GetRouteServerPropagationsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetRouteServerPropagations", varargs...) + ret0, _ := ret[0].(*ec2.GetRouteServerPropagationsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRouteServerPropagations indicates an expected call of GetRouteServerPropagations. +func (mr *MockEc2ClientMockRecorder) GetRouteServerPropagations(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRouteServerPropagations", reflect.TypeOf((*MockEc2Client)(nil).GetRouteServerPropagations), varargs...) +} + +// GetRouteServerRoutingDatabase mocks base method. +func (m *MockEc2Client) GetRouteServerRoutingDatabase(arg0 context.Context, arg1 *ec2.GetRouteServerRoutingDatabaseInput, arg2 ...func(*ec2.Options)) (*ec2.GetRouteServerRoutingDatabaseOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetRouteServerRoutingDatabase", varargs...) + ret0, _ := ret[0].(*ec2.GetRouteServerRoutingDatabaseOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetRouteServerRoutingDatabase indicates an expected call of GetRouteServerRoutingDatabase. +func (mr *MockEc2ClientMockRecorder) GetRouteServerRoutingDatabase(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetRouteServerRoutingDatabase", reflect.TypeOf((*MockEc2Client)(nil).GetRouteServerRoutingDatabase), varargs...) +} + // GetSecurityGroupsForVpc mocks base method. func (m *MockEc2Client) GetSecurityGroupsForVpc(arg0 context.Context, arg1 *ec2.GetSecurityGroupsForVpcInput, arg2 ...func(*ec2.Options)) (*ec2.GetSecurityGroupsForVpcOutput, error) { m.ctrl.T.Helper() diff --git a/client/mocks/kinesis.go b/client/mocks/kinesis.go index 654771ea..3f5c79ef 100644 --- a/client/mocks/kinesis.go +++ b/client/mocks/kinesis.go @@ -235,6 +235,26 @@ func (mr *MockKinesisClientMockRecorder) ListStreams(arg0, arg1 interface{}, arg return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListStreams", reflect.TypeOf((*MockKinesisClient)(nil).ListStreams), varargs...) } +// ListTagsForResource mocks base method. +func (m *MockKinesisClient) ListTagsForResource(arg0 context.Context, arg1 *kinesis.ListTagsForResourceInput, arg2 ...func(*kinesis.Options)) (*kinesis.ListTagsForResourceOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListTagsForResource", varargs...) + ret0, _ := ret[0].(*kinesis.ListTagsForResourceOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListTagsForResource indicates an expected call of ListTagsForResource. +func (mr *MockKinesisClientMockRecorder) ListTagsForResource(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListTagsForResource", reflect.TypeOf((*MockKinesisClient)(nil).ListTagsForResource), varargs...) +} + // ListTagsForStream mocks base method. func (m *MockKinesisClient) ListTagsForStream(arg0 context.Context, arg1 *kinesis.ListTagsForStreamInput, arg2 ...func(*kinesis.Options)) (*kinesis.ListTagsForStreamOutput, error) { m.ctrl.T.Helper() diff --git a/client/mocks/s3control.go b/client/mocks/s3control.go index 391f1a96..4da4c3db 100644 --- a/client/mocks/s3control.go +++ b/client/mocks/s3control.go @@ -315,6 +315,26 @@ func (mr *MockS3controlClientMockRecorder) GetAccessPointPolicyStatusForObjectLa return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccessPointPolicyStatusForObjectLambda", reflect.TypeOf((*MockS3controlClient)(nil).GetAccessPointPolicyStatusForObjectLambda), varargs...) } +// GetAccessPointScope mocks base method. +func (m *MockS3controlClient) GetAccessPointScope(arg0 context.Context, arg1 *s3control.GetAccessPointScopeInput, arg2 ...func(*s3control.Options)) (*s3control.GetAccessPointScopeOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetAccessPointScope", varargs...) + ret0, _ := ret[0].(*s3control.GetAccessPointScopeOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetAccessPointScope indicates an expected call of GetAccessPointScope. +func (mr *MockS3controlClientMockRecorder) GetAccessPointScope(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccessPointScope", reflect.TypeOf((*MockS3controlClient)(nil).GetAccessPointScope), varargs...) +} + // GetBucket mocks base method. func (m *MockS3controlClient) GetBucket(arg0 context.Context, arg1 *s3control.GetBucketInput, arg2 ...func(*s3control.Options)) (*s3control.GetBucketOutput, error) { m.ctrl.T.Helper() @@ -715,6 +735,26 @@ func (mr *MockS3controlClientMockRecorder) ListAccessPoints(arg0, arg1 interface return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAccessPoints", reflect.TypeOf((*MockS3controlClient)(nil).ListAccessPoints), varargs...) } +// ListAccessPointsForDirectoryBuckets mocks base method. +func (m *MockS3controlClient) ListAccessPointsForDirectoryBuckets(arg0 context.Context, arg1 *s3control.ListAccessPointsForDirectoryBucketsInput, arg2 ...func(*s3control.Options)) (*s3control.ListAccessPointsForDirectoryBucketsOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "ListAccessPointsForDirectoryBuckets", varargs...) + ret0, _ := ret[0].(*s3control.ListAccessPointsForDirectoryBucketsOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListAccessPointsForDirectoryBuckets indicates an expected call of ListAccessPointsForDirectoryBuckets. +func (mr *MockS3controlClientMockRecorder) ListAccessPointsForDirectoryBuckets(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListAccessPointsForDirectoryBuckets", reflect.TypeOf((*MockS3controlClient)(nil).ListAccessPointsForDirectoryBuckets), varargs...) +} + // ListAccessPointsForObjectLambda mocks base method. func (m *MockS3controlClient) ListAccessPointsForObjectLambda(arg0 context.Context, arg1 *s3control.ListAccessPointsForObjectLambdaInput, arg2 ...func(*s3control.Options)) (*s3control.ListAccessPointsForObjectLambdaOutput, error) { m.ctrl.T.Helper() diff --git a/client/mocks/ssm.go b/client/mocks/ssm.go index 67b6fdf3..18f6922f 100644 --- a/client/mocks/ssm.go +++ b/client/mocks/ssm.go @@ -695,6 +695,26 @@ func (mr *MockSsmClientMockRecorder) DescribeSessions(arg0, arg1 interface{}, ar return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DescribeSessions", reflect.TypeOf((*MockSsmClient)(nil).DescribeSessions), varargs...) } +// GetAccessToken mocks base method. +func (m *MockSsmClient) GetAccessToken(arg0 context.Context, arg1 *ssm.GetAccessTokenInput, arg2 ...func(*ssm.Options)) (*ssm.GetAccessTokenOutput, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1} + for _, a := range arg2 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "GetAccessToken", varargs...) + ret0, _ := ret[0].(*ssm.GetAccessTokenOutput) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetAccessToken indicates an expected call of GetAccessToken. +func (mr *MockSsmClientMockRecorder) GetAccessToken(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1}, arg2...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccessToken", reflect.TypeOf((*MockSsmClient)(nil).GetAccessToken), varargs...) +} + // GetAutomationExecution mocks base method. func (m *MockSsmClient) GetAutomationExecution(arg0 context.Context, arg1 *ssm.GetAutomationExecutionInput, arg2 ...func(*ssm.Options)) (*ssm.GetAutomationExecutionOutput, error) { m.ctrl.T.Helper() diff --git a/client/services/cloudfront.go b/client/services/cloudfront.go index 12e6e4bc..5d052558 100644 --- a/client/services/cloudfront.go +++ b/client/services/cloudfront.go @@ -15,18 +15,24 @@ type CloudfrontClient interface { GetCachePolicyConfig(context.Context, *cloudfront.GetCachePolicyConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetCachePolicyConfigOutput, error) GetCloudFrontOriginAccessIdentity(context.Context, *cloudfront.GetCloudFrontOriginAccessIdentityInput, ...func(*cloudfront.Options)) (*cloudfront.GetCloudFrontOriginAccessIdentityOutput, error) GetCloudFrontOriginAccessIdentityConfig(context.Context, *cloudfront.GetCloudFrontOriginAccessIdentityConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetCloudFrontOriginAccessIdentityConfigOutput, error) + GetConnectionGroup(context.Context, *cloudfront.GetConnectionGroupInput, ...func(*cloudfront.Options)) (*cloudfront.GetConnectionGroupOutput, error) + GetConnectionGroupByRoutingEndpoint(context.Context, *cloudfront.GetConnectionGroupByRoutingEndpointInput, ...func(*cloudfront.Options)) (*cloudfront.GetConnectionGroupByRoutingEndpointOutput, error) GetContinuousDeploymentPolicy(context.Context, *cloudfront.GetContinuousDeploymentPolicyInput, ...func(*cloudfront.Options)) (*cloudfront.GetContinuousDeploymentPolicyOutput, error) GetContinuousDeploymentPolicyConfig(context.Context, *cloudfront.GetContinuousDeploymentPolicyConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetContinuousDeploymentPolicyConfigOutput, error) GetDistribution(context.Context, *cloudfront.GetDistributionInput, ...func(*cloudfront.Options)) (*cloudfront.GetDistributionOutput, error) GetDistributionConfig(context.Context, *cloudfront.GetDistributionConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetDistributionConfigOutput, error) + GetDistributionTenant(context.Context, *cloudfront.GetDistributionTenantInput, ...func(*cloudfront.Options)) (*cloudfront.GetDistributionTenantOutput, error) + GetDistributionTenantByDomain(context.Context, *cloudfront.GetDistributionTenantByDomainInput, ...func(*cloudfront.Options)) (*cloudfront.GetDistributionTenantByDomainOutput, error) GetFieldLevelEncryption(context.Context, *cloudfront.GetFieldLevelEncryptionInput, ...func(*cloudfront.Options)) (*cloudfront.GetFieldLevelEncryptionOutput, error) GetFieldLevelEncryptionConfig(context.Context, *cloudfront.GetFieldLevelEncryptionConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetFieldLevelEncryptionConfigOutput, error) GetFieldLevelEncryptionProfile(context.Context, *cloudfront.GetFieldLevelEncryptionProfileInput, ...func(*cloudfront.Options)) (*cloudfront.GetFieldLevelEncryptionProfileOutput, error) GetFieldLevelEncryptionProfileConfig(context.Context, *cloudfront.GetFieldLevelEncryptionProfileConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetFieldLevelEncryptionProfileConfigOutput, error) GetFunction(context.Context, *cloudfront.GetFunctionInput, ...func(*cloudfront.Options)) (*cloudfront.GetFunctionOutput, error) GetInvalidation(context.Context, *cloudfront.GetInvalidationInput, ...func(*cloudfront.Options)) (*cloudfront.GetInvalidationOutput, error) + GetInvalidationForDistributionTenant(context.Context, *cloudfront.GetInvalidationForDistributionTenantInput, ...func(*cloudfront.Options)) (*cloudfront.GetInvalidationForDistributionTenantOutput, error) GetKeyGroup(context.Context, *cloudfront.GetKeyGroupInput, ...func(*cloudfront.Options)) (*cloudfront.GetKeyGroupOutput, error) GetKeyGroupConfig(context.Context, *cloudfront.GetKeyGroupConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetKeyGroupConfigOutput, error) + GetManagedCertificateDetails(context.Context, *cloudfront.GetManagedCertificateDetailsInput, ...func(*cloudfront.Options)) (*cloudfront.GetManagedCertificateDetailsOutput, error) GetMonitoringSubscription(context.Context, *cloudfront.GetMonitoringSubscriptionInput, ...func(*cloudfront.Options)) (*cloudfront.GetMonitoringSubscriptionOutput, error) GetOriginAccessControl(context.Context, *cloudfront.GetOriginAccessControlInput, ...func(*cloudfront.Options)) (*cloudfront.GetOriginAccessControlOutput, error) GetOriginAccessControlConfig(context.Context, *cloudfront.GetOriginAccessControlConfigInput, ...func(*cloudfront.Options)) (*cloudfront.GetOriginAccessControlConfigOutput, error) @@ -44,20 +50,26 @@ type CloudfrontClient interface { ListCachePolicies(context.Context, *cloudfront.ListCachePoliciesInput, ...func(*cloudfront.Options)) (*cloudfront.ListCachePoliciesOutput, error) ListCloudFrontOriginAccessIdentities(context.Context, *cloudfront.ListCloudFrontOriginAccessIdentitiesInput, ...func(*cloudfront.Options)) (*cloudfront.ListCloudFrontOriginAccessIdentitiesOutput, error) ListConflictingAliases(context.Context, *cloudfront.ListConflictingAliasesInput, ...func(*cloudfront.Options)) (*cloudfront.ListConflictingAliasesOutput, error) + ListConnectionGroups(context.Context, *cloudfront.ListConnectionGroupsInput, ...func(*cloudfront.Options)) (*cloudfront.ListConnectionGroupsOutput, error) ListContinuousDeploymentPolicies(context.Context, *cloudfront.ListContinuousDeploymentPoliciesInput, ...func(*cloudfront.Options)) (*cloudfront.ListContinuousDeploymentPoliciesOutput, error) + ListDistributionTenants(context.Context, *cloudfront.ListDistributionTenantsInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionTenantsOutput, error) + ListDistributionTenantsByCustomization(context.Context, *cloudfront.ListDistributionTenantsByCustomizationInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionTenantsByCustomizationOutput, error) ListDistributions(context.Context, *cloudfront.ListDistributionsInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsOutput, error) ListDistributionsByAnycastIpListId(context.Context, *cloudfront.ListDistributionsByAnycastIpListIdInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByAnycastIpListIdOutput, error) ListDistributionsByCachePolicyId(context.Context, *cloudfront.ListDistributionsByCachePolicyIdInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByCachePolicyIdOutput, error) + ListDistributionsByConnectionMode(context.Context, *cloudfront.ListDistributionsByConnectionModeInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByConnectionModeOutput, error) ListDistributionsByKeyGroup(context.Context, *cloudfront.ListDistributionsByKeyGroupInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByKeyGroupOutput, error) ListDistributionsByOriginRequestPolicyId(context.Context, *cloudfront.ListDistributionsByOriginRequestPolicyIdInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByOriginRequestPolicyIdOutput, error) ListDistributionsByRealtimeLogConfig(context.Context, *cloudfront.ListDistributionsByRealtimeLogConfigInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByRealtimeLogConfigOutput, error) ListDistributionsByResponseHeadersPolicyId(context.Context, *cloudfront.ListDistributionsByResponseHeadersPolicyIdInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByResponseHeadersPolicyIdOutput, error) ListDistributionsByVpcOriginId(context.Context, *cloudfront.ListDistributionsByVpcOriginIdInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByVpcOriginIdOutput, error) ListDistributionsByWebACLId(context.Context, *cloudfront.ListDistributionsByWebACLIdInput, ...func(*cloudfront.Options)) (*cloudfront.ListDistributionsByWebACLIdOutput, error) + ListDomainConflicts(context.Context, *cloudfront.ListDomainConflictsInput, ...func(*cloudfront.Options)) (*cloudfront.ListDomainConflictsOutput, error) ListFieldLevelEncryptionConfigs(context.Context, *cloudfront.ListFieldLevelEncryptionConfigsInput, ...func(*cloudfront.Options)) (*cloudfront.ListFieldLevelEncryptionConfigsOutput, error) ListFieldLevelEncryptionProfiles(context.Context, *cloudfront.ListFieldLevelEncryptionProfilesInput, ...func(*cloudfront.Options)) (*cloudfront.ListFieldLevelEncryptionProfilesOutput, error) ListFunctions(context.Context, *cloudfront.ListFunctionsInput, ...func(*cloudfront.Options)) (*cloudfront.ListFunctionsOutput, error) ListInvalidations(context.Context, *cloudfront.ListInvalidationsInput, ...func(*cloudfront.Options)) (*cloudfront.ListInvalidationsOutput, error) + ListInvalidationsForDistributionTenant(context.Context, *cloudfront.ListInvalidationsForDistributionTenantInput, ...func(*cloudfront.Options)) (*cloudfront.ListInvalidationsForDistributionTenantOutput, error) ListKeyGroups(context.Context, *cloudfront.ListKeyGroupsInput, ...func(*cloudfront.Options)) (*cloudfront.ListKeyGroupsOutput, error) ListKeyValueStores(context.Context, *cloudfront.ListKeyValueStoresInput, ...func(*cloudfront.Options)) (*cloudfront.ListKeyValueStoresOutput, error) ListOriginAccessControls(context.Context, *cloudfront.ListOriginAccessControlsInput, ...func(*cloudfront.Options)) (*cloudfront.ListOriginAccessControlsOutput, error) diff --git a/client/services/codebuild.go b/client/services/codebuild.go index 5560d05f..79c06942 100644 --- a/client/services/codebuild.go +++ b/client/services/codebuild.go @@ -10,10 +10,12 @@ import ( type CodebuildClient interface { BatchGetBuildBatches(context.Context, *codebuild.BatchGetBuildBatchesInput, ...func(*codebuild.Options)) (*codebuild.BatchGetBuildBatchesOutput, error) BatchGetBuilds(context.Context, *codebuild.BatchGetBuildsInput, ...func(*codebuild.Options)) (*codebuild.BatchGetBuildsOutput, error) + BatchGetCommandExecutions(context.Context, *codebuild.BatchGetCommandExecutionsInput, ...func(*codebuild.Options)) (*codebuild.BatchGetCommandExecutionsOutput, error) BatchGetFleets(context.Context, *codebuild.BatchGetFleetsInput, ...func(*codebuild.Options)) (*codebuild.BatchGetFleetsOutput, error) BatchGetProjects(context.Context, *codebuild.BatchGetProjectsInput, ...func(*codebuild.Options)) (*codebuild.BatchGetProjectsOutput, error) BatchGetReportGroups(context.Context, *codebuild.BatchGetReportGroupsInput, ...func(*codebuild.Options)) (*codebuild.BatchGetReportGroupsOutput, error) BatchGetReports(context.Context, *codebuild.BatchGetReportsInput, ...func(*codebuild.Options)) (*codebuild.BatchGetReportsOutput, error) + BatchGetSandboxes(context.Context, *codebuild.BatchGetSandboxesInput, ...func(*codebuild.Options)) (*codebuild.BatchGetSandboxesOutput, error) DescribeCodeCoverages(context.Context, *codebuild.DescribeCodeCoveragesInput, ...func(*codebuild.Options)) (*codebuild.DescribeCodeCoveragesOutput, error) DescribeTestCases(context.Context, *codebuild.DescribeTestCasesInput, ...func(*codebuild.Options)) (*codebuild.DescribeTestCasesOutput, error) GetReportGroupTrend(context.Context, *codebuild.GetReportGroupTrendInput, ...func(*codebuild.Options)) (*codebuild.GetReportGroupTrendOutput, error) @@ -22,12 +24,15 @@ type CodebuildClient interface { ListBuildBatchesForProject(context.Context, *codebuild.ListBuildBatchesForProjectInput, ...func(*codebuild.Options)) (*codebuild.ListBuildBatchesForProjectOutput, error) ListBuilds(context.Context, *codebuild.ListBuildsInput, ...func(*codebuild.Options)) (*codebuild.ListBuildsOutput, error) ListBuildsForProject(context.Context, *codebuild.ListBuildsForProjectInput, ...func(*codebuild.Options)) (*codebuild.ListBuildsForProjectOutput, error) + ListCommandExecutionsForSandbox(context.Context, *codebuild.ListCommandExecutionsForSandboxInput, ...func(*codebuild.Options)) (*codebuild.ListCommandExecutionsForSandboxOutput, error) ListCuratedEnvironmentImages(context.Context, *codebuild.ListCuratedEnvironmentImagesInput, ...func(*codebuild.Options)) (*codebuild.ListCuratedEnvironmentImagesOutput, error) ListFleets(context.Context, *codebuild.ListFleetsInput, ...func(*codebuild.Options)) (*codebuild.ListFleetsOutput, error) ListProjects(context.Context, *codebuild.ListProjectsInput, ...func(*codebuild.Options)) (*codebuild.ListProjectsOutput, error) ListReportGroups(context.Context, *codebuild.ListReportGroupsInput, ...func(*codebuild.Options)) (*codebuild.ListReportGroupsOutput, error) ListReports(context.Context, *codebuild.ListReportsInput, ...func(*codebuild.Options)) (*codebuild.ListReportsOutput, error) ListReportsForReportGroup(context.Context, *codebuild.ListReportsForReportGroupInput, ...func(*codebuild.Options)) (*codebuild.ListReportsForReportGroupOutput, error) + ListSandboxes(context.Context, *codebuild.ListSandboxesInput, ...func(*codebuild.Options)) (*codebuild.ListSandboxesOutput, error) + ListSandboxesForProject(context.Context, *codebuild.ListSandboxesForProjectInput, ...func(*codebuild.Options)) (*codebuild.ListSandboxesForProjectOutput, error) ListSharedProjects(context.Context, *codebuild.ListSharedProjectsInput, ...func(*codebuild.Options)) (*codebuild.ListSharedProjectsOutput, error) ListSharedReportGroups(context.Context, *codebuild.ListSharedReportGroupsInput, ...func(*codebuild.Options)) (*codebuild.ListSharedReportGroupsOutput, error) ListSourceCredentials(context.Context, *codebuild.ListSourceCredentialsInput, ...func(*codebuild.Options)) (*codebuild.ListSourceCredentialsOutput, error) diff --git a/client/services/cognitoidentityprovider.go b/client/services/cognitoidentityprovider.go index ddb32749..2d573b38 100644 --- a/client/services/cognitoidentityprovider.go +++ b/client/services/cognitoidentityprovider.go @@ -23,6 +23,7 @@ type CognitoidentityproviderClient interface { GetIdentityProviderByIdentifier(context.Context, *cognitoidentityprovider.GetIdentityProviderByIdentifierInput, ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetIdentityProviderByIdentifierOutput, error) GetLogDeliveryConfiguration(context.Context, *cognitoidentityprovider.GetLogDeliveryConfigurationInput, ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetLogDeliveryConfigurationOutput, error) GetSigningCertificate(context.Context, *cognitoidentityprovider.GetSigningCertificateInput, ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetSigningCertificateOutput, error) + GetTokensFromRefreshToken(context.Context, *cognitoidentityprovider.GetTokensFromRefreshTokenInput, ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetTokensFromRefreshTokenOutput, error) GetUICustomization(context.Context, *cognitoidentityprovider.GetUICustomizationInput, ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetUICustomizationOutput, error) GetUser(context.Context, *cognitoidentityprovider.GetUserInput, ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetUserOutput, error) GetUserAttributeVerificationCode(context.Context, *cognitoidentityprovider.GetUserAttributeVerificationCodeInput, ...func(*cognitoidentityprovider.Options)) (*cognitoidentityprovider.GetUserAttributeVerificationCodeOutput, error) diff --git a/client/services/ec2.go b/client/services/ec2.go index d9649ae1..3f945ad5 100644 --- a/client/services/ec2.go +++ b/client/services/ec2.go @@ -99,6 +99,7 @@ type Ec2Client interface { DescribeNetworkInterfaceAttribute(context.Context, *ec2.DescribeNetworkInterfaceAttributeInput, ...func(*ec2.Options)) (*ec2.DescribeNetworkInterfaceAttributeOutput, error) DescribeNetworkInterfacePermissions(context.Context, *ec2.DescribeNetworkInterfacePermissionsInput, ...func(*ec2.Options)) (*ec2.DescribeNetworkInterfacePermissionsOutput, error) DescribeNetworkInterfaces(context.Context, *ec2.DescribeNetworkInterfacesInput, ...func(*ec2.Options)) (*ec2.DescribeNetworkInterfacesOutput, error) + DescribeOutpostLags(context.Context, *ec2.DescribeOutpostLagsInput, ...func(*ec2.Options)) (*ec2.DescribeOutpostLagsOutput, error) DescribePlacementGroups(context.Context, *ec2.DescribePlacementGroupsInput, ...func(*ec2.Options)) (*ec2.DescribePlacementGroupsOutput, error) DescribePrefixLists(context.Context, *ec2.DescribePrefixListsInput, ...func(*ec2.Options)) (*ec2.DescribePrefixListsOutput, error) DescribePrincipalIdFormat(context.Context, *ec2.DescribePrincipalIdFormatInput, ...func(*ec2.Options)) (*ec2.DescribePrincipalIdFormatOutput, error) @@ -109,6 +110,9 @@ type Ec2Client interface { DescribeReservedInstancesListings(context.Context, *ec2.DescribeReservedInstancesListingsInput, ...func(*ec2.Options)) (*ec2.DescribeReservedInstancesListingsOutput, error) DescribeReservedInstancesModifications(context.Context, *ec2.DescribeReservedInstancesModificationsInput, ...func(*ec2.Options)) (*ec2.DescribeReservedInstancesModificationsOutput, error) DescribeReservedInstancesOfferings(context.Context, *ec2.DescribeReservedInstancesOfferingsInput, ...func(*ec2.Options)) (*ec2.DescribeReservedInstancesOfferingsOutput, error) + DescribeRouteServerEndpoints(context.Context, *ec2.DescribeRouteServerEndpointsInput, ...func(*ec2.Options)) (*ec2.DescribeRouteServerEndpointsOutput, error) + DescribeRouteServerPeers(context.Context, *ec2.DescribeRouteServerPeersInput, ...func(*ec2.Options)) (*ec2.DescribeRouteServerPeersOutput, error) + DescribeRouteServers(context.Context, *ec2.DescribeRouteServersInput, ...func(*ec2.Options)) (*ec2.DescribeRouteServersOutput, error) DescribeRouteTables(context.Context, *ec2.DescribeRouteTablesInput, ...func(*ec2.Options)) (*ec2.DescribeRouteTablesOutput, error) DescribeScheduledInstanceAvailability(context.Context, *ec2.DescribeScheduledInstanceAvailabilityInput, ...func(*ec2.Options)) (*ec2.DescribeScheduledInstanceAvailabilityOutput, error) DescribeScheduledInstances(context.Context, *ec2.DescribeScheduledInstancesInput, ...func(*ec2.Options)) (*ec2.DescribeScheduledInstancesOutput, error) @@ -116,6 +120,7 @@ type Ec2Client interface { DescribeSecurityGroupRules(context.Context, *ec2.DescribeSecurityGroupRulesInput, ...func(*ec2.Options)) (*ec2.DescribeSecurityGroupRulesOutput, error) DescribeSecurityGroupVpcAssociations(context.Context, *ec2.DescribeSecurityGroupVpcAssociationsInput, ...func(*ec2.Options)) (*ec2.DescribeSecurityGroupVpcAssociationsOutput, error) DescribeSecurityGroups(context.Context, *ec2.DescribeSecurityGroupsInput, ...func(*ec2.Options)) (*ec2.DescribeSecurityGroupsOutput, error) + DescribeServiceLinkVirtualInterfaces(context.Context, *ec2.DescribeServiceLinkVirtualInterfacesInput, ...func(*ec2.Options)) (*ec2.DescribeServiceLinkVirtualInterfacesOutput, error) DescribeSnapshotAttribute(context.Context, *ec2.DescribeSnapshotAttributeInput, ...func(*ec2.Options)) (*ec2.DescribeSnapshotAttributeOutput, error) DescribeSnapshotTierStatus(context.Context, *ec2.DescribeSnapshotTierStatusInput, ...func(*ec2.Options)) (*ec2.DescribeSnapshotTierStatusOutput, error) DescribeSnapshots(context.Context, *ec2.DescribeSnapshotsInput, ...func(*ec2.Options)) (*ec2.DescribeSnapshotsOutput, error) @@ -203,6 +208,9 @@ type Ec2Client interface { GetNetworkInsightsAccessScopeContent(context.Context, *ec2.GetNetworkInsightsAccessScopeContentInput, ...func(*ec2.Options)) (*ec2.GetNetworkInsightsAccessScopeContentOutput, error) GetPasswordData(context.Context, *ec2.GetPasswordDataInput, ...func(*ec2.Options)) (*ec2.GetPasswordDataOutput, error) GetReservedInstancesExchangeQuote(context.Context, *ec2.GetReservedInstancesExchangeQuoteInput, ...func(*ec2.Options)) (*ec2.GetReservedInstancesExchangeQuoteOutput, error) + GetRouteServerAssociations(context.Context, *ec2.GetRouteServerAssociationsInput, ...func(*ec2.Options)) (*ec2.GetRouteServerAssociationsOutput, error) + GetRouteServerPropagations(context.Context, *ec2.GetRouteServerPropagationsInput, ...func(*ec2.Options)) (*ec2.GetRouteServerPropagationsOutput, error) + GetRouteServerRoutingDatabase(context.Context, *ec2.GetRouteServerRoutingDatabaseInput, ...func(*ec2.Options)) (*ec2.GetRouteServerRoutingDatabaseOutput, error) GetSecurityGroupsForVpc(context.Context, *ec2.GetSecurityGroupsForVpcInput, ...func(*ec2.Options)) (*ec2.GetSecurityGroupsForVpcOutput, error) GetSerialConsoleAccessStatus(context.Context, *ec2.GetSerialConsoleAccessStatusInput, ...func(*ec2.Options)) (*ec2.GetSerialConsoleAccessStatusOutput, error) GetSnapshotBlockPublicAccessState(context.Context, *ec2.GetSnapshotBlockPublicAccessStateInput, ...func(*ec2.Options)) (*ec2.GetSnapshotBlockPublicAccessStateOutput, error) diff --git a/client/services/kinesis.go b/client/services/kinesis.go index 5279e7dd..092d6289 100644 --- a/client/services/kinesis.go +++ b/client/services/kinesis.go @@ -18,5 +18,6 @@ type KinesisClient interface { ListShards(context.Context, *kinesis.ListShardsInput, ...func(*kinesis.Options)) (*kinesis.ListShardsOutput, error) ListStreamConsumers(context.Context, *kinesis.ListStreamConsumersInput, ...func(*kinesis.Options)) (*kinesis.ListStreamConsumersOutput, error) ListStreams(context.Context, *kinesis.ListStreamsInput, ...func(*kinesis.Options)) (*kinesis.ListStreamsOutput, error) + ListTagsForResource(context.Context, *kinesis.ListTagsForResourceInput, ...func(*kinesis.Options)) (*kinesis.ListTagsForResourceOutput, error) ListTagsForStream(context.Context, *kinesis.ListTagsForStreamInput, ...func(*kinesis.Options)) (*kinesis.ListTagsForStreamOutput, error) } diff --git a/client/services/s3control.go b/client/services/s3control.go index bbbed273..e46a99ca 100644 --- a/client/services/s3control.go +++ b/client/services/s3control.go @@ -22,6 +22,7 @@ type S3controlClient interface { GetAccessPointPolicyForObjectLambda(context.Context, *s3control.GetAccessPointPolicyForObjectLambdaInput, ...func(*s3control.Options)) (*s3control.GetAccessPointPolicyForObjectLambdaOutput, error) GetAccessPointPolicyStatus(context.Context, *s3control.GetAccessPointPolicyStatusInput, ...func(*s3control.Options)) (*s3control.GetAccessPointPolicyStatusOutput, error) GetAccessPointPolicyStatusForObjectLambda(context.Context, *s3control.GetAccessPointPolicyStatusForObjectLambdaInput, ...func(*s3control.Options)) (*s3control.GetAccessPointPolicyStatusForObjectLambdaOutput, error) + GetAccessPointScope(context.Context, *s3control.GetAccessPointScopeInput, ...func(*s3control.Options)) (*s3control.GetAccessPointScopeOutput, error) GetBucket(context.Context, *s3control.GetBucketInput, ...func(*s3control.Options)) (*s3control.GetBucketOutput, error) GetBucketLifecycleConfiguration(context.Context, *s3control.GetBucketLifecycleConfigurationInput, ...func(*s3control.Options)) (*s3control.GetBucketLifecycleConfigurationOutput, error) GetBucketPolicy(context.Context, *s3control.GetBucketPolicyInput, ...func(*s3control.Options)) (*s3control.GetBucketPolicyOutput, error) @@ -42,6 +43,7 @@ type S3controlClient interface { ListAccessGrantsInstances(context.Context, *s3control.ListAccessGrantsInstancesInput, ...func(*s3control.Options)) (*s3control.ListAccessGrantsInstancesOutput, error) ListAccessGrantsLocations(context.Context, *s3control.ListAccessGrantsLocationsInput, ...func(*s3control.Options)) (*s3control.ListAccessGrantsLocationsOutput, error) ListAccessPoints(context.Context, *s3control.ListAccessPointsInput, ...func(*s3control.Options)) (*s3control.ListAccessPointsOutput, error) + ListAccessPointsForDirectoryBuckets(context.Context, *s3control.ListAccessPointsForDirectoryBucketsInput, ...func(*s3control.Options)) (*s3control.ListAccessPointsForDirectoryBucketsOutput, error) ListAccessPointsForObjectLambda(context.Context, *s3control.ListAccessPointsForObjectLambdaInput, ...func(*s3control.Options)) (*s3control.ListAccessPointsForObjectLambdaOutput, error) ListCallerAccessGrants(context.Context, *s3control.ListCallerAccessGrantsInput, ...func(*s3control.Options)) (*s3control.ListCallerAccessGrantsOutput, error) ListJobs(context.Context, *s3control.ListJobsInput, ...func(*s3control.Options)) (*s3control.ListJobsOutput, error) diff --git a/client/services/ssm.go b/client/services/ssm.go index 39ce9cae..51d61304 100644 --- a/client/services/ssm.go +++ b/client/services/ssm.go @@ -41,6 +41,7 @@ type SsmClient interface { DescribePatchGroups(context.Context, *ssm.DescribePatchGroupsInput, ...func(*ssm.Options)) (*ssm.DescribePatchGroupsOutput, error) DescribePatchProperties(context.Context, *ssm.DescribePatchPropertiesInput, ...func(*ssm.Options)) (*ssm.DescribePatchPropertiesOutput, error) DescribeSessions(context.Context, *ssm.DescribeSessionsInput, ...func(*ssm.Options)) (*ssm.DescribeSessionsOutput, error) + GetAccessToken(context.Context, *ssm.GetAccessTokenInput, ...func(*ssm.Options)) (*ssm.GetAccessTokenOutput, error) GetAutomationExecution(context.Context, *ssm.GetAutomationExecutionInput, ...func(*ssm.Options)) (*ssm.GetAutomationExecutionOutput, error) GetCalendarState(context.Context, *ssm.GetCalendarStateInput, ...func(*ssm.Options)) (*ssm.GetCalendarStateOutput, error) GetCommandInvocation(context.Context, *ssm.GetCommandInvocationInput, ...func(*ssm.Options)) (*ssm.GetCommandInvocationOutput, error) diff --git a/codegen/recipes/acm.go b/codegen/recipes/acm.go index 4d2d4f68..c9c4b714 100644 --- a/codegen/recipes/acm.go +++ b/codegen/recipes/acm.go @@ -1,16 +1,17 @@ package recipes import ( - "github.com/aws/aws-sdk-go-v2/service/acm/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func ACMResources() []*Resource { resources := []*Resource{ { SubService: "certificates", - Struct: &types.CertificateDetail{}, + Struct: &ohaws.ACMCertificate{}, Description: "https://docs.aws.amazon.com/acm/latest/APIReference/API_CertificateDetail.html", SkipFields: []string{"CertificateArn"}, PreResourceResolver: "getCertificate", @@ -24,11 +25,6 @@ func ACMResources() []*Resource { Resolver: `schema.PathResolver("CertificateArn")`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveCertificateTags`, - }, }...), }, } diff --git a/codegen/recipes/athena.go b/codegen/recipes/athena.go index b60eb919..e92fc2ad 100644 --- a/codegen/recipes/athena.go +++ b/codegen/recipes/athena.go @@ -4,6 +4,8 @@ import ( "github.com/aws/aws-sdk-go-v2/service/athena/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func AthenaResources() []*Resource { @@ -11,7 +13,7 @@ func AthenaResources() []*Resource { { SubService: "data_catalogs", Description: "https://docs.aws.amazon.com/athena/latest/APIReference/API_DataCatalog.html", - Struct: &types.DataCatalog{}, + Struct: &ohaws.AthenaDataCatalog{}, SkipFields: []string{}, PreResourceResolver: "getDataCatalog", ExtraColumns: append( @@ -23,11 +25,6 @@ func AthenaResources() []*Resource { Resolver: `resolveAthenaDataCatalogArn`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveAthenaDataCatalogTags`, - }, }...), Relations: []string{ "DataCatalogDatabases()", @@ -89,7 +86,7 @@ func AthenaResources() []*Resource { { SubService: "work_groups", Description: "https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html", - Struct: &types.WorkGroup{}, + Struct: &ohaws.AthenaWorkGroup{}, SkipFields: []string{}, PreResourceResolver: "getWorkGroup", ExtraColumns: append( @@ -101,11 +98,6 @@ func AthenaResources() []*Resource { Resolver: `resolveAthenaWorkGroupArn`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveAthenaWorkGroupTags`, - }, }...), Relations: []string{ "WorkGroupPreparedStatements()", diff --git a/codegen/recipes/backup.go b/codegen/recipes/backup.go index b3ebec8b..c71e9f34 100644 --- a/codegen/recipes/backup.go +++ b/codegen/recipes/backup.go @@ -5,6 +5,8 @@ import ( "github.com/aws/aws-sdk-go-v2/service/backup/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func BackupResources() []*Resource { @@ -26,7 +28,7 @@ func BackupResources() []*Resource { { SubService: "plans", Description: "https://docs.aws.amazon.com/aws-backup/latest/devguide/API_GetBackupPlan.html", - Struct: &backup.GetBackupPlanOutput{}, + Struct: &ohaws.BackupPlan{}, SkipFields: []string{"BackupPlanArn"}, PreResourceResolver: "getPlan", ExtraColumns: append( @@ -38,11 +40,6 @@ func BackupResources() []*Resource { Resolver: `schema.PathResolver("BackupPlanArn")`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolvePlanTags`, - }, }...), Relations: []string{ "PlanSelections()", @@ -84,10 +81,11 @@ func BackupResources() []*Resource { }, }, { - SubService: "vaults", - Struct: &types.BackupVaultListMember{}, - Description: "https://docs.aws.amazon.com/aws-backup/latest/devguide/API_BackupVaultListMember.html", - SkipFields: []string{"BackupVaultArn"}, + SubService: "vaults", + Struct: &ohaws.BackupVault{}, + PreResourceResolver: "getBackupVault", + Description: "https://docs.aws.amazon.com/aws-backup/latest/devguide/API_BackupVaultListMember.html", + SkipFields: []string{"BackupVaultArn"}, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -109,11 +107,6 @@ func BackupResources() []*Resource { Resolver: `resolveVaultNotifications`, IgnoreInTests: true, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveVaultTags`, - }, }...), Relations: []string{ "VaultRecoveryPoints()", diff --git a/codegen/recipes/base.go b/codegen/recipes/base.go index 6c69a2cb..b889524c 100644 --- a/codegen/recipes/base.go +++ b/codegen/recipes/base.go @@ -31,7 +31,7 @@ type Resource struct { Name string Service string SubService string - Struct interface{} + Struct any SkipFields []string Description string ExtraColumns []codegen.ColumnDefinition @@ -48,9 +48,9 @@ type Resource struct { // Used for generating the resolver and mock tests. // -------------------------------- - ShouldGenerateResolverAndMockTest bool // if true, resolver and mock will be generated using the options below - ResolverAndMockTestTemplate string // required: name of template directory to use - Client interface{} // required: AWS client struct to use, e.g. &ec2.Client{} + ShouldGenerateResolverAndMockTest bool // if true, resolver and mock will be generated using the options below + ResolverAndMockTestTemplate string // required: name of template directory to use + Client any // required: AWS client struct to use, e.g. &ec2.Client{} // Applies only to list resources: ListMethodName string // optional: List method on the Client to use. Only required if we need to disambiguate between multiple options. @@ -114,7 +114,7 @@ func awsNameTransformer(f reflect.StructField) (string, error) { } func awsResolverTransformer(f reflect.StructField, path string) (string, error) { - if f.Type.String() == "[]types.Tag" { + if t := f.Type.String(); t == "[]types.Tag" || t == "[]ohaws.Tag" { if path == "Tags" { return "client.ResolveTags", nil } @@ -123,7 +123,7 @@ func awsResolverTransformer(f reflect.StructField, path string) (string, error) if path == "Tags" || path == "TagSet" { switch f.Type { - case reflect.TypeOf(map[string]string{}), reflect.TypeOf(map[string]*string{}), reflect.TypeOf(map[string]interface{}{}), reflect.TypeOf([]types.TagDescription{}): + case reflect.TypeOf(map[string]string{}), reflect.TypeOf(map[string]*string{}), reflect.TypeOf(map[string]any{}), reflect.TypeOf([]types.TagDescription{}): // valid tag types default: return "", fmt.Errorf("%q field is not of type []types.Tag or acceptable map: %s", path, f.Type.String()) diff --git a/codegen/recipes/cloudtrail.go b/codegen/recipes/cloudtrail.go index 88c63ca1..81dc4a35 100644 --- a/codegen/recipes/cloudtrail.go +++ b/codegen/recipes/cloudtrail.go @@ -4,17 +4,18 @@ import ( "reflect" "strings" - "github.com/OpsHelmInc/cloudquery/resources/services/cloudtrail/models" "github.com/aws/aws-sdk-go-v2/service/cloudtrail/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func CloudtrailResources() []*Resource { resources := []*Resource{ { SubService: "trails", - Struct: &models.CloudTrailWrapper{}, + Struct: &ohaws.CloudTrail{}, Description: "https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_Trail.html", SkipFields: []string{"TrailARN"}, ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{ diff --git a/codegen/recipes/cloudwatch.go b/codegen/recipes/cloudwatch.go index 9aaee6bf..b84cb029 100644 --- a/codegen/recipes/cloudwatch.go +++ b/codegen/recipes/cloudwatch.go @@ -1,30 +1,27 @@ package recipes import ( - "github.com/aws/aws-sdk-go-v2/service/cloudwatch/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func CloudwatchResources() []*Resource { resources := []*Resource{ { - SubService: "alarms", - Struct: &types.MetricAlarm{}, - Description: "https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricAlarm.html", - SkipFields: []string{"AlarmArn", "Dimensions"}, + SubService: "alarms", + Struct: &ohaws.Alarm{}, + Description: "https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricAlarm.html", + SkipFields: []string{"AlarmArn", "Dimensions", "CompositeAlarm"}, + PreResourceResolver: "getAlarm", ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveCloudwatchAlarmTags`, - }, { Name: "arn", Type: schema.TypeString, - Resolver: `schema.PathResolver("AlarmArn")`, + Resolver: `schema.PathResolver("MetricAlarm.AlarmArn")`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, { diff --git a/codegen/recipes/cognito.go b/codegen/recipes/cognito.go index 848ff7aa..f2fb2613 100644 --- a/codegen/recipes/cognito.go +++ b/codegen/recipes/cognito.go @@ -5,6 +5,8 @@ import ( "github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func CognitoResources() []*Resource { @@ -41,11 +43,12 @@ func CognitoResources() []*Resource { }, }, { - SubService: "user_pools", - Struct: &types.UserPoolType{}, - Description: "https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html", - SkipFields: []string{"Id"}, - PreResourceResolver: "getUserPool", + SubService: "user_pools", + Struct: &ohaws.CognitoUserPool{}, + Description: "https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html", + SkipFields: []string{"Id"}, + PreResourceResolver: "getUserPool", + UnwrapEmbeddedStructs: true, ExtraColumns: []codegen.ColumnDefinition{ { Name: "account_id", diff --git a/codegen/recipes/discover/discover.go b/codegen/recipes/discover/discover.go index e1632745..a9459f39 100644 --- a/codegen/recipes/discover/discover.go +++ b/codegen/recipes/discover/discover.go @@ -15,7 +15,7 @@ type DiscoveredMethod struct { } // MethodByName returns a method on the client that matches a specific name. -func MethodByName(client interface{}, targetStruct interface{}, name string) (DiscoveredMethod, error) { +func MethodByName(client any, targetStruct any, name string) (DiscoveredMethod, error) { methods := FindMethods(client, targetStruct, []string{name}) for _, m := range methods { if m.Method.Name == name { @@ -28,7 +28,7 @@ func MethodByName(client interface{}, targetStruct interface{}, name string) (Di // FindMethods returns a slice of methods that return the targetStruct (either directly or as a field // of the returned struct) and start with one of the given prefixes. -func FindMethods(client, targetStruct interface{}, prefixes []string) []DiscoveredMethod { +func FindMethods(client, targetStruct any, prefixes []string) []DiscoveredMethod { v := reflect.ValueOf(client) t := v.Type() var tt reflect.Type @@ -97,7 +97,7 @@ func FindMethods(client, targetStruct interface{}, prefixes []string) []Discover } // FindMethod finds a single method and errors out if zero or more than one is discovered. -func FindMethod(client, targetStruct interface{}, prefixes []string) (DiscoveredMethod, error) { +func FindMethod(client, targetStruct any, prefixes []string) (DiscoveredMethod, error) { f := FindMethods(client, targetStruct, prefixes) if len(f) == 0 { if targetStruct == nil { @@ -120,14 +120,14 @@ func FindMethod(client, targetStruct interface{}, prefixes []string) (Discovered return f[0], nil } -func FindDescribeMethod(client, targetStruct interface{}) (DiscoveredMethod, error) { +func FindDescribeMethod(client, targetStruct any) (DiscoveredMethod, error) { return FindMethod(client, targetStruct, []string{"Describe", "Get"}) } -func FindListMethod(client, targetStruct interface{}) (DiscoveredMethod, error) { +func FindListMethod(client, targetStruct any) (DiscoveredMethod, error) { return FindMethod(client, targetStruct, []string{"List"}) } -func FindListTagsMethod(client interface{}) (DiscoveredMethod, error) { +func FindListTagsMethod(client any) (DiscoveredMethod, error) { return FindMethod(client, nil, []string{"ListTagsForResource", "ListTagsOfResource"}) } diff --git a/codegen/recipes/ec2.go b/codegen/recipes/ec2.go index e88ea0de..a7d1f208 100644 --- a/codegen/recipes/ec2.go +++ b/codegen/recipes/ec2.go @@ -5,7 +5,7 @@ import ( "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" - "github.com/OpsHelmInc/cloudquery/resources/services/ec2/models" + "github.com/OpsHelmInc/ohaws" ) func EC2Resources() []*Resource { @@ -396,7 +396,7 @@ func EC2Resources() []*Resource { { Name: "aws_regions", // rename table for backwards-compatibility SubService: "regions", - Struct: &models.Region{}, + Struct: &ohaws.Region{}, Description: "https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Region.html", SkipFields: []string{"RegionName", "Region", "EC2Config"}, Multiplex: `client.AccountMultiplex`, @@ -441,7 +441,7 @@ func EC2Resources() []*Resource { }, { SubService: "regional_configs", - Struct: &models.RegionalConfig{}, + Struct: &ohaws.RegionalConfig{}, ExtraColumns: []codegen.ColumnDefinition{ { Name: "account_id", diff --git a/codegen/recipes/ecr.go b/codegen/recipes/ecr.go index 8eb5b3ac..3b91d196 100644 --- a/codegen/recipes/ecr.go +++ b/codegen/recipes/ecr.go @@ -7,6 +7,7 @@ import ( "github.com/cloudquery/plugin-sdk/schema" "github.com/OpsHelmInc/cloudquery/resources/services/ecr/models" + "github.com/OpsHelmInc/ohaws" ) func ECRResources() []*Resource { @@ -49,11 +50,12 @@ func ECRResources() []*Resource { }...), }, { - SubService: "repositories", - Struct: &types.Repository{}, - Description: "https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_Repository.html", - SkipFields: []string{"RepositoryArn"}, - Multiplex: `client.ServiceAccountRegionMultiplexer("api.ecr")`, + SubService: "repositories", + Struct: &ohaws.ECRRepository{}, + PreResourceResolver: "getRepository", + Description: "https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_Repository.html", + SkipFields: []string{"RepositoryArn"}, + Multiplex: `client.ServiceAccountRegionMultiplexer("api.ecr")`, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -63,11 +65,6 @@ func ECRResources() []*Resource { Resolver: `schema.PathResolver("RepositoryArn")`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveRepositoryTags`, - }, { Name: "policy_text", Type: schema.TypeJSON, diff --git a/codegen/recipes/ecrpublic.go b/codegen/recipes/ecrpublic.go index 4b57aa36..27b98b81 100644 --- a/codegen/recipes/ecrpublic.go +++ b/codegen/recipes/ecrpublic.go @@ -4,16 +4,19 @@ import ( "github.com/aws/aws-sdk-go-v2/service/ecrpublic/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func ECRPublicResources() []*Resource { resources := []*Resource{ { - SubService: "repositories", - Struct: &types.Repository{}, - Description: "https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_Repository.html", - SkipFields: []string{"RepositoryArn"}, - Multiplex: `client.ServiceAccountRegionMultiplexer("api.ecr-public")`, + SubService: "repositories", + Struct: &ohaws.ECRPublicRepository{}, + PreResourceResolver: "getRepository", + Description: "https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_Repository.html", + SkipFields: []string{"RepositoryArn"}, + Multiplex: `client.ServiceAccountRegionMultiplexer("api.ecr-public")`, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -23,11 +26,6 @@ func ECRPublicResources() []*Resource { Resolver: `schema.PathResolver("RepositoryArn")`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveRepositoryTags`, - }, { Name: ohResourceTypeColumn, Type: schema.TypeString, diff --git a/codegen/recipes/elasticache.go b/codegen/recipes/elasticache.go index b34c825a..e2db2c9c 100644 --- a/codegen/recipes/elasticache.go +++ b/codegen/recipes/elasticache.go @@ -4,15 +4,19 @@ import ( "github.com/aws/aws-sdk-go-v2/service/elasticache/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func ElastiCacheResources() []*Resource { resources := []*Resource{ { - SubService: "clusters", - Struct: &types.CacheCluster{}, - Description: "https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheCluster.html", - SkipFields: []string{"ARN"}, + SubService: "clusters", + Struct: &ohaws.CacheCluster{}, + Description: "https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheCluster.html", + SkipFields: []string{"ARN"}, + PreResourceResolver: "getCluster", + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -96,10 +100,12 @@ func ElastiCacheResources() []*Resource { }...), }, { - SubService: "replication_groups", - Struct: &types.ReplicationGroup{}, - Description: "https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ReplicationGroup.html", - SkipFields: []string{"ARN"}, + SubService: "replication_groups", + Struct: &ohaws.ReplicationGroup{}, + PreResourceResolver: "getReplicationGroup", + Description: "https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ReplicationGroup.html", + SkipFields: []string{"ARN"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -207,10 +213,12 @@ func ElastiCacheResources() []*Resource { }...), }, { - SubService: "subnet_groups", - Struct: &types.CacheSubnetGroup{}, - Description: "https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheSubnetGroup.html", - SkipFields: []string{"ARN"}, + SubService: "subnet_groups", + Struct: &ohaws.CacheSubnetGroup{}, + PreResourceResolver: "getCacheSubnetGroup", + Description: "https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheSubnetGroup.html", + SkipFields: []string{"ARN"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ diff --git a/codegen/recipes/elasticsearch.go b/codegen/recipes/elasticsearch.go index b2895d37..6452b079 100644 --- a/codegen/recipes/elasticsearch.go +++ b/codegen/recipes/elasticsearch.go @@ -1,16 +1,17 @@ package recipes import ( - "github.com/aws/aws-sdk-go-v2/service/elasticsearchservice/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func ElasticsearchResources() []*Resource { resources := []*Resource{ { SubService: "domains", - Struct: &types.ElasticsearchDomainStatus{}, + Struct: &ohaws.ElasticsearchDomain{}, SkipFields: []string{"DomainId"}, PreResourceResolver: "getDomain", ExtraColumns: []codegen.ColumnDefinition{ @@ -26,11 +27,6 @@ func ElasticsearchResources() []*Resource { Resolver: `client.ResolveAWSRegion`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveElasticsearchDomainTags`, - }, { Name: "id", Type: schema.TypeString, diff --git a/codegen/recipes/elbv2.go b/codegen/recipes/elbv2.go index ba42046f..637c7f43 100644 --- a/codegen/recipes/elbv2.go +++ b/codegen/recipes/elbv2.go @@ -7,15 +7,41 @@ import ( "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func ELBv2Resources() []*Resource { resources := []*Resource{ { - SubService: "load_balancers", - Struct: &types.LoadBalancer{}, - Description: "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_LoadBalancer.html", - SkipFields: []string{"LoadBalancerArn"}, + SubService: "load_balancers", + Struct: &ohaws.LoadBalancerV2{}, + PreResourceResolver: "getLoadBalancer", + Description: "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_LoadBalancer.html", + SkipFields: []string{ + "LoadBalancerArn", + "DeletionProtectionEnabled", + "CrossZoneLoadBalancingEnabled", + "AccessLogsEnabled", + "AccessLogsS3Bucket", + "AccessLogsS3Prefix", + "IPv6DenyAllIGWTraffic", + "IdleTimeoutSeconds", + "ClientKeepAliveSeconds", + "ConnectionLogsEnabled", + "ConnectionLogsS3Bucket", + "ConnectionLogsS3Prefix", + "DesyncMitigationMode", + "DropInvalidHeaderFields", + "PreserveHostHeader", + "XAmznTLSVersionAndCipherSuiteEnabled", + "XffClientPortEnabled", + "XffHeaderProcessingMode", + "HTTP2Enabled", + "WafFailOpen", + "ClientRoutingPolicy", + }, + UnwrapEmbeddedStructs: false, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -25,11 +51,6 @@ func ELBv2Resources() []*Resource { Resolver: `resolveElbv2loadBalancerWebACLArn`, IgnoreInTests: true, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveElbv2loadBalancerTags`, - }, { Name: "arn", Type: schema.TypeString, @@ -44,14 +65,15 @@ func ELBv2Resources() []*Resource { }...), Relations: []string{ "Listeners()", - "LoadBalancerAttributes()", }, }, { - SubService: "listeners", - Struct: &types.Listener{}, - Description: "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_Listener.html", - SkipFields: []string{"ListenerArn"}, + SubService: "listeners", + Struct: &ohaws.LoadBalancerV2Listener{}, + PreResourceResolver: "getLoadBalancerListener", + Description: "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_Listener.html", + SkipFields: []string{"ListenerArn"}, + UnwrapEmbeddedStructs: false, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -61,11 +83,6 @@ func ELBv2Resources() []*Resource { Resolver: `schema.PathResolver("ListenerArn")`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveElbv2listenerTags`, - }, { Name: ohResourceTypeColumn, Type: schema.TypeString, @@ -92,33 +109,39 @@ func ELBv2Resources() []*Resource { }...), }, { - SubService: "load_balancer_attributes", - Struct: &types.LoadBalancerAttribute{}, - Description: "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_LoadBalancerAttribute.html", - SkipFields: []string{}, - ExtraColumns: append( - defaultRegionalColumns, - []codegen.ColumnDefinition{ - { - Name: "load_balancer_arn", - Type: schema.TypeString, - Resolver: `schema.ParentColumnResolver("arn")`, - }, - }...), - }, - { - SubService: "target_groups", - Struct: &types.TargetGroup{}, - Description: "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_TargetGroup.html", - SkipFields: []string{"TargetGroupArn"}, + SubService: "target_groups", + Struct: &ohaws.TargetGroup{}, + PreResourceResolver: "getTargetGroup", + Description: "https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_TargetGroup.html", + SkipFields: []string{ + "TargetGroupArn", + "DeregistrationDelaySeconds", + "StickinessEnabled", + "StickinessType", + "CrossZoneLoadBalancingEnabled", + "DNSFailOverMinimumHealthyTargetCount", + "DNSFailOverMinimumHealthyTargetPercentage", + "RoutingFailoverMinimumHealthyTargetCount", + "RoutingFailoverMinimumHealthyTargetPercentage", + "LoadBalancingAlgorithm", + "AnomalyMitigation", + "SlowStartSeconds", + "AppStickinessCookieName", + "AppStickinessDurationSeconds", + "LoadBalancerStickinessDurationSeconds", + "LambdaMultiValueHeadersEnabled", + "DeregistrationConnectionTerminationEnabled", + "PreserveClientIP", + "ProxyProtocolV2Enabled", + "UnhealthyConnectionTerminatationEnabled", + "UnhealthyConnectionDrainingIntervalSeconds", + "TargetFailOverOnDeregistration", + "TargetFailOverOnUnhealthy", + }, + UnwrapEmbeddedStructs: false, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveElbv2targetGroupTags`, - }, { Name: "arn", Type: schema.TypeString, diff --git a/codegen/recipes/eventbridge.go b/codegen/recipes/eventbridge.go index 5cc17629..c988a15e 100644 --- a/codegen/recipes/eventbridge.go +++ b/codegen/recipes/eventbridge.go @@ -5,23 +5,22 @@ import ( "github.com/aws/aws-sdk-go-v2/service/eventbridge/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func EventbridgeResources() []*Resource { regionalResources := []*Resource{ { - SubService: "event_buses", - Struct: &types.EventBus{}, - Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_EventBus.html", - SkipFields: []string{"Arn"}, + SubService: "event_buses", + Struct: &ohaws.EventBus{}, + PreResourceResolver: "getEventbridgeEventBus", + Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_EventBus.html", + SkipFields: []string{"Arn"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveEventbridgeEventBusTags`, - }, { Name: "arn", Type: schema.TypeString, @@ -34,10 +33,12 @@ func EventbridgeResources() []*Resource { ShouldGenerateResolverAndMockTest: false, }, { - SubService: "event_bus_rules", - Struct: &types.Rule{}, - Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Rule.html", - SkipFields: []string{}, + SubService: "event_bus_rules", + Struct: &ohaws.EventBridgeRule{}, + PreResourceResolver: "getEventBusRule", + Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Rule.html", + SkipFields: []string{}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -46,27 +47,25 @@ func EventbridgeResources() []*Resource { Type: schema.TypeString, Resolver: `schema.ParentColumnResolver("arn")`, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveEventbridgeEventBusRuleTags`, - }, }...), ShouldGenerateResolverAndMockTest: false, }, { - SubService: "api_destinations", - Struct: &types.ApiDestination{}, - Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_ApiDestination.html", - SkipFields: []string{"ApiDestinationArn"}, - ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{{ - Name: "arn", - Type: schema.TypeString, - Options: schema.ColumnCreationOptions{PrimaryKey: true}, - Resolver: `schema.PathResolver("ApiDestinationArn")`, - }, + SubService: "api_destinations", + Struct: &ohaws.EventBridgeAPIDestination{}, + PreResourceResolver: "getEventBridgeAPIDestination", + Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_ApiDestination.html", + SkipFields: []string{"ApiDestinationArn"}, + UnwrapEmbeddedStructs: true, + ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{ + { + Name: "arn", + Type: schema.TypeString, + Options: schema.ColumnCreationOptions{PrimaryKey: true}, + Resolver: `schema.PathResolver("ApiDestinationArn")`, + }, }...), - ShouldGenerateResolverAndMockTest: true, + ShouldGenerateResolverAndMockTest: false, }, { SubService: "archives", @@ -85,12 +84,13 @@ func EventbridgeResources() []*Resource { Struct: &types.Connection{}, Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Connection.html", SkipFields: []string{"ConnectionArn"}, - ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{{ - Name: "arn", - Type: schema.TypeString, - Options: schema.ColumnCreationOptions{PrimaryKey: true}, - Resolver: `schema.PathResolver("ConnectionArn")`, - }, + ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{ + { + Name: "arn", + Type: schema.TypeString, + Options: schema.ColumnCreationOptions{PrimaryKey: true}, + Resolver: `schema.PathResolver("ConnectionArn")`, + }, }...), ShouldGenerateResolverAndMockTest: true, }, @@ -99,12 +99,13 @@ func EventbridgeResources() []*Resource { Struct: &types.EventSource{}, Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_EventSource.html", SkipFields: []string{"Arn"}, - ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{{ - Name: "arn", - Type: schema.TypeString, - Options: schema.ColumnCreationOptions{PrimaryKey: true}, - Resolver: `schema.PathResolver("Arn")`, - }, + ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{ + { + Name: "arn", + Type: schema.TypeString, + Options: schema.ColumnCreationOptions{PrimaryKey: true}, + Resolver: `schema.PathResolver("Arn")`, + }, }...), ShouldGenerateResolverAndMockTest: true, }, @@ -112,12 +113,13 @@ func EventbridgeResources() []*Resource { SubService: "replays", Struct: &types.Replay{}, Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Replay.html", - ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{{ - Name: "arn", - Type: schema.TypeString, - Options: schema.ColumnCreationOptions{PrimaryKey: true}, - Resolver: `resolveReplayArn`, - }, + ExtraColumns: append(defaultRegionalColumns, []codegen.ColumnDefinition{ + { + Name: "arn", + Type: schema.TypeString, + Options: schema.ColumnCreationOptions{PrimaryKey: true}, + Resolver: `resolveReplayArn`, + }, }...), ShouldGenerateResolverAndMockTest: true, }, @@ -129,12 +131,13 @@ func EventbridgeResources() []*Resource { Struct: &types.Endpoint{}, Description: "https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Endpoint.html", SkipFields: []string{"Arn"}, - ExtraColumns: append(defaultAccountColumns, []codegen.ColumnDefinition{{ - Name: "arn", - Type: schema.TypeString, - Options: schema.ColumnCreationOptions{PrimaryKey: true}, - Resolver: `schema.PathResolver("Arn")`, - }, + ExtraColumns: append(defaultAccountColumns, []codegen.ColumnDefinition{ + { + Name: "arn", + Type: schema.TypeString, + Options: schema.ColumnCreationOptions{PrimaryKey: true}, + Resolver: `schema.PathResolver("Arn")`, + }, }...), ShouldGenerateResolverAndMockTest: true, }, diff --git a/codegen/recipes/firehose.go b/codegen/recipes/firehose.go index 6c04bcae..1ba37dce 100644 --- a/codegen/recipes/firehose.go +++ b/codegen/recipes/firehose.go @@ -1,27 +1,23 @@ package recipes import ( - "github.com/aws/aws-sdk-go-v2/service/firehose/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func FirehoseResources() []*Resource { resources := []*Resource{ { SubService: "delivery_streams", - Struct: &types.DeliveryStreamDescription{}, + Struct: &ohaws.FirehoseStream{}, Description: "https://docs.aws.amazon.com/firehose/latest/APIReference/API_DeliveryStreamDescription.html", SkipFields: []string{"DeliveryStreamARN"}, PreResourceResolver: "getDeliveryStream", ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveFirehoseDeliveryStreamTags`, - }, { Name: "arn", Type: schema.TypeString, diff --git a/codegen/recipes/glue.go b/codegen/recipes/glue.go index 0fd8be96..ba980112 100644 --- a/codegen/recipes/glue.go +++ b/codegen/recipes/glue.go @@ -5,6 +5,8 @@ import ( "github.com/aws/aws-sdk-go-v2/service/glue/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func GlueResources() []*Resource { @@ -70,9 +72,11 @@ func GlueResources() []*Resource { }...), }, { - SubService: "databases", - Struct: &types.Database{}, - SkipFields: []string{}, + SubService: "databases", + Struct: &ohaws.GlueDatabase{}, + PreResourceResolver: "getGlueDatabase", + SkipFields: []string{}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -82,20 +86,17 @@ func GlueResources() []*Resource { Resolver: `resolveGlueDatabaseArn`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveGlueDatabaseTags`, - }, }...), Relations: []string{ "DatabaseTables()", }, }, { - SubService: "database_tables", - Struct: &types.Table{}, - SkipFields: []string{"Name"}, + SubService: "database_tables", + Struct: &ohaws.GlueTable{}, + PreResourceResolver: "getGlueTable", + SkipFields: []string{"Name"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -182,9 +183,11 @@ func GlueResources() []*Resource { }...), }, { - SubService: "jobs", - Struct: &types.Job{}, - SkipFields: []string{}, + SubService: "jobs", + Struct: &ohaws.GlueJob{}, + PreResourceResolver: "getGlueJob", + SkipFields: []string{}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -194,11 +197,6 @@ func GlueResources() []*Resource { Resolver: `resolveGlueJobArn`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveGlueJobTags`, - }, }...), Relations: []string{ "JobRuns()", @@ -351,10 +349,11 @@ func GlueResources() []*Resource { }, }, { - SubService: "triggers", - Struct: &types.Trigger{}, - SkipFields: []string{}, - PreResourceResolver: "getTrigger", + SubService: "triggers", + Struct: &ohaws.GlueTrigger{}, + SkipFields: []string{}, + PreResourceResolver: "getTrigger", + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -364,11 +363,6 @@ func GlueResources() []*Resource { Resolver: `resolveGlueTriggerArn`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveGlueTriggerTags`, - }, }...), }, { diff --git a/codegen/recipes/iam.go b/codegen/recipes/iam.go index 94bd515b..a53e8119 100644 --- a/codegen/recipes/iam.go +++ b/codegen/recipes/iam.go @@ -30,7 +30,7 @@ func IAMResources() []*Resource { }, { SubService: "credential_reports", - Struct: &models.CredentialReportEntry{}, + Struct: &ohaws.CredentialReportEntry{}, SkipFields: []string{ "Arn", "UserCreationTime", @@ -185,7 +185,7 @@ func IAMResources() []*Resource { }, { SubService: "password_policies", - Struct: &models.PasswordPolicyWrapper{}, + Struct: &ohaws.PasswordPolicy{}, SkipFields: []string{}, ExtraColumns: []codegen.ColumnDefinition{ { @@ -374,10 +374,11 @@ func IAMResources() []*Resource { }, }, { - SubService: "user_access_keys", - Struct: &models.AccessKeyWrapper{}, - SkipFields: []string{}, - PostResourceResolver: `postIamUserAccessKeyResolver`, + SubService: "user_access_keys", + Struct: &ohaws.AccessKey{}, + SkipFields: []string{}, + // PostResourceResolver: `postIamUserAccessKeyResolver`, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultAccountColumns, []codegen.ColumnDefinition{ @@ -396,14 +397,6 @@ func IAMResources() []*Resource { Type: schema.TypeString, Resolver: `schema.ParentColumnResolver("id")`, }, - { - Name: "last_used", - Type: schema.TypeTimestamp, - }, - { - Name: "last_used_service_name", - Type: schema.TypeString, - }, { Name: ohResourceTypeColumn, Type: schema.TypeString, diff --git a/codegen/recipes/iot.go b/codegen/recipes/iot.go index 253fa226..d297932a 100644 --- a/codegen/recipes/iot.go +++ b/codegen/recipes/iot.go @@ -5,6 +5,8 @@ import ( "github.com/aws/aws-sdk-go-v2/service/iot/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func IOTResources() []*Resource { @@ -56,10 +58,12 @@ func IOTResources() []*Resource { }...), }, { - SubService: "certificates", - Struct: &types.CertificateDescription{}, - Description: "https://docs.aws.amazon.com/iot/latest/apireference/API_CertificateDescription.html", - SkipFields: []string{"CertificateArn"}, + SubService: "certificates", + Struct: &ohaws.IoTCertificate{}, + PreResourceResolver: "getIotCertificate", + Description: "https://docs.aws.amazon.com/iot/latest/apireference/API_CertificateDescription.html", + SkipFields: []string{"CertificateArn"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -98,18 +102,15 @@ func IOTResources() []*Resource { }...), }, { - SubService: "policies", - Struct: &types.Policy{}, - Description: "https://docs.aws.amazon.com/iot/latest/apireference/API_Policy.html", - SkipFields: []string{"PolicyArn"}, + SubService: "policies", + Struct: &ohaws.IoTPolicy{}, + PreResourceResolver: "getIotPolicy", + Description: "https://docs.aws.amazon.com/iot/latest/apireference/API_Policy.html", + SkipFields: []string{"PolicyArn"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `ResolveIotPolicyTags`, - }, { Name: "arn", Type: schema.TypeString, @@ -160,9 +161,11 @@ func IOTResources() []*Resource { }...), }, { - SubService: "thing_groups", - Struct: &iot.DescribeThingGroupOutput{}, - SkipFields: []string{"ThingGroupArn"}, + SubService: "thing_groups", + Struct: &ohaws.IoTThingGroup{}, + PreResourceResolver: "getIotThingGroup", + SkipFields: []string{"ThingGroupArn"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -177,11 +180,6 @@ func IOTResources() []*Resource { Resolver: `ResolveIotThingGroupPolicies`, IgnoreInTests: true, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `ResolveIotThingGroupTags`, - }, { Name: "arn", Type: schema.TypeString, @@ -212,10 +210,12 @@ func IOTResources() []*Resource { }...), }, { - SubService: "things", - Struct: &types.ThingAttribute{}, - Description: "https://docs.aws.amazon.com/iot/latest/apireference/API_ThingAttribute.html", - SkipFields: []string{"ThingArn"}, + SubService: "things", + Struct: &ohaws.IoTThing{}, + PreResourceResolver: "getIotThing", + Description: "https://docs.aws.amazon.com/iot/latest/apireference/API_ThingAttribute.html", + SkipFields: []string{"ThingArn"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ diff --git a/codegen/recipes/kms.go b/codegen/recipes/kms.go index 32d0575d..0571b98e 100644 --- a/codegen/recipes/kms.go +++ b/codegen/recipes/kms.go @@ -4,6 +4,8 @@ import ( "github.com/aws/aws-sdk-go-v2/service/kms/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func KMSResources() []*Resource { @@ -25,7 +27,7 @@ func KMSResources() []*Resource { }...), }, { SubService: "keys", - Struct: &types.KeyMetadata{}, + Struct: &ohaws.KMSKey{}, Description: "https://docs.aws.amazon.com/kms/latest/APIReference/API_KeyMetadata.html", PreResourceResolver: "getKey", SkipFields: []string{"Arn"}, @@ -37,11 +39,6 @@ func KMSResources() []*Resource { Type: schema.TypeBool, Resolver: `resolveKeysRotationEnabled`, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: `resolveKeysTags`, - }, { Name: "arn", Type: schema.TypeString, diff --git a/codegen/recipes/lambda.go b/codegen/recipes/lambda.go index 219bc385..9cdf66d6 100644 --- a/codegen/recipes/lambda.go +++ b/codegen/recipes/lambda.go @@ -10,6 +10,7 @@ import ( "github.com/cloudquery/plugin-sdk/schema" "github.com/OpsHelmInc/cloudquery/resources/services/lambda/models" + "github.com/OpsHelmInc/ohaws" ) func LambdaResources() []*Resource { @@ -76,7 +77,7 @@ func LambdaResources() []*Resource { }, { SubService: "function_aliases", - Struct: &models.AliasWrapper{}, + Struct: &ohaws.Alias{}, SkipFields: []string{"AliasArn"}, PreResourceResolver: "getFunctionAliasURLConfig", ExtraColumns: append( diff --git a/codegen/recipes/route53.go b/codegen/recipes/route53.go index 26dcfccb..cfe89ed7 100644 --- a/codegen/recipes/route53.go +++ b/codegen/recipes/route53.go @@ -4,16 +4,16 @@ import ( "reflect" "strings" - "github.com/OpsHelmInc/cloudquery/resources/services/route53/models" "github.com/aws/aws-sdk-go-v2/service/route53/types" "github.com/aws/aws-sdk-go-v2/service/route53domains" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func Route53Resources() []*Resource { resources := []*Resource{ - { SubService: "delegation_sets", Struct: &types.DelegationSet{}, @@ -86,9 +86,10 @@ func Route53Resources() []*Resource { }, { - SubService: "hosted_zones", - Struct: &models.Route53HostedZoneWrapper{}, - SkipFields: []string{"ARN"}, + SubService: "hosted_zones", + Struct: &ohaws.Route53HostedZone{}, + SkipFields: []string{"ARN"}, + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultAccountColumns, []codegen.ColumnDefinition{ diff --git a/codegen/recipes/sagemaker.go b/codegen/recipes/sagemaker.go index 1d1d785b..4a9201e7 100644 --- a/codegen/recipes/sagemaker.go +++ b/codegen/recipes/sagemaker.go @@ -4,16 +4,18 @@ import ( "github.com/aws/aws-sdk-go-v2/service/sagemaker" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func SagemakerResources() []*Resource { resources := []*Resource{ - { - SubService: "endpoint_configurations", - Struct: &sagemaker.DescribeEndpointConfigOutput{}, - SkipFields: []string{"EndpointConfigArn"}, - PreResourceResolver: "getEndpointConfiguration", + SubService: "endpoint_configurations", + Struct: &ohaws.SagemakerEndpointConfig{}, + SkipFields: []string{"EndpointConfigArn"}, + PreResourceResolver: "getEndpointConfiguration", + UnwrapEmbeddedStructs: true, ExtraColumns: append( defaultRegionalColumns, []codegen.ColumnDefinition{ @@ -23,12 +25,6 @@ func SagemakerResources() []*Resource { Resolver: `schema.PathResolver("EndpointConfigArn")`, Options: schema.ColumnCreationOptions{PrimaryKey: true}, }, - { - Name: "tags", - Description: "The tags associated with the model.", - Type: schema.TypeJSON, - Resolver: `resolveSagemakerEndpointConfigurationTags`, - }, }...), }, diff --git a/codegen/recipes/wafv2.go b/codegen/recipes/wafv2.go index 14f9c4e5..e9dab404 100644 --- a/codegen/recipes/wafv2.go +++ b/codegen/recipes/wafv2.go @@ -4,17 +4,18 @@ import ( "reflect" "strings" - "github.com/OpsHelmInc/cloudquery/resources/services/wafv2/models" "github.com/aws/aws-sdk-go-v2/service/wafv2/types" "github.com/cloudquery/plugin-sdk/codegen" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/ohaws" ) func WAFv2Resources() []*Resource { resources := []*Resource{ { SubService: "ipsets", - Struct: &types.IPSet{}, + Struct: &ohaws.WAFv2IPSet{}, Description: "https://docs.aws.amazon.com/waf/latest/APIReference/API_IPSet.html", SkipFields: []string{"Addresses", "ARN"}, PreResourceResolver: "getIpset", @@ -34,11 +35,6 @@ func WAFv2Resources() []*Resource { Type: schema.TypeInetArray, Resolver: "resolveIpsetAddresses", }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: "resolveIpsetTags", - }, { Name: "arn", Type: schema.TypeString, @@ -145,7 +141,7 @@ func WAFv2Resources() []*Resource { }, { SubService: "web_acls", - Struct: &models.WebACLWrapper{}, + Struct: &ohaws.WAFv2WebACL{}, SkipFields: []string{"ARN"}, PreResourceResolver: "getWebAcl", ExtraColumns: []codegen.ColumnDefinition{ @@ -159,11 +155,6 @@ func WAFv2Resources() []*Resource { Type: schema.TypeString, Resolver: "client.ResolveAWSRegion", }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: "resolveWebACLTags", - }, { Name: "resources_for_web_acl", Type: schema.TypeStringArray, diff --git a/codegen/services/clients.go b/codegen/services/clients.go index 1e2d428f..ffcc4137 100644 --- a/codegen/services/clients.go +++ b/codegen/services/clients.go @@ -94,7 +94,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/xray" ) -var clients = []interface{}{ +var clients = []any{ &accessanalyzer.Client{}, &account.Client{}, &acm.Client{}, diff --git a/codegen/services/generate.go b/codegen/services/generate.go index 78880e36..bc948a9f 100644 --- a/codegen/services/generate.go +++ b/codegen/services/generate.go @@ -31,7 +31,7 @@ var exceptions = []string{ } // Adapted from https://stackoverflow.com/a/54129236 -func signature(name string, f interface{}) string { +func signature(name string, f any) string { t := reflect.TypeOf(f) if t.Kind() != reflect.Func { return "" @@ -92,7 +92,7 @@ type serviceInfo struct { Signatures []string } -func getServiceInfo(client interface{}) serviceInfo { +func getServiceInfo(client any) serviceInfo { v := reflect.ValueOf(client) t := v.Type() pkgPath := t.Elem().PkgPath() diff --git a/docs/tables/README.md b/docs/tables/README.md index 727b4eba..65c9308e 100644 --- a/docs/tables/README.md +++ b/docs/tables/README.md @@ -198,7 +198,6 @@ - [aws_elbv2_load_balancers](aws_elbv2_load_balancers.md) - [aws_elbv2_listeners](aws_elbv2_listeners.md) - [aws_elbv2_listener_certificates](aws_elbv2_listener_certificates.md) - - [aws_elbv2_load_balancer_attributes](aws_elbv2_load_balancer_attributes.md) - [aws_elbv2_target_groups](aws_elbv2_target_groups.md) - [aws_elbv2_target_group_target_health_descriptions](aws_elbv2_target_group_target_health_descriptions.md) - [aws_emr_block_public_access_configs](aws_emr_block_public_access_configs.md) diff --git a/docs/tables/aws_acm_certificates.md b/docs/tables/aws_acm_certificates.md index 3652c05b..4154a4b1 100644 --- a/docs/tables/aws_acm_certificates.md +++ b/docs/tables/aws_acm_certificates.md @@ -16,29 +16,5 @@ The primary key for this table is **arn**. |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| -|certificate_authority_arn|String| -|created_at|Timestamp| -|domain_name|String| -|domain_validation_options|JSON| -|extended_key_usages|JSON| -|failure_reason|String| -|imported_at|Timestamp| -|in_use_by|StringArray| -|issued_at|Timestamp| -|issuer|String| -|key_algorithm|String| -|key_usages|JSON| -|not_after|Timestamp| -|not_before|Timestamp| -|options|JSON| -|renewal_eligibility|String| -|renewal_summary|JSON| -|revocation_reason|String| -|revoked_at|Timestamp| -|serial|String| -|signature_algorithm|String| -|status|String| -|subject|String| -|subject_alternative_names|StringArray| -|type|String| \ No newline at end of file +|certificate_detail|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_apigatewayv2_apis.md b/docs/tables/aws_apigatewayv2_apis.md index a696bf27..441afad4 100644 --- a/docs/tables/aws_apigatewayv2_apis.md +++ b/docs/tables/aws_apigatewayv2_apis.md @@ -37,6 +37,7 @@ The following tables depend on aws_apigatewayv2_apis: |disable_execute_api_endpoint|Bool| |disable_schema_validation|Bool| |import_info|StringArray| +|ip_address_type|String| |tags|JSON| |version|String| |warnings|StringArray| \ No newline at end of file diff --git a/docs/tables/aws_athena_data_catalogs.md b/docs/tables/aws_athena_data_catalogs.md index 3419aaaa..0761c9c9 100644 --- a/docs/tables/aws_athena_data_catalogs.md +++ b/docs/tables/aws_athena_data_catalogs.md @@ -19,11 +19,5 @@ The following tables depend on aws_athena_data_catalogs: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| -|name|String| -|type|String| -|connection_type|String| -|description|String| -|error|String| -|parameters|JSON| -|status|String| \ No newline at end of file +|data_catalog|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_athena_work_groups.md b/docs/tables/aws_athena_work_groups.md index 27c03432..8946235c 100644 --- a/docs/tables/aws_athena_work_groups.md +++ b/docs/tables/aws_athena_work_groups.md @@ -21,10 +21,5 @@ The following tables depend on aws_athena_work_groups: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| -|name|String| -|configuration|JSON| -|creation_time|Timestamp| -|description|String| -|identity_center_application_arn|String| -|state|String| \ No newline at end of file +|work_group|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_backup_plans.md b/docs/tables/aws_backup_plans.md index a34a96b2..f74543fa 100644 --- a/docs/tables/aws_backup_plans.md +++ b/docs/tables/aws_backup_plans.md @@ -19,13 +19,5 @@ The following tables depend on aws_backup_plans: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| -|advanced_backup_settings|JSON| -|backup_plan|JSON| -|backup_plan_id|String| -|creation_date|Timestamp| -|creator_request_id|String| -|deletion_date|Timestamp| -|last_execution_date|Timestamp| -|version_id|String| -|result_metadata|JSON| \ No newline at end of file +|get_backup_plan_output|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_backup_vaults.md b/docs/tables/aws_backup_vaults.md index 41c32476..c9ba3650 100644 --- a/docs/tables/aws_backup_vaults.md +++ b/docs/tables/aws_backup_vaults.md @@ -21,15 +21,5 @@ The following tables depend on aws_backup_vaults: |arn (PK)|String| |access_policy|JSON| |notifications|JSON| -|tags|JSON| -|backup_vault_name|String| -|creation_date|Timestamp| -|creator_request_id|String| -|encryption_key_arn|String| -|lock_date|Timestamp| -|locked|Bool| -|max_retention_days|Int| -|min_retention_days|Int| -|number_of_recovery_points|Int| -|vault_state|String| -|vault_type|String| \ No newline at end of file +|backup_vault_list_member|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_cloudtrail_trails.md b/docs/tables/aws_cloudtrail_trails.md index 4fe7341c..328ae261 100644 --- a/docs/tables/aws_cloudtrail_trails.md +++ b/docs/tables/aws_cloudtrail_trails.md @@ -21,19 +21,5 @@ The following tables depend on aws_cloudtrail_trails: |cloudwatch_logs_log_group_name|String| |arn (PK)|String| |status|JSON| -|cloud_watch_logs_log_group_arn|String| -|cloud_watch_logs_role_arn|String| -|has_custom_event_selectors|Bool| -|has_insight_selectors|Bool| -|home_region|String| -|include_global_service_events|Bool| -|is_multi_region_trail|Bool| -|is_organization_trail|Bool| -|kms_key_id|String| -|log_file_validation_enabled|Bool| -|name|String| -|s3_bucket_name|String| -|s3_key_prefix|String| -|sns_topic_arn|String| -|sns_topic_name|String| +|trail|JSON| |tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_cloudwatch_alarms.md b/docs/tables/aws_cloudwatch_alarms.md index 95f21e85..1c999bd3 100644 --- a/docs/tables/aws_cloudwatch_alarms.md +++ b/docs/tables/aws_cloudwatch_alarms.md @@ -15,33 +15,7 @@ The primary key for this table is **arn**. |_cq_parent_id|UUID| |account_id|String| |region|String| -|tags|JSON| |arn (PK)|String| |dimensions|JSON| -|actions_enabled|Bool| -|alarm_actions|StringArray| -|alarm_configuration_updated_timestamp|Timestamp| -|alarm_description|String| -|alarm_name|String| -|comparison_operator|String| -|datapoints_to_alarm|Int| -|evaluate_low_sample_count_percentile|String| -|evaluation_periods|Int| -|evaluation_state|String| -|extended_statistic|String| -|insufficient_data_actions|StringArray| -|metric_name|String| -|metrics|JSON| -|namespace|String| -|ok_actions|StringArray| -|period|Int| -|state_reason|String| -|state_reason_data|String| -|state_transitioned_timestamp|Timestamp| -|state_updated_timestamp|Timestamp| -|state_value|String| -|statistic|String| -|threshold|Float| -|threshold_metric_id|String| -|treat_missing_data|String| -|unit|String| \ No newline at end of file +|metric_alarm|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_cognito_user_pools.md b/docs/tables/aws_cognito_user_pools.md index 6779fe0b..22dcc59a 100644 --- a/docs/tables/aws_cognito_user_pools.md +++ b/docs/tables/aws_cognito_user_pools.md @@ -51,4 +51,5 @@ The following tables depend on aws_cognito_user_pools: |user_pool_tier|String| |username_attributes|StringArray| |username_configuration|JSON| -|verification_message_template|JSON| \ No newline at end of file +|verification_message_template|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_ec2_ebs_volumes.md b/docs/tables/aws_ec2_ebs_volumes.md index 598a71f7..e36a7257 100644 --- a/docs/tables/aws_ec2_ebs_volumes.md +++ b/docs/tables/aws_ec2_ebs_volumes.md @@ -34,4 +34,5 @@ The primary key for this table is **arn**. |tags|JSON| |throughput|Int| |volume_id|String| +|volume_initialization_rate|Int| |volume_type|String| \ No newline at end of file diff --git a/docs/tables/aws_ec2_eips.md b/docs/tables/aws_ec2_eips.md index 26be85b2..60fed3de 100644 --- a/docs/tables/aws_ec2_eips.md +++ b/docs/tables/aws_ec2_eips.md @@ -30,4 +30,5 @@ The primary key for this table is **_cq_id**. |private_ip_address|String| |public_ip|String| |public_ipv4_pool|String| +|service_managed|String| |tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_ec2_reserved_instances.md b/docs/tables/aws_ec2_reserved_instances.md index 67b90f96..23fd37fc 100644 --- a/docs/tables/aws_ec2_reserved_instances.md +++ b/docs/tables/aws_ec2_reserved_instances.md @@ -17,6 +17,7 @@ The primary key for this table is **arn**. |region|String| |arn (PK)|String| |availability_zone|String| +|availability_zone_id|String| |currency_code|String| |duration|Int| |end|Timestamp| diff --git a/docs/tables/aws_ec2_vpcs.md b/docs/tables/aws_ec2_vpcs.md index 0da9871d..dac79d2f 100644 --- a/docs/tables/aws_ec2_vpcs.md +++ b/docs/tables/aws_ec2_vpcs.md @@ -21,6 +21,7 @@ The primary key for this table is **arn**. |cidr_block|String| |cidr_block_association_set|JSON| |dhcp_options_id|String| +|encryption_control|JSON| |instance_tenancy|String| |ipv6_cidr_block_association_set|JSON| |is_default|Bool| diff --git a/docs/tables/aws_ecr_repositories.md b/docs/tables/aws_ecr_repositories.md index 834f2ec9..11f6f118 100644 --- a/docs/tables/aws_ecr_repositories.md +++ b/docs/tables/aws_ecr_repositories.md @@ -19,13 +19,7 @@ The following tables depend on aws_ecr_repositories: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| |policy_text|JSON| |oh_resource_type|String| -|created_at|Timestamp| -|encryption_configuration|JSON| -|image_scanning_configuration|JSON| -|image_tag_mutability|String| -|registry_id|String| -|repository_name|String| -|repository_uri|String| \ No newline at end of file +|repository|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_ecrpublic_repositories.md b/docs/tables/aws_ecrpublic_repositories.md index d830ba91..41472669 100644 --- a/docs/tables/aws_ecrpublic_repositories.md +++ b/docs/tables/aws_ecrpublic_repositories.md @@ -19,9 +19,6 @@ The following tables depend on aws_ecrpublic_repositories: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| |oh_resource_type|String| -|created_at|Timestamp| -|registry_id|String| -|repository_name|String| -|repository_uri|String| \ No newline at end of file +|repository|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_elasticache_clusters.md b/docs/tables/aws_elasticache_clusters.md index 5f3b2fbb..d0f7c2af 100644 --- a/docs/tables/aws_elasticache_clusters.md +++ b/docs/tables/aws_elasticache_clusters.md @@ -48,4 +48,5 @@ The primary key for this table is **arn**. |snapshot_retention_limit|Int| |snapshot_window|String| |transit_encryption_enabled|Bool| -|transit_encryption_mode|String| \ No newline at end of file +|transit_encryption_mode|String| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_elasticache_replication_groups.md b/docs/tables/aws_elasticache_replication_groups.md index 0cf9a9e9..6c3246ad 100644 --- a/docs/tables/aws_elasticache_replication_groups.md +++ b/docs/tables/aws_elasticache_replication_groups.md @@ -46,4 +46,5 @@ The primary key for this table is **arn**. |status|String| |transit_encryption_enabled|Bool| |transit_encryption_mode|String| -|user_group_ids|StringArray| \ No newline at end of file +|user_group_ids|StringArray| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_elasticache_subnet_groups.md b/docs/tables/aws_elasticache_subnet_groups.md index 72a22bde..016402fb 100644 --- a/docs/tables/aws_elasticache_subnet_groups.md +++ b/docs/tables/aws_elasticache_subnet_groups.md @@ -20,4 +20,5 @@ The primary key for this table is **arn**. |cache_subnet_group_name|String| |subnets|JSON| |supported_network_types|StringArray| -|vpc_id|String| \ No newline at end of file +|vpc_id|String| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_elasticsearch_domains.md b/docs/tables/aws_elasticsearch_domains.md index 2a7026f8..190d7a5e 100644 --- a/docs/tables/aws_elasticsearch_domains.md +++ b/docs/tables/aws_elasticsearch_domains.md @@ -15,31 +15,6 @@ The composite primary key for this table is (**account_id**, **region**, **id**) |_cq_parent_id|UUID| |account_id (PK)|String| |region (PK)|String| -|tags|JSON| |id (PK)|String| -|arn|String| -|domain_name|String| -|elasticsearch_cluster_config|JSON| -|access_policies|String| -|advanced_options|JSON| -|advanced_security_options|JSON| -|auto_tune_options|JSON| -|change_progress_details|JSON| -|cognito_options|JSON| -|created|Bool| -|deleted|Bool| -|domain_endpoint_options|JSON| -|domain_processing_status|String| -|ebs_options|JSON| -|elasticsearch_version|String| -|encryption_at_rest_options|JSON| -|endpoint|String| -|endpoints|JSON| -|log_publishing_options|JSON| -|modifying_properties|JSON| -|node_to_node_encryption_options|JSON| -|processing|Bool| -|service_software_options|JSON| -|snapshot_options|JSON| -|upgrade_processing|Bool| -|vpc_options|JSON| \ No newline at end of file +|elasticsearch_domain_status|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_elbv2_listeners.md b/docs/tables/aws_elbv2_listeners.md index f132183f..90dd02a0 100644 --- a/docs/tables/aws_elbv2_listeners.md +++ b/docs/tables/aws_elbv2_listeners.md @@ -20,13 +20,6 @@ The following tables depend on aws_elbv2_listeners: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| |oh_resource_type|String| -|alpn_policy|StringArray| -|certificates|JSON| -|default_actions|JSON| -|load_balancer_arn|String| -|mutual_authentication|JSON| -|port|Int| -|protocol|String| -|ssl_policy|String| \ No newline at end of file +|listener|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_elbv2_load_balancer_attributes.md b/docs/tables/aws_elbv2_load_balancer_attributes.md deleted file mode 100644 index 37278c4f..00000000 --- a/docs/tables/aws_elbv2_load_balancer_attributes.md +++ /dev/null @@ -1,22 +0,0 @@ -# Table: aws_elbv2_load_balancer_attributes - -https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_LoadBalancerAttribute.html - -The primary key for this table is **_cq_id**. - -## Relations -This table depends on [aws_elbv2_load_balancers](aws_elbv2_load_balancers.md). - - -## Columns -| Name | Type | -| ------------- | ------------- | -|_cq_source_name|String| -|_cq_sync_time|Timestamp| -|_cq_id (PK)|UUID| -|_cq_parent_id|UUID| -|account_id|String| -|region|String| -|load_balancer_arn|String| -|key|String| -|value|String| \ No newline at end of file diff --git a/docs/tables/aws_elbv2_load_balancers.md b/docs/tables/aws_elbv2_load_balancers.md index 9e4c5c21..f262bfa9 100644 --- a/docs/tables/aws_elbv2_load_balancers.md +++ b/docs/tables/aws_elbv2_load_balancers.md @@ -8,7 +8,6 @@ The primary key for this table is **arn**. The following tables depend on aws_elbv2_load_balancers: - [aws_elbv2_listeners](aws_elbv2_listeners.md) - - [aws_elbv2_load_balancer_attributes](aws_elbv2_load_balancer_attributes.md) ## Columns | Name | Type | @@ -20,20 +19,8 @@ The following tables depend on aws_elbv2_load_balancers: |account_id|String| |region|String| |web_acl_arn|String| -|tags|JSON| |arn (PK)|String| |oh_resource_type|String| -|availability_zones|JSON| -|canonical_hosted_zone_id|String| -|created_time|Timestamp| -|customer_owned_ipv4_pool|String| -|dns_name|String| -|enable_prefix_for_ipv6_source_nat|String| -|enforce_security_group_inbound_rules_on_private_link_traffic|String| -|ip_address_type|String| -|load_balancer_name|String| -|scheme|String| -|security_groups|StringArray| -|state|JSON| -|type|String| -|vpc_id|String| \ No newline at end of file +|load_balancer|JSON| +|tags|JSON| +|unknown_attributes|JSON| \ No newline at end of file diff --git a/docs/tables/aws_elbv2_target_groups.md b/docs/tables/aws_elbv2_target_groups.md index d9ce06be..f81109ae 100644 --- a/docs/tables/aws_elbv2_target_groups.md +++ b/docs/tables/aws_elbv2_target_groups.md @@ -18,23 +18,8 @@ The following tables depend on aws_elbv2_target_groups: |_cq_parent_id|UUID| |account_id|String| |region|String| -|tags|JSON| |arn (PK)|String| |oh_resource_type|String| -|health_check_enabled|Bool| -|health_check_interval_seconds|Int| -|health_check_path|String| -|health_check_port|String| -|health_check_protocol|String| -|health_check_timeout_seconds|Int| -|healthy_threshold_count|Int| -|ip_address_type|String| -|load_balancer_arns|StringArray| -|matcher|JSON| -|port|Int| -|protocol|String| -|protocol_version|String| -|target_group_name|String| -|target_type|String| -|unhealthy_threshold_count|Int| -|vpc_id|String| \ No newline at end of file +|target_group|JSON| +|tags|JSON| +|unknown_attributes|JSON| \ No newline at end of file diff --git a/docs/tables/aws_eventbridge_api_destinations.md b/docs/tables/aws_eventbridge_api_destinations.md index 42f852d6..88dd98c2 100644 --- a/docs/tables/aws_eventbridge_api_destinations.md +++ b/docs/tables/aws_eventbridge_api_destinations.md @@ -19,8 +19,11 @@ The primary key for this table is **arn**. |api_destination_state|String| |connection_arn|String| |creation_time|Timestamp| +|description|String| |http_method|String| |invocation_endpoint|String| |invocation_rate_limit_per_second|Int| |last_modified_time|Timestamp| -|name|String| \ No newline at end of file +|name|String| +|result_metadata|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_eventbridge_event_bus_rules.md b/docs/tables/aws_eventbridge_event_bus_rules.md index d8120d37..21886ec5 100644 --- a/docs/tables/aws_eventbridge_event_bus_rules.md +++ b/docs/tables/aws_eventbridge_event_bus_rules.md @@ -18,8 +18,8 @@ This table depends on [aws_eventbridge_event_buses](aws_eventbridge_event_buses. |account_id|String| |region|String| |event_bus_arn|String| -|tags|JSON| |arn|String| +|created_by|String| |description|String| |event_bus_name|String| |event_pattern|String| @@ -27,4 +27,6 @@ This table depends on [aws_eventbridge_event_buses](aws_eventbridge_event_buses. |name|String| |role_arn|String| |schedule_expression|String| -|state|String| \ No newline at end of file +|state|String| +|result_metadata|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_eventbridge_event_buses.md b/docs/tables/aws_eventbridge_event_buses.md index 555d8441..136abf60 100644 --- a/docs/tables/aws_eventbridge_event_buses.md +++ b/docs/tables/aws_eventbridge_event_buses.md @@ -18,10 +18,13 @@ The following tables depend on aws_eventbridge_event_buses: |_cq_parent_id|UUID| |account_id|String| |region|String| -|tags|JSON| |arn (PK)|String| |creation_time|Timestamp| +|dead_letter_config|JSON| |description|String| +|kms_key_identifier|String| |last_modified_time|Timestamp| |name|String| -|policy|String| \ No newline at end of file +|policy|String| +|result_metadata|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_firehose_delivery_streams.md b/docs/tables/aws_firehose_delivery_streams.md index 19361f80..d2b611e4 100644 --- a/docs/tables/aws_firehose_delivery_streams.md +++ b/docs/tables/aws_firehose_delivery_streams.md @@ -15,16 +15,6 @@ The primary key for this table is **arn**. |_cq_parent_id|UUID| |account_id|String| |region|String| -|tags|JSON| |arn (PK)|String| -|delivery_stream_name|String| -|delivery_stream_status|String| -|delivery_stream_type|String| -|destinations|JSON| -|has_more_destinations|Bool| -|version_id|String| -|create_timestamp|Timestamp| -|delivery_stream_encryption_configuration|JSON| -|failure_description|JSON| -|last_update_timestamp|Timestamp| -|source|JSON| \ No newline at end of file +|delivery_stream_description|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_glue_database_tables.md b/docs/tables/aws_glue_database_tables.md index b11db0ee..2c44a0c1 100644 --- a/docs/tables/aws_glue_database_tables.md +++ b/docs/tables/aws_glue_database_tables.md @@ -43,4 +43,5 @@ The following tables depend on aws_glue_database_tables: |version_id|String| |view_definition|JSON| |view_expanded_text|String| -|view_original_text|String| \ No newline at end of file +|view_original_text|String| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_glue_databases.md b/docs/tables/aws_glue_databases.md index 45fcd3d3..a6add9ee 100644 --- a/docs/tables/aws_glue_databases.md +++ b/docs/tables/aws_glue_databases.md @@ -19,7 +19,6 @@ The following tables depend on aws_glue_databases: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| |name|String| |catalog_id|String| |create_table_default_permissions|JSON| @@ -28,4 +27,5 @@ The following tables depend on aws_glue_databases: |federated_database|JSON| |location_uri|String| |parameters|JSON| -|target_database|JSON| \ No newline at end of file +|target_database|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_glue_jobs.md b/docs/tables/aws_glue_jobs.md index 84b0fcd0..e4d254a3 100644 --- a/docs/tables/aws_glue_jobs.md +++ b/docs/tables/aws_glue_jobs.md @@ -19,7 +19,6 @@ The following tables depend on aws_glue_jobs: |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| |allocated_capacity|Int| |code_gen_configuration_nodes|JSON| |command|JSON| @@ -46,4 +45,5 @@ The following tables depend on aws_glue_jobs: |security_configuration|String| |source_control_details|JSON| |timeout|Int| -|worker_type|String| \ No newline at end of file +|worker_type|String| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_glue_triggers.md b/docs/tables/aws_glue_triggers.md index ba03af0b..eae052a7 100644 --- a/docs/tables/aws_glue_triggers.md +++ b/docs/tables/aws_glue_triggers.md @@ -16,7 +16,6 @@ The primary key for this table is **arn**. |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| |actions|JSON| |description|String| |event_batching_condition|JSON| @@ -26,4 +25,5 @@ The primary key for this table is **arn**. |schedule|String| |state|String| |type|String| -|workflow_name|String| \ No newline at end of file +|workflow_name|String| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_iam_password_policies.md b/docs/tables/aws_iam_password_policies.md index 36d0f3b1..398b7f89 100644 --- a/docs/tables/aws_iam_password_policies.md +++ b/docs/tables/aws_iam_password_policies.md @@ -16,14 +16,5 @@ The primary key for this table is **account_id**. |arn|String| |account_id (PK)|String| |oh_resource_type|String| -|allow_users_to_change_password|Bool| -|expire_passwords|Bool| -|hard_expiry|Bool| -|max_password_age|Int| -|minimum_password_length|Int| -|password_reuse_prevention|Int| -|require_lowercase_characters|Bool| -|require_numbers|Bool| -|require_symbols|Bool| -|require_uppercase_characters|Bool| +|password_policy|JSON| |policy_exists|Bool| \ No newline at end of file diff --git a/docs/tables/aws_iam_user_access_keys.md b/docs/tables/aws_iam_user_access_keys.md index 7f7beb0d..e5de159e 100644 --- a/docs/tables/aws_iam_user_access_keys.md +++ b/docs/tables/aws_iam_user_access_keys.md @@ -19,11 +19,11 @@ This table depends on [aws_iam_users](aws_iam_users.md). |arn|String| |user_arn|String| |user_id|String| -|last_used|Timestamp| -|last_used_service_name|String| |oh_resource_type|String| |access_key_id|String| |create_date|Timestamp| |status|String| |user_name|String| -|last_rotated|Timestamp| \ No newline at end of file +|last_used_date|Timestamp| +|last_used_region|String| +|last_used_service_name|String| \ No newline at end of file diff --git a/docs/tables/aws_iot_certificates.md b/docs/tables/aws_iot_certificates.md index 88824ab0..a7357059 100644 --- a/docs/tables/aws_iot_certificates.md +++ b/docs/tables/aws_iot_certificates.md @@ -29,4 +29,5 @@ The primary key for this table is **arn**. |previous_owned_by|String| |status|String| |transfer_data|JSON| -|validity|JSON| \ No newline at end of file +|validity|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_iot_policies.md b/docs/tables/aws_iot_policies.md index f9ae8700..d7ff6cea 100644 --- a/docs/tables/aws_iot_policies.md +++ b/docs/tables/aws_iot_policies.md @@ -15,6 +15,12 @@ The primary key for this table is **arn**. |_cq_parent_id|UUID| |account_id|String| |region|String| -|tags|JSON| |arn (PK)|String| -|policy_name|String| \ No newline at end of file +|creation_date|Timestamp| +|default_version_id|String| +|generation_id|String| +|last_modified_date|Timestamp| +|policy_document|String| +|policy_name|String| +|result_metadata|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_iot_thing_groups.md b/docs/tables/aws_iot_thing_groups.md index 070e8cc2..80a89404 100644 --- a/docs/tables/aws_iot_thing_groups.md +++ b/docs/tables/aws_iot_thing_groups.md @@ -17,7 +17,6 @@ The primary key for this table is **arn**. |region|String| |things_in_group|StringArray| |policies|StringArray| -|tags|JSON| |arn (PK)|String| |index_name|String| |query_string|String| @@ -28,4 +27,5 @@ The primary key for this table is **arn**. |thing_group_name|String| |thing_group_properties|JSON| |version|Int| -|result_metadata|JSON| \ No newline at end of file +|result_metadata|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_iot_things.md b/docs/tables/aws_iot_things.md index 428a47e8..86e846db 100644 --- a/docs/tables/aws_iot_things.md +++ b/docs/tables/aws_iot_things.md @@ -18,6 +18,11 @@ The primary key for this table is **arn**. |principals|StringArray| |arn (PK)|String| |attributes|JSON| +|billing_group_name|String| +|default_client_id|String| +|thing_id|String| |thing_name|String| |thing_type_name|String| -|version|Int| \ No newline at end of file +|version|Int| +|result_metadata|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_kms_keys.md b/docs/tables/aws_kms_keys.md index 56d81b1f..75d6e2f9 100644 --- a/docs/tables/aws_kms_keys.md +++ b/docs/tables/aws_kms_keys.md @@ -19,30 +19,7 @@ The following tables depend on aws_kms_keys: |account_id|String| |region|String| |rotation_enabled|Bool| -|tags|JSON| |arn (PK)|String| |replica_keys|JSON| -|key_id|String| -|aws_account_id|String| -|cloud_hsm_cluster_id|String| -|creation_date|Timestamp| -|custom_key_store_id|String| -|customer_master_key_spec|String| -|deletion_date|Timestamp| -|description|String| -|enabled|Bool| -|encryption_algorithms|StringArray| -|expiration_model|String| -|key_agreement_algorithms|StringArray| -|key_manager|String| -|key_spec|String| -|key_state|String| -|key_usage|String| -|mac_algorithms|StringArray| -|multi_region|Bool| -|multi_region_configuration|JSON| -|origin|String| -|pending_deletion_window_in_days|Int| -|signing_algorithms|StringArray| -|valid_to|Timestamp| -|xks_key_configuration|JSON| \ No newline at end of file +|key_metadata|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_lambda_function_aliases.md b/docs/tables/aws_lambda_function_aliases.md index d9001052..c912e412 100644 --- a/docs/tables/aws_lambda_function_aliases.md +++ b/docs/tables/aws_lambda_function_aliases.md @@ -19,9 +19,5 @@ This table depends on [aws_lambda_functions](aws_lambda_functions.md). |region|String| |function_arn|String| |arn (PK)|String| -|description|String| -|function_version|String| -|name|String| -|revision_id|String| -|routing_config|JSON| +|alias_configuration|JSON| |url_config|JSON| \ No newline at end of file diff --git a/docs/tables/aws_route53_hosted_zones.md b/docs/tables/aws_route53_hosted_zones.md index 917de11c..7ba166b3 100644 --- a/docs/tables/aws_route53_hosted_zones.md +++ b/docs/tables/aws_route53_hosted_zones.md @@ -28,4 +28,5 @@ The following tables depend on aws_route53_hosted_zones: |resource_record_set_count|Int| |tags|JSON| |delegation_set_id|String| +|delegation_set|JSON| |vpcs|JSON| \ No newline at end of file diff --git a/docs/tables/aws_sagemaker_endpoint_configurations.md b/docs/tables/aws_sagemaker_endpoint_configurations.md index 79e3899c..815b5601 100644 --- a/docs/tables/aws_sagemaker_endpoint_configurations.md +++ b/docs/tables/aws_sagemaker_endpoint_configurations.md @@ -16,7 +16,6 @@ The primary key for this table is **arn**. |account_id|String| |region|String| |arn (PK)|String| -|tags|JSON| |creation_time|Timestamp| |endpoint_config_name|String| |production_variants|JSON| @@ -28,4 +27,4 @@ The primary key for this table is **arn**. |kms_key_id|String| |shadow_production_variants|JSON| |vpc_config|JSON| -|result_metadata|JSON| \ No newline at end of file +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_wafv2_ipsets.md b/docs/tables/aws_wafv2_ipsets.md index bec3136f..5e09ae91 100644 --- a/docs/tables/aws_wafv2_ipsets.md +++ b/docs/tables/aws_wafv2_ipsets.md @@ -16,9 +16,6 @@ The primary key for this table is **arn**. |account_id|String| |region|String| |addresses|InetArray| -|tags|JSON| |arn (PK)|String| -|ip_address_version|String| -|id|String| -|name|String| -|description|String| \ No newline at end of file +|ip_set|JSON| +|tags|JSON| \ No newline at end of file diff --git a/docs/tables/aws_wafv2_web_acls.md b/docs/tables/aws_wafv2_web_acls.md index 3c5d71ce..0aa8c03a 100644 --- a/docs/tables/aws_wafv2_web_acls.md +++ b/docs/tables/aws_wafv2_web_acls.md @@ -15,24 +15,8 @@ The primary key for this table is **arn**. |_cq_parent_id|UUID| |account_id|String| |region|String| -|tags|JSON| |resources_for_web_acl|StringArray| |arn (PK)|String| -|default_action|JSON| -|id|String| -|name|String| -|visibility_config|JSON| -|association_config|JSON| -|capacity|Int| -|captcha_config|JSON| -|challenge_config|JSON| -|custom_response_bodies|JSON| -|description|String| -|label_namespace|String| -|managed_by_firewall_manager|Bool| -|post_process_firewall_manager_rule_groups|JSON| -|pre_process_firewall_manager_rule_groups|JSON| -|retrofitted_by_firewall_manager|Bool| -|rules|JSON| -|token_domains|StringArray| -|logging_configuration|JSON| \ No newline at end of file +|web_acl|JSON| +|logging_configuration|JSON| +|tags|JSON| \ No newline at end of file diff --git a/go.mod b/go.mod index e5da577d..9533d53d 100644 --- a/go.mod +++ b/go.mod @@ -3,126 +3,128 @@ module github.com/OpsHelmInc/cloudquery go 1.24 require ( - github.com/OpsHelmInc/ohaws v0.8.1 - github.com/aws/aws-sdk-go-v2 v1.36.1 - github.com/aws/aws-sdk-go-v2/config v1.29.6 + github.com/OpsHelmInc/ohaws v0.10.0 + github.com/aws/aws-sdk-go-v2 v1.36.3 + github.com/aws/aws-sdk-go-v2/config v1.29.14 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.61 github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.13 github.com/aws/aws-sdk-go-v2/service/account v1.22.8 - github.com/aws/aws-sdk-go-v2/service/acm v1.30.18 - github.com/aws/aws-sdk-go-v2/service/apigateway v1.28.11 - github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.25.0 + github.com/aws/aws-sdk-go-v2/service/acm v1.32.0 + github.com/aws/aws-sdk-go-v2/service/apigateway v1.30.1 + github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.27.1 github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.34.13 github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.15 github.com/aws/aws-sdk-go-v2/service/appstream v1.43.2 github.com/aws/aws-sdk-go-v2/service/appsync v1.43.0 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 - github.com/aws/aws-sdk-go-v2/service/cloudformation v1.57.0 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.10 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 + github.com/aws/aws-sdk-go-v2/service/cloudformation v1.59.2 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.29.7 - github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.47.4 - github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.14 + github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.48.4 + github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.44.3 github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.45.12 - github.com/aws/aws-sdk-go-v2/service/codebuild v1.51.3 - github.com/aws/aws-sdk-go-v2/service/codepipeline v1.38.9 + github.com/aws/aws-sdk-go-v2/service/codebuild v1.60.0 + github.com/aws/aws-sdk-go-v2/service/codepipeline v1.41.0 github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.28.5 - github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.49.4 + github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.52.0 github.com/aws/aws-sdk-go-v2/service/configservice v1.51.12 github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.47.0 github.com/aws/aws-sdk-go-v2/service/dax v1.23.15 github.com/aws/aws-sdk-go-v2/service/directconnect v1.30.12 github.com/aws/aws-sdk-go-v2/service/docdb v1.40.10 - github.com/aws/aws-sdk-go-v2/service/dynamodb v1.40.1 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.203.0 - github.com/aws/aws-sdk-go-v2/service/ecr v1.41.0 - github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.31.2 - github.com/aws/aws-sdk-go-v2/service/ecs v1.53.13 - github.com/aws/aws-sdk-go-v2/service/efs v1.34.11 - github.com/aws/aws-sdk-go-v2/service/eks v1.58.0 - github.com/aws/aws-sdk-go-v2/service/elasticache v1.44.12 + github.com/aws/aws-sdk-go-v2/service/dynamodb v1.43.1 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0 + github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0 + github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0 + github.com/aws/aws-sdk-go-v2/service/ecs v1.57.0 + github.com/aws/aws-sdk-go-v2/service/efs v1.35.3 + github.com/aws/aws-sdk-go-v2/service/eks v1.64.0 + github.com/aws/aws-sdk-go-v2/service/elasticache v1.46.0 github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.16 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.17 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 - github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.32.18 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.29.3 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 + github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.33.3 github.com/aws/aws-sdk-go-v2/service/emr v1.47.12 - github.com/aws/aws-sdk-go-v2/service/eventbridge v1.36.11 - github.com/aws/aws-sdk-go-v2/service/firehose v1.36.4 + github.com/aws/aws-sdk-go-v2/service/eventbridge v1.39.0 + github.com/aws/aws-sdk-go-v2/service/firehose v1.37.4 github.com/aws/aws-sdk-go-v2/service/frauddetector v1.35.15 github.com/aws/aws-sdk-go-v2/service/fsx v1.52.0 github.com/aws/aws-sdk-go-v2/service/glacier v1.26.16 github.com/aws/aws-sdk-go-v2/service/guardduty v1.52.10 - github.com/aws/aws-sdk-go-v2/service/iam v1.39.1 - github.com/aws/aws-sdk-go-v2/service/identitystore v1.27.16 + github.com/aws/aws-sdk-go-v2/service/iam v1.42.0 + github.com/aws/aws-sdk-go-v2/service/identitystore v1.28.3 github.com/aws/aws-sdk-go-v2/service/inspector v1.25.15 github.com/aws/aws-sdk-go-v2/service/inspector2 v1.34.9 - github.com/aws/aws-sdk-go-v2/service/iot v1.62.8 - github.com/aws/aws-sdk-go-v2/service/kafka v1.38.16 - github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.18 - github.com/aws/aws-sdk-go-v2/service/kms v1.37.18 - github.com/aws/aws-sdk-go-v2/service/lambda v1.69.12 + github.com/aws/aws-sdk-go-v2/service/iot v1.64.2 + github.com/aws/aws-sdk-go-v2/service/kafka v1.39.2 + github.com/aws/aws-sdk-go-v2/service/kinesis v1.35.0 + github.com/aws/aws-sdk-go-v2/service/kms v1.38.3 + github.com/aws/aws-sdk-go-v2/service/lambda v1.71.2 github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.15 - github.com/aws/aws-sdk-go-v2/service/mq v1.27.16 + github.com/aws/aws-sdk-go-v2/service/mq v1.29.0 github.com/aws/aws-sdk-go-v2/service/mwaa v1.33.10 github.com/aws/aws-sdk-go-v2/service/neptune v1.35.17 - github.com/aws/aws-sdk-go-v2/service/organizations v1.37.8 - github.com/aws/aws-sdk-go-v2/service/qldb v1.25.15 + github.com/aws/aws-sdk-go-v2/service/organizations v1.38.3 + github.com/aws/aws-sdk-go-v2/service/qldb v1.26.2 github.com/aws/aws-sdk-go-v2/service/quicksight v1.83.6 github.com/aws/aws-sdk-go-v2/service/ram v1.29.19 - github.com/aws/aws-sdk-go-v2/service/rds v1.93.12 - github.com/aws/aws-sdk-go-v2/service/redshift v1.53.12 + github.com/aws/aws-sdk-go-v2/service/rds v1.95.0 + github.com/aws/aws-sdk-go-v2/service/redshift v1.54.3 github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.27.18 - github.com/aws/aws-sdk-go-v2/service/route53 v1.48.7 - github.com/aws/aws-sdk-go-v2/service/route53domains v1.28.9 - github.com/aws/aws-sdk-go-v2/service/s3 v1.76.1 - github.com/aws/aws-sdk-go-v2/service/s3control v1.53.4 - github.com/aws/aws-sdk-go-v2/service/sagemaker v1.174.3 - github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.17 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 + github.com/aws/aws-sdk-go-v2/service/route53 v1.51.1 + github.com/aws/aws-sdk-go-v2/service/route53domains v1.29.2 + github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 + github.com/aws/aws-sdk-go-v2/service/s3control v1.58.0 + github.com/aws/aws-sdk-go-v2/service/sagemaker v1.192.0 + github.com/aws/aws-sdk-go-v2/service/scheduler v1.13.3 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.32.15 github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.30.15 github.com/aws/aws-sdk-go-v2/service/servicequotas v1.25.18 github.com/aws/aws-sdk-go-v2/service/sesv2 v1.41.5 github.com/aws/aws-sdk-go-v2/service/sfn v1.34.12 - github.com/aws/aws-sdk-go-v2/service/sns v1.33.19 - github.com/aws/aws-sdk-go-v2/service/sqs v1.37.14 - github.com/aws/aws-sdk-go-v2/service/ssm v1.56.12 - github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.29.15 - github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 + github.com/aws/aws-sdk-go-v2/service/sns v1.34.4 + github.com/aws/aws-sdk-go-v2/service/sqs v1.38.5 + github.com/aws/aws-sdk-go-v2/service/ssm v1.59.0 + github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.31.0 + github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.29.16 github.com/aws/aws-sdk-go-v2/service/waf v1.25.15 - github.com/aws/aws-sdk-go-v2/service/wafv2 v1.55.14 + github.com/aws/aws-sdk-go-v2/service/wafv2 v1.60.1 github.com/aws/aws-sdk-go-v2/service/workspaces v1.52.5 github.com/aws/aws-sdk-go-v2/service/xray v1.30.12 - github.com/aws/smithy-go v1.22.2 + github.com/aws/smithy-go v1.22.3 github.com/basgys/goxml2json v1.1.0 github.com/cloudquery/plugin-sdk v1.11.2 github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 github.com/golang/mock v1.6.0 - github.com/google/go-cmp v0.6.0 + github.com/google/go-cmp v0.7.0 github.com/mitchellh/mapstructure v1.5.0 - github.com/rs/zerolog v1.31.0 + github.com/rs/zerolog v1.34.0 github.com/stretchr/testify v1.10.0 github.com/thoas/go-funk v0.9.3 - golang.org/x/sync v0.5.0 + golang.org/x/sync v0.12.0 ) require ( - github.com/aws/aws-sdk-go-v2/credentials v1.17.59 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 // indirect - github.com/aws/aws-sdk-go-v2/service/acmpca v1.38.0 // indirect - github.com/aws/aws-sdk-go-v2/service/batch v1.49.12 // indirect - github.com/aws/aws-sdk-go-v2/service/comprehend v1.35.18 // indirect - github.com/aws/aws-sdk-go-v2/service/evidently v1.23.15 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.0 // indirect - github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.22.6 // indirect - github.com/aws/aws-sdk-go-v2/service/keyspaces v1.16.10 // indirect - github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.44.14 // indirect - github.com/aws/aws-sdk-go-v2/service/opensearch v1.45.11 // indirect - github.com/aws/aws-sdk-go-v2/service/personalize v1.39.15 // indirect - github.com/aws/aws-sdk-go-v2/service/schemas v1.28.17 // indirect - github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.34.11 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 // indirect - github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.21.2 // indirect + github.com/OpsHelmInc/pkg v0.0.0-20250407012623-9b679ffd4807 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/service/acmpca v1.40.2 // indirect + github.com/aws/aws-sdk-go-v2/service/amplify v1.32.1 // indirect + github.com/aws/aws-sdk-go-v2/service/batch v1.52.3 // indirect + github.com/aws/aws-sdk-go-v2/service/comprehend v1.36.4 // indirect + github.com/aws/aws-sdk-go-v2/service/evidently v1.24.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 // indirect + github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.23.3 // indirect + github.com/aws/aws-sdk-go-v2/service/keyspaces v1.18.1 // indirect + github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.47.2 // indirect + github.com/aws/aws-sdk-go-v2/service/opensearch v1.46.3 // indirect + github.com/aws/aws-sdk-go-v2/service/personalize v1.41.0 // indirect + github.com/aws/aws-sdk-go-v2/service/schemas v1.29.2 // indirect + github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.35.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.24.0 // indirect github.com/bitly/go-simplejson v0.5.0 // indirect github.com/getsentry/sentry-go v0.25.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware/providers/zerolog/v2 v2.0.0-rc.3 // indirect @@ -135,43 +137,42 @@ require ( github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/tidwall/sjson v1.2.5 // indirect - golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect ) require ( - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect - github.com/aws/aws-sdk-go-v2/service/athena v1.49.10 - github.com/aws/aws-sdk-go-v2/service/backup v1.40.10 - github.com/aws/aws-sdk-go-v2/service/glue v1.105.9 - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect + github.com/aws/aws-sdk-go-v2/service/athena v1.50.5 + github.com/aws/aws-sdk-go-v2/service/backup v1.41.2 + github.com/aws/aws-sdk-go-v2/service/glue v1.110.0 + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect github.com/aws/aws-sdk-go-v2/service/shield v1.29.15 - github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect github.com/aws/aws-sdk-go-v2/service/transfer v1.56.3 github.com/aws/aws-sdk-go-v2/service/wafregional v1.25.15 github.com/davecgh/go-spew v1.1.1 // indirect github.com/ghodss/yaml v1.0.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/iancoleman/strcase v0.2.0 - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.0 // indirect - golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.16.0 // indirect - google.golang.org/grpc v1.59.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect + golang.org/x/mod v0.19.0 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + golang.org/x/tools v0.23.0 // indirect + google.golang.org/grpc v1.71.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index fe9f7d8d..bf6c0e3f 100644 --- a/go.sum +++ b/go.sum @@ -33,42 +33,46 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OpsHelmInc/ohaws v0.8.1 h1:9sqZNLxWGpMX/PG8jt1iazMoj+kBtID+aBKPEhdBOAs= -github.com/OpsHelmInc/ohaws v0.8.1/go.mod h1:7QFbEHRKPd50MV5Eowz+0+FYzU2WB2ZDbrUV79j7bH8= +github.com/OpsHelmInc/ohaws v0.10.0 h1:jT7PTDLJ7SbRpg17qvVt/gEubIWBb8GDRk7Z0JJYGBE= +github.com/OpsHelmInc/ohaws v0.10.0/go.mod h1:ggUEOiWVlQQBgvwFBB1Ton9LukVPgmT1Y1LGW1QQsh0= +github.com/OpsHelmInc/pkg v0.0.0-20250407012623-9b679ffd4807 h1:fi7GuDAxk2XGDJIg7gdlRGLfRlRh444j/dsICtifhkM= +github.com/OpsHelmInc/pkg v0.0.0-20250407012623-9b679ffd4807/go.mod h1:r82QvSU0Btmhnk86+f/+1gXOqmqY/RXRtWzvIpa2maU= github.com/avast/retry-go/v4 v4.3.1 h1:Mtg11F9PdAIMkMiio2RKcYauoVHjl2aB3zQJJlzD4cE= github.com/avast/retry-go/v4 v4.3.1/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= -github.com/aws/aws-sdk-go-v2 v1.36.1 h1:iTDl5U6oAhkNPba0e1t1hrwAo02ZMqbrGq4k5JBWM5E= -github.com/aws/aws-sdk-go-v2 v1.36.1/go.mod h1:5PMILGVKiW32oDzjj6RU52yrNrDPUHcbZQYr1sM7qmM= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 h1:zAxi9p3wsZMIaVCdoiQp2uZ9k1LsZvmAnoTBeZPXom0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8/go.mod h1:3XkePX5dSaxveLAYY7nsbsZZrKxCyEuE5pM4ziFxyGg= -github.com/aws/aws-sdk-go-v2/config v1.29.6 h1:fqgqEKK5HaZVWLQoLiC9Q+xDlSp+1LYidp6ybGE2OGg= -github.com/aws/aws-sdk-go-v2/config v1.29.6/go.mod h1:Ft+WLODzDQmCTHDvqAH1JfC2xxbZ0MxpZAcJqmE1LTQ= -github.com/aws/aws-sdk-go-v2/credentials v1.17.59 h1:9btwmrt//Q6JcSdgJOLI98sdr5p7tssS9yAsGe8aKP4= -github.com/aws/aws-sdk-go-v2/credentials v1.17.59/go.mod h1:NM8fM6ovI3zak23UISdWidyZuI1ghNe2xjzUZAyT+08= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 h1:KwsodFKVQTlI5EyhRSugALzsV6mG/SGrdjlMXSZSdso= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28/go.mod h1:EY3APf9MzygVhKuPXAc5H+MkGb8k/DOSQjWS0LgkKqI= +github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= +github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= +github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqWX4dg1BDcSJM= +github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.61 h1:BBIPjlEWLxX1huGTkBu/eeqyaXC0pVwDCYbQuE/JPfU= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.61/go.mod h1:6dkLZQM1D/wKKFJEvyB1OCXJ0f68wcIPDOiXm0KyT8A= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 h1:BjUcr3X3K0wZPGFg2bxOWW3VPN8rkE3/61zhP+IHviA= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32/go.mod h1:80+OGC/bgzzFFTUmcuwD0lb4YutwQeKLFpmt6hoWapU= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 h1:m1GeXHVMJsRsUAqG6HjZWx9dj7F5TR+cF1bjyfYyBd4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32/go.mod h1:IitoQxGfaKdVLNg0hD8/DXmAqNy0H4K2H2Sf91ti8sI= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 h1:OIHj/nAhVzIXGzbAE+4XmZ8FPvro3THr6NlqErJc3wY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32/go.mod h1:LiBEsDo34OJXqdDlRGsilhlIiXR7DL+6Cx2f4p1EgzI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.13 h1:iMx9RH8omJ68C/ZIkr/qLTwx4+s5M6jX2HNlvA4IcsU= github.com/aws/aws-sdk-go-v2/service/accessanalyzer v1.36.13/go.mod h1:YN9GFdSZ4yMxWf49WsxcESYn/XmGp7CKluQC09I7BK4= github.com/aws/aws-sdk-go-v2/service/account v1.22.8 h1:+lD4yimG2mnzbG130tXaRDnacFpO3r4bYzR9IY2qzxk= github.com/aws/aws-sdk-go-v2/service/account v1.22.8/go.mod h1:fikXHLo5UeQLE2kUt6JtO1SHfBqgqIqKk3inzXG3VGc= -github.com/aws/aws-sdk-go-v2/service/acm v1.30.18 h1:/MZpjVk95P+lF9dUcOmyQwp1r0Ld4A8AxfQLdf1w8bU= -github.com/aws/aws-sdk-go-v2/service/acm v1.30.18/go.mod h1:JaIJpS5R/ADAyK2gGYcQSmpMyty24/nLxvwsPe629BI= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.38.0 h1:Gu6BhmpH3rIutQM/4uPqpSxT7/s359tsNN4ft0WV+sY= -github.com/aws/aws-sdk-go-v2/service/acmpca v1.38.0/go.mod h1:B3FF89zqbPv/BsOa1oGxMGudd8oto8+ddnyPG0SGvAA= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.28.11 h1:ycngSPaz5ANDuVtyr2ZjBfLgKC2Wm7rwtbmPw8u28Lw= -github.com/aws/aws-sdk-go-v2/service/apigateway v1.28.11/go.mod h1:zi9247+Eu/bOu9kfCswcyy5wj9AbBBQckQI9PBCMVV0= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.25.0 h1:t9crewlq7K+sSDHCZrMR9ofrFv/b4+CD+LzQARzmTf0= -github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.25.0/go.mod h1:P6IluZtTAoWnjSYWv0sZhxYaAjabjFAxYAcaW4c0gt0= +github.com/aws/aws-sdk-go-v2/service/acm v1.32.0 h1:Ik/TAn4TBw/t3JhQJKtwjgoOf6kg5nXc190TiGhNrmI= +github.com/aws/aws-sdk-go-v2/service/acm v1.32.0/go.mod h1:3sKYAgRbuBa2QMYGh/WEclwnmfx+QoPhhX25PdSQSQM= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.40.2 h1:eer4qV5+FUwxPwvRTlUWVC32M6b0Zc9N73sZTW5b26c= +github.com/aws/aws-sdk-go-v2/service/acmpca v1.40.2/go.mod h1:v0S5xoRSVzO4z09Fyqm6zkpeYU20qRBXwVS+BOejpcE= +github.com/aws/aws-sdk-go-v2/service/amplify v1.32.1 h1:IqoFNRHPU9do2NRLaFTeNTWnpFWGzJiuC5njS1KYkfg= +github.com/aws/aws-sdk-go-v2/service/amplify v1.32.1/go.mod h1:f8HNneMWkB/Gs6U9yQX5CMNWSk7wS7Lg9YU1AKLLn1w= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.30.1 h1:8COpAPpNU1vCdm5wmqZGmBXcipTSbCQ5dRdjEudaa/0= +github.com/aws/aws-sdk-go-v2/service/apigateway v1.30.1/go.mod h1:C9suuW30sexkILV5QRkNexNeRUtYs98agpG5nZ+zh0k= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.27.1 h1:h+C/Mrb+17iTaCmGuhMAGxxl6Cc7Wf2GqQ7/HG5wiXA= +github.com/aws/aws-sdk-go-v2/service/apigatewayv2 v1.27.1/go.mod h1:x70T2BgvD2nDaQJCtfg8xuOAxJBILWVog8hxph4DAhk= github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.34.13 h1:u9Wn9VP1RqmF1fm9eldij0Z2f7jV5lDMyu6JRkFIUVc= github.com/aws/aws-sdk-go-v2/service/applicationautoscaling v1.34.13/go.mod h1:pXL7RrZvmrRJFaT/p1IiLUTa6BfVAowzA9ezCZChpGI= github.com/aws/aws-sdk-go-v2/service/apprunner v1.32.15 h1:2VtkXuX1wTaPQP2qYdUkPk3PIBQyDejBtLiGdwWABGA= @@ -77,36 +81,36 @@ github.com/aws/aws-sdk-go-v2/service/appstream v1.43.2 h1:z/gc4UKPKPCw5F4/7xmvJU github.com/aws/aws-sdk-go-v2/service/appstream v1.43.2/go.mod h1:JG2WY9NNzscWm8cSGmzsf5c8YOZsNzwpaHioz3FXtCc= github.com/aws/aws-sdk-go-v2/service/appsync v1.43.0 h1:NXBPA1CEW0AVbg/2QseUjG3SHU4wHrbwXtha+Cwvsvg= github.com/aws/aws-sdk-go-v2/service/appsync v1.43.0/go.mod h1:n3rcdK67R1TkgyXz+48uIUlpiMUwUd7pdVADSEZ5FGA= -github.com/aws/aws-sdk-go-v2/service/athena v1.49.10 h1:ZmeifAscJrXrNrbtwwDRHUBuingJeXuzt5Is/tgkrq0= -github.com/aws/aws-sdk-go-v2/service/athena v1.49.10/go.mod h1:EdOpoTphKVuE17FbNbOCXSOMovKjAlqtUlW3veeKhJM= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 h1:Bfz5hDqAgm9NByWdA0zfof70CVkjb6SE3RwU75lj66Y= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12/go.mod h1:+yg2Ygx7ParYfxoo1CLHzqD1zcmWuKNDfxuB8CrOx44= -github.com/aws/aws-sdk-go-v2/service/backup v1.40.10 h1:/qkt3SKl7VUI48CV47dMdJGte/kg6YIs9HGucKRomY4= -github.com/aws/aws-sdk-go-v2/service/backup v1.40.10/go.mod h1:Vdu4P8UrQhIh69PlgCuJFVicDJgy4Z6i0lAEpJLBw2Q= -github.com/aws/aws-sdk-go-v2/service/batch v1.49.12 h1:ZypMyiIWXzsAQMZHCpwQK5hXX35uOPkMe6NUHqXZWP4= -github.com/aws/aws-sdk-go-v2/service/batch v1.49.12/go.mod h1:0cM+Y2YB968mPCQFynoUQppM8Ekj4CZJIJ5zgFygMKg= -github.com/aws/aws-sdk-go-v2/service/cloudformation v1.57.0 h1:T4MRGuPFk/R8kHDNH8XKQCv5jnFuj60xs82eRZq+4Ls= -github.com/aws/aws-sdk-go-v2/service/cloudformation v1.57.0/go.mod h1:N9kHHkhOTqyLGAq+liCrRnmJ1OSLLvfHc0M/gu3qlwg= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.10 h1:fdLh7eMf5mxtggx2nG0+cFkaiRK+ULCOPK3qq8eTje4= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.10/go.mod h1:uBca+/1aH5v/RYWXqyymLrsbmx1vU9bBxeurlC627Gc= +github.com/aws/aws-sdk-go-v2/service/athena v1.50.5 h1:jtjq2nXMt8eSB4gTcZwjbKURjrpKJuSQ5LVspf/hiJ4= +github.com/aws/aws-sdk-go-v2/service/athena v1.50.5/go.mod h1:xsG8Y2fMenmHTdukyknTUO1uQhEZ/entaNHvPmD1klE= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 h1:vzLD0FyNU4uxf2QE5UDG0jSEitiJXbVEUwf2Sk3usF4= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= +github.com/aws/aws-sdk-go-v2/service/backup v1.41.2 h1:ZUhpA6CSdSujpAnVkM9KKa/ZLZWtz9ixE/yxjYJsqFA= +github.com/aws/aws-sdk-go-v2/service/backup v1.41.2/go.mod h1:m+D3BbPUewtKk/9bWmxGVg1mDeNCu5NtPoTdiLQnEM8= +github.com/aws/aws-sdk-go-v2/service/batch v1.52.3 h1:OnK28xGcooIEL2FGT8aqwBT4kcPHNlhajo7vMwbgySk= +github.com/aws/aws-sdk-go-v2/service/batch v1.52.3/go.mod h1:F8tHrowT/XPtWMERTbDvJDUILrZgUV8W2lg4MmiuMtc= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.59.2 h1:o9cuZdZlI9VWMqsNa2mnf2IRsFAROHnaYA1BW3lHGuY= +github.com/aws/aws-sdk-go-v2/service/cloudformation v1.59.2/go.mod h1:penaZKzGmqHGZId4EUCBIW/f9l4Y7hQ5NKd45yoCYuI= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 h1:6xZNYtuVwzBs8k+TmraERt0vL68Ppg9aUi+aTQmPaVM= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.29.7 h1:+iRBeKOx5gNLaW6KV3m2+oEJkPJs4ZOtpmmHu0hkFMw= github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.29.7/go.mod h1:UnMCKCyyL+rkCUOSYPPu5pxBPKRInsLuJUoz1FvLQLI= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.47.4 h1:4hiC8jzPP89L+MTljvKs1LLC12gKJLMJwysjOrbJz1E= -github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.47.4/go.mod h1:Kj+z0vXRl21DsnPR+lA5DjVWCaRTvAmwQ/shTGHeY84= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.14 h1:RdaxtOI+W9CqnFDLXkoFEkmNxR+ZOkzSqExvqmNqA3M= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.14/go.mod h1:fwajvO52Dn+DVxtXQJeGLfnNq+Qm+Pul56XtOKCyN00= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.48.4 h1:pQpinmWv9jEisDR6/DccOf2cXdAf/CAwQ39nfJfJDlE= +github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.48.4/go.mod h1:/BibEr5ksr34abqBTQN213GrNG6GCKCB6WG7CH4zH2w= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.44.3 h1:sTFYiNh6kB1m+HODmfCAXgx7A54tsZVK5xbUlE7V6as= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.44.3/go.mod h1:HJlcOk+S/wjJuR/8jPa8GhnEKdKqqiQ5wjsE1PjuO1o= github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.45.12 h1:B7P9U6OmFa+TEnpny4JpWnYBkBfMMU592fomNZxVIc0= github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.45.12/go.mod h1:omuyZE5hIJGMRTWvXfRPdEy85w4exm5e65/4ExTibJw= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.51.3 h1:Q33oo9meAR1xjsRYJ5C4rcnLowaPtkIykfeAlizh/H0= -github.com/aws/aws-sdk-go-v2/service/codebuild v1.51.3/go.mod h1:t4KtUd68MrlCp9C768K45iKEm6Roq75y/ufqwrb63Vg= -github.com/aws/aws-sdk-go-v2/service/codepipeline v1.38.9 h1:8GhWxIXMdD3dlA7gTaH8ywDKlglIg9DSC2YH3a2WFQs= -github.com/aws/aws-sdk-go-v2/service/codepipeline v1.38.9/go.mod h1:csaBRan3CN2ZQp/SqmBy2HZlKClxjfUiSsRe+SK6I3g= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.60.0 h1:TrTjtw8YV2HjLwtE97dKDc1/bAkGRIf+xRsG1a+WwEE= +github.com/aws/aws-sdk-go-v2/service/codebuild v1.60.0/go.mod h1:13SjlSpfNt71ZBZZqLMSy08j9jSPA9D5179dKV9RRz4= +github.com/aws/aws-sdk-go-v2/service/codepipeline v1.41.0 h1:Xrw+FmTiatAPbjEwySsEf6lF0+2NtBwDcXnYH/jfk4k= +github.com/aws/aws-sdk-go-v2/service/codepipeline v1.41.0/go.mod h1:DbwgOhGcyAQbyKZDXbErngumtUExzwvd1uyMbKQcXto= github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.28.5 h1:FGpgp0hIjXd8c95DkUWmUSRzP0zB6+2SPhKPVIV2YQk= github.com/aws/aws-sdk-go-v2/service/cognitoidentity v1.28.5/go.mod h1:FVwu2qNBYtqYmfWFjIDZ6OYgJv72aMIe9wzO7Ze6wOs= -github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.49.4 h1:Q1kQTn60/08JlTD2nFRNCEF+ti/SKUUZCQsOH6hVIFY= -github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.49.4/go.mod h1:wJt6TJKKWN4m5K5fU3+2OQibcsdUn5t1r8PyG8nUhjI= -github.com/aws/aws-sdk-go-v2/service/comprehend v1.35.18 h1:Xl4OPcZ8qjZB++ym5eZcr7x/c9h88mr1+ORwFvO7qu0= -github.com/aws/aws-sdk-go-v2/service/comprehend v1.35.18/go.mod h1:Ud4xpdh9n0Ay1dGMQHaTSbfVKYXAjWktDmynpPfymns= +github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.52.0 h1:Qg+rfmIZKU5xexnWejnVOdBlXTlX4PpDjBN5hwOLzVU= +github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider v1.52.0/go.mod h1:ygltZT++6Wn2uG4+tqE0NW1MkdEtb5W2O/CFc0xJX/g= +github.com/aws/aws-sdk-go-v2/service/comprehend v1.36.4 h1:AH3YRFTdz28c6RisffEpqG9xhq7V/tvm9XUho/YDIlM= +github.com/aws/aws-sdk-go-v2/service/comprehend v1.36.4/go.mod h1:Wztvp5ZZlbSeiRDcH/JII+W6yAHLXGSHt262NYcIy80= github.com/aws/aws-sdk-go-v2/service/configservice v1.51.12 h1:vEc1KyjiBqsZqkaF+6SH/Bvy/m8S0CqHv61Ka3i0LfU= github.com/aws/aws-sdk-go-v2/service/configservice v1.51.12/go.mod h1:26dWPPxvdZ9Ex8qxMsA61LBDp68phG0ddBkmUG/3298= github.com/aws/aws-sdk-go-v2/service/databasemigrationservice v1.47.0 h1:ZbF7t2ctS5GoL/j3ehxhPEaHxCym7mH/npIfHH75bRU= @@ -117,130 +121,130 @@ github.com/aws/aws-sdk-go-v2/service/directconnect v1.30.12 h1:t79Vu6UVlX6VhMZz/ github.com/aws/aws-sdk-go-v2/service/directconnect v1.30.12/go.mod h1:km4ZHZNMMtmktS4odcJiTdtOQFjMuDuCAg+BTV7zu5c= github.com/aws/aws-sdk-go-v2/service/docdb v1.40.10 h1:M+Pc9FI5Inm5P7IisViLbw8tnLyTvteTeuwN0mWPX8U= github.com/aws/aws-sdk-go-v2/service/docdb v1.40.10/go.mod h1:T0Kj3lj/4DSrtuqAt0yFLbhv5qydUgXEuL8enHpxpcg= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.40.1 h1:JUvURAe0mNRzYd+1uTHEiojeyWtNPIQ5EXnDKfgKGUU= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.40.1/go.mod h1:FcMiR2AALpkrpik6JzbYu+iEfktzrs3XOq5Shk9nvik= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.203.0 h1:EDLBXOs5D0KUqDThg8ID63mK5E7lJ8pjHGBtix6O9j0= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.203.0/go.mod h1:nSbxgPGhyI9j/cMVSHUEEtNQzEYeNOkbHnHNeTuQqt0= -github.com/aws/aws-sdk-go-v2/service/ecr v1.41.0 h1:PNluoO7Sh1myhX+6MiAUpFk46fG6827K4U+KrtUT3s8= -github.com/aws/aws-sdk-go-v2/service/ecr v1.41.0/go.mod h1:dtD3a4sjUjVL86e0NUvaqdGvds5ED6itUiZPDaT+Gh8= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.31.2 h1:E6/Myrj9HgLF22medmDrKmbpm4ULsa+cIBNx3phirBk= -github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.31.2/go.mod h1:OQ8NALFcchBJ/qruak6zKUQodovnTKKaReTuCkc5/9Y= -github.com/aws/aws-sdk-go-v2/service/ecs v1.53.13 h1:Q16+YitA+4nt8Iv+37l1Yav2ejlDb9umjJrEmX/3Xj4= -github.com/aws/aws-sdk-go-v2/service/ecs v1.53.13/go.mod h1:X4pNdZOGNt0sWAErA0rQfrcl8NCoqDwAWtPa94bAafM= -github.com/aws/aws-sdk-go-v2/service/efs v1.34.11 h1:PgeGNM3l3fg7UlFpIFEogySDrYsAeMVePZcHJJw5eVo= -github.com/aws/aws-sdk-go-v2/service/efs v1.34.11/go.mod h1:pH1iibM/aigOyMTkB9RFdGDXbofNRaLzh1qoh2fIp6E= -github.com/aws/aws-sdk-go-v2/service/eks v1.58.0 h1:CQn77jEQBLKtHXkiCN58IcrG1jj4w1EwhXRh+NeNhHc= -github.com/aws/aws-sdk-go-v2/service/eks v1.58.0/go.mod h1:N42HjGBTjTjcJolSqcG1s10xfeNTbAeLWI600lHgwIg= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.44.12 h1:jOcCDjNCWNdJmkXyKiIP/HGorjcdmeOmGLZmU4XiydM= -github.com/aws/aws-sdk-go-v2/service/elasticache v1.44.12/go.mod h1:AwS8/VfBl4lEHfbhvKcP2v8DyMx9olcVvz2Y0ygiWxA= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.43.1 h1:YYjNTAyPL0425ECmq6Xm48NSXdT6hDVQmLOJZxyhNTM= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.43.1/go.mod h1:yYaWRnVSPyAmexW5t7G3TcuYoalYfT+xQwzWsvtUQ7M= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0 h1:QPYsTfcPpPhkF+37pxLcl3xbQz2SRxsShQNB6VCkvLo= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0 h1:E+UTVTDH6XTSjqxHWRuY8nB6s+05UllneWxnycplHFk= +github.com/aws/aws-sdk-go-v2/service/ecr v1.44.0/go.mod h1:iQ1skgw1XRK+6Lgkb0I9ODatAP72WoTILh0zXQ5DtbU= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0 h1:wA2O6pZ2r5smqJunFP4hp7qptMW4EQxs8O6RVHPulOE= +github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.33.0/go.mod h1:RZL7ov7c72wSmoM8bIiVxRHgcVdzhNkVW2J36C8RF4s= +github.com/aws/aws-sdk-go-v2/service/ecs v1.57.0 h1:B8aicyNZV/2jsVfhVbuLlKT6uN/thAEk7xtPyQ42TkA= +github.com/aws/aws-sdk-go-v2/service/ecs v1.57.0/go.mod h1:wAtdeFanDuF9Re/ge4DRDaYe3Wy1OGrU7jG042UcuI4= +github.com/aws/aws-sdk-go-v2/service/efs v1.35.3 h1:sFmWdaUUJvhuH3qW8khEZH2J2m/L7T9wHtsKhfwT+Tw= +github.com/aws/aws-sdk-go-v2/service/efs v1.35.3/go.mod h1:XT6hcgC1HV33EBGPWdXnbgyeqND4k43qX3argLyEZM8= +github.com/aws/aws-sdk-go-v2/service/eks v1.64.0 h1:EYeOThTRysemFtC6J6h6b7dNg3jN03QuO5cg92ojIQE= +github.com/aws/aws-sdk-go-v2/service/eks v1.64.0/go.mod h1:v1xXy6ea0PHtWkjFUvAUh6B/5wv7UF909Nru0dOIJDk= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.46.0 h1:UficfhqlA7k0zQ/x9pNKmyIIeHfvJUfdbzOQJKGJkt8= +github.com/aws/aws-sdk-go-v2/service/elasticache v1.46.0/go.mod h1:477YEP4FkrM0oUcw+w4vk4+XTB7WacLzPGPFj69kwkg= github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.16 h1:aqQKZFCB4GRlVfdvBaJvmMs79gL4Kn8BdtayUIJ3tVk= github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.28.16/go.mod h1:rciouE//Hn6gwAX9SRkcDnm3hzqv3FAU0ZDU8ysVHOs= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.17 h1:5iAJcuuAgVMpVzItTGc+E7Tj8zXDL6sjAZQLZGq+8rA= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.28.17/go.mod h1:AR5tv65CXh3Yak2Dq+AGKn78FxtteGX4HgcQSp7Xk7s= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 h1:PLoBTtHl376mmxe5NSMUx1UD8yiM+BgIi9yJ1SgibHk= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12/go.mod h1:h7JSZfD6QGeaAWpTk0+e1hQw2Venf5gh7UlUTEAiZL8= -github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.32.18 h1:m3o/AAKhO9Jd6KSq1Z7wLUOMkaTvvKGJHBMSP8+jJHM= -github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.32.18/go.mod h1:QH00PIBY5b9UlfA0lGeUfNdZCciKX33rTvuvJsQRIQ8= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.29.3 h1:DpyV8LeDf0y7iDaGZ3h1Y+Nh5IaBOR+xj44vVgEEegY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.29.3/go.mod h1:H232HdqVlSUoqy0cMJYW1TKjcxvGFGFZ20xQG8fOAPw= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= +github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.33.3 h1:f2/JLkjVRRZVmsLj3WX/Ha99Y5ss+2YZn6Knu4KeZlY= +github.com/aws/aws-sdk-go-v2/service/elasticsearchservice v1.33.3/go.mod h1:4RQnptdnZHAktAEUkhMqy/JGeTYwSSGYzIqSOdHjcPo= github.com/aws/aws-sdk-go-v2/service/emr v1.47.12 h1:1YQ55hq+vyo9NY+5HXvXzglg4/gzOn5DWTp98nJy1+A= github.com/aws/aws-sdk-go-v2/service/emr v1.47.12/go.mod h1:cA4iRxvlXqDnPHYzOpwMF9HWCnVEo1fGZJBh9QHlCvo= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.36.11 h1:mea+RUbrBZ9FjKQUrmSfL4VrNXXfvrfPU8ayX9J02rM= -github.com/aws/aws-sdk-go-v2/service/eventbridge v1.36.11/go.mod h1:p706eBMplMoLl+lRjFSeXQTa8/HwjLjHUYKvNNY0meg= -github.com/aws/aws-sdk-go-v2/service/evidently v1.23.15 h1:XLdiDWGCcpM4NRuf7jJ1c+2CkMHjxjomjnHlFp7AKjw= -github.com/aws/aws-sdk-go-v2/service/evidently v1.23.15/go.mod h1:xMshQvCrCNeke12cAPA5IYAJawqtT/b3vVHimRIjm3w= -github.com/aws/aws-sdk-go-v2/service/firehose v1.36.4 h1:ae06cGmuOoeliMZeUAcgTapFl9ffcUIVwLRm7WVvd7k= -github.com/aws/aws-sdk-go-v2/service/firehose v1.36.4/go.mod h1:fVo9DGeEvZrKP67DP1LKa81gl5yxxDqEVC28gp06ij0= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.39.0 h1:XfMLLbZdz57JwIuETa789jOgqeEemR9gzam7x37HGS4= +github.com/aws/aws-sdk-go-v2/service/eventbridge v1.39.0/go.mod h1:QiEUHcyXhCdsTzHAbfmgwlFEmW3WgfqL4L1bS+E9IlA= +github.com/aws/aws-sdk-go-v2/service/evidently v1.24.2 h1:KjIJZGcGUIRQnCJOKeQn6ySW6aEguWxNA8kF2FXM50w= +github.com/aws/aws-sdk-go-v2/service/evidently v1.24.2/go.mod h1:6bf2Vw9e51l0fJxIB+zH8Wi1tDgkjgbfnJiAeLjAh0o= +github.com/aws/aws-sdk-go-v2/service/firehose v1.37.4 h1:n4Txba4IeWG8b/OeylAasWWCemjrULcwMGXM1ES2n3E= +github.com/aws/aws-sdk-go-v2/service/firehose v1.37.4/go.mod h1:6i3MXkR7cPgCVGgtCwxl7NEmdgkYgNRUmGGONMo9ehc= github.com/aws/aws-sdk-go-v2/service/frauddetector v1.35.15 h1:aahVlXpymqlogmSHvun6k1HQETu9dEMAnqyJxWNC+lU= github.com/aws/aws-sdk-go-v2/service/frauddetector v1.35.15/go.mod h1:/qWz8gfgTysjaPhmkYS/Yaj6fzy+uQ/9l1zMc4M6hA4= github.com/aws/aws-sdk-go-v2/service/fsx v1.52.0 h1:dfCPvsrDuWivFMnhsAqKhOOIyTK+uKCLlz15PVV6SyM= github.com/aws/aws-sdk-go-v2/service/fsx v1.52.0/go.mod h1:gnNrZVY5gL3FWp4lppI6lfKy+mVwycjYcn0bKev9uUc= github.com/aws/aws-sdk-go-v2/service/glacier v1.26.16 h1:WSJLsA2L2adn0F8Z5Lxg8RHAb6/6D8c+dpWxvVfVCng= github.com/aws/aws-sdk-go-v2/service/glacier v1.26.16/go.mod h1:HyT5M6mLxm4JxSHS+SytzyLCQ5t9O9lBmqpSLTDwJCI= -github.com/aws/aws-sdk-go-v2/service/glue v1.105.9 h1:GzlbilXxPKYpGiPgy7T9CVj0OkllW7LA+aptBRYFFo8= -github.com/aws/aws-sdk-go-v2/service/glue v1.105.9/go.mod h1:W6FO+0G0oJ30CUrwKBrT/UTCD1hm4tZNbiaGF/FGTZI= +github.com/aws/aws-sdk-go-v2/service/glue v1.110.0 h1:MWC4/VROlIF435dj8nTcwLiTcjp5u868XVrtobITloc= +github.com/aws/aws-sdk-go-v2/service/glue v1.110.0/go.mod h1:6FqWCqW0Py6VOvY42NQyf9e7N+sNVnDEiHFklCCCoQc= github.com/aws/aws-sdk-go-v2/service/guardduty v1.52.10 h1:K9+zC/sHzOEHKn8IyFSXoomMRLmm2oiTRNQA/2iUXkA= github.com/aws/aws-sdk-go-v2/service/guardduty v1.52.10/go.mod h1:wx2vg0QORdURNIEFG3ARWiicwcXHlykO4bZ32lZAgZE= -github.com/aws/aws-sdk-go-v2/service/iam v1.39.1 h1:N4OauekXigX0GgsJ+FUm7OO5HkrJR0ByZJ2YS5PIy3U= -github.com/aws/aws-sdk-go-v2/service/iam v1.39.1/go.mod h1:8rUmP3N5TJXWWEzdQ+2Tc1IELc97pxBt5Zbt4QLq7KI= -github.com/aws/aws-sdk-go-v2/service/identitystore v1.27.16 h1:e4RP3Vd6fZwvnyYXcEvdCi/lV6JLlZ53IZS6XYIw6As= -github.com/aws/aws-sdk-go-v2/service/identitystore v1.27.16/go.mod h1:EjwuGOSaIlWhNvsT94TBvPR6QlKrD4XFKdwvyOH6HV4= +github.com/aws/aws-sdk-go-v2/service/iam v1.42.0 h1:G6+UzGvubaet9QOh0664E9JeT+b6Zvop3AChozRqkrA= +github.com/aws/aws-sdk-go-v2/service/iam v1.42.0/go.mod h1:mPJkGQzeCoPs82ElNILor2JzZgYENr4UaSKUT8K27+c= +github.com/aws/aws-sdk-go-v2/service/identitystore v1.28.3 h1:zQMIlYXYHFzrurTKozpXFTGs0M5kwWgG8jL8EKGp8xg= +github.com/aws/aws-sdk-go-v2/service/identitystore v1.28.3/go.mod h1:7nGvrQXBNp7k5yYpwpmxGucYTPY39d0cxjmANAeWwYE= github.com/aws/aws-sdk-go-v2/service/inspector v1.25.15 h1:IQ3JvznJQ+un89+wAH527pSUzG1gHsmgtWUnC1kDTBE= github.com/aws/aws-sdk-go-v2/service/inspector v1.25.15/go.mod h1:rgESj+AO5P3egu/8vQRTwGIyMH0W5LjG/r9/XMSwx0o= github.com/aws/aws-sdk-go-v2/service/inspector2 v1.34.9 h1:WogKHcRT+b+gn+hF8d01Cp8GNLYU7s5OzSAeebsdOeI= github.com/aws/aws-sdk-go-v2/service/inspector2 v1.34.9/go.mod h1:H+bl20H83OALeXI/fimsMbyRO2uh3qLxB58gHwV8u7Y= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.0 h1:kT2WeWcFySdYpPgyqJMSUE7781Qucjtn6wBvrgm9P+M= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.0/go.mod h1:WYH1ABybY7JK9TITPnk6ZlP7gQB8psI4c9qDmMsnLSA= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.13 h1:eWoHfLIzYeUtJEuoUmD5PwTE+fLaIPN9NZ7UXd9CW0s= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.13/go.mod h1:x5t8Ve0J7JK9VHKSPSRAdBrWAgr/5hH3UeCFMLoyUGQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 h1:SYVGSFQHlchIcy6e7x12bsrxClCXSP5et8cqVhL8cuw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13/go.mod h1:kizuDaLX37bG5WZaoxGPQR/LNFXpxp0vsUnqfkWXfNE= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 h1:OBsrtam3rk8NfBEq7OLOMm5HtQ9Yyw32X4UQMya/wjw= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13/go.mod h1:3U4gFA5pmoCOja7aq4nSaIAGbaOHv2Yl2ug018cmC+Q= -github.com/aws/aws-sdk-go-v2/service/iot v1.62.8 h1:q8m8wfM+6SQli55XAX/Wk573qQmN1A4eSz2Cmx6zgM0= -github.com/aws/aws-sdk-go-v2/service/iot v1.62.8/go.mod h1:WdzwT2r+hxif2fcFJqZkQCL5PAkosDIQn+OkTuaMZDc= -github.com/aws/aws-sdk-go-v2/service/kafka v1.38.16 h1:r1mu+ZsoNt+3AuqYMyG2JoMkt6pYhfrzY34ENMVm6Uc= -github.com/aws/aws-sdk-go-v2/service/kafka v1.38.16/go.mod h1:HLgqO1+m+EYx7ldJjwYSMwOHV1+RPsIVBtpsv3MM/zI= -github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.22.6 h1:74v3Ql6JKB6RDHUEPJ0bA8iTBRmqxVquN6yKTwKO0Oo= -github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.22.6/go.mod h1:SbzyZrDkVAsibRXfvB1ieLddDVaj34stRTvpNyW3+08= -github.com/aws/aws-sdk-go-v2/service/keyspaces v1.16.10 h1:gGW6B0sVjXldGDewnJ6AgbX/kx+CCk7sLtIePfCsROw= -github.com/aws/aws-sdk-go-v2/service/keyspaces v1.16.10/go.mod h1:otkY9+TNY3etxUaNifOn+azUiJ+6deC29VRFvd7wpoY= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.18 h1:tOfBavxIttUkRtPgiT0rReIBdDV+EhQacTSGIER2C+o= -github.com/aws/aws-sdk-go-v2/service/kinesis v1.32.18/go.mod h1:OMKlu/wk8th7hjE0xbbT7ltHcJxgnON/mgLIdML3cNI= -github.com/aws/aws-sdk-go-v2/service/kms v1.37.18 h1:pi9M/9n1PLayBXjia7LfwgXwcpFdFO7Q2cqKOZa1ZmM= -github.com/aws/aws-sdk-go-v2/service/kms v1.37.18/go.mod h1:vZXvmzfhdsPj/axc8+qk/2fSCP4hGyaZ1MAduWEHAxM= -github.com/aws/aws-sdk-go-v2/service/lambda v1.69.12 h1:9L6sXmGtRvBFzgf14G4EwlGrFkhltigC3fbGIqZ5g+c= -github.com/aws/aws-sdk-go-v2/service/lambda v1.69.12/go.mod h1:LUkuzqAgjdxkq+UiBnOs/z5LOGoFyEkeVKxeVXB+Rt8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 h1:4nm2G6A4pV9rdlWzGMPv4BNtQp22v1hg3yrtkYpeLl8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.15 h1:M1R1rud7HzDrfCdlBQ7NjnRsDNEhXO/vGhuD189Ggmk= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.15/go.mod h1:uvFKBSq9yMPV4LGAi7N4awn4tLY+hKE35f8THes2mzQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= +github.com/aws/aws-sdk-go-v2/service/iot v1.64.2 h1:DUQ3/z7VAkIL1Y7IK4VzszzbdG6pmm20ntG/9xrEv6w= +github.com/aws/aws-sdk-go-v2/service/iot v1.64.2/go.mod h1:J+TI5cttUWiu5iZw88XitADIj5MIzC2YpefJ1w+pLAM= +github.com/aws/aws-sdk-go-v2/service/kafka v1.39.2 h1:E2YG/t/JoVPPqJaAzjj9KheMeNFShnHsuF1WcTLLtYI= +github.com/aws/aws-sdk-go-v2/service/kafka v1.39.2/go.mod h1:+9NIh+Gy66wZf5I3XLog+2pxKSWwOV82D3oTZ9It3eE= +github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.23.3 h1:HUaE+uy0oQCDXNvbgMoaJ47YmCJ20IUMaOu1F4xhA+0= +github.com/aws/aws-sdk-go-v2/service/kafkaconnect v1.23.3/go.mod h1:QONLxo22UI81IW/Vn0q6g9IUug3l+gwiHssWx3UJuiA= +github.com/aws/aws-sdk-go-v2/service/keyspaces v1.18.1 h1:0yMkmoDmpFM5dHLg4Ppi+8sfQpBn83Q0tK8y3L8ETL0= +github.com/aws/aws-sdk-go-v2/service/keyspaces v1.18.1/go.mod h1:iZVSQvAViQfIGqwR77Ff7fvsiPns7DekuGVXeyMlcUU= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.35.0 h1:Y8ONhfuFKHfx+gvgKbrsN8lOgNCHcnyHRLldRmhaI/M= +github.com/aws/aws-sdk-go-v2/service/kinesis v1.35.0/go.mod h1:dJngkoVMrq0K7QvRkdRZYM4NUp6cdWa2GBdpm8zoY8U= +github.com/aws/aws-sdk-go-v2/service/kms v1.38.3 h1:RivOtUH3eEu6SWnUMFHKAW4MqDOzWn1vGQ3S38Y5QMg= +github.com/aws/aws-sdk-go-v2/service/kms v1.38.3/go.mod h1:cQn6tAF77Di6m4huxovNM7NVAozWTZLsDRp9t8Z/WYk= +github.com/aws/aws-sdk-go-v2/service/lambda v1.71.2 h1:z926KZ1Ysi8Mbi4biJSAIRFdKemwQpO9M0QUTRLDaXA= +github.com/aws/aws-sdk-go-v2/service/lambda v1.71.2/go.mod h1:c27kk10S36lBYgbG1jR3opn4OAS5Y/4wjJa1GiHK/X4= github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.15 h1:ewSrV6Q4SJrPXU8JAQQVz43SNf09JgE1xGXRy6xstnw= github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.15/go.mod h1:F2NL30K171iDSkUqyDHpfQwlrcoYxhj14F1soPSzeJM= -github.com/aws/aws-sdk-go-v2/service/mq v1.27.16 h1:dMQxubyENPbEwGjUrkYMZZIIP2D7iuy5sJ2dkooleao= -github.com/aws/aws-sdk-go-v2/service/mq v1.27.16/go.mod h1:rmp8WHVfHP+jU9h4R2MP5mcL3R2I4sG1CjYl/sype0g= +github.com/aws/aws-sdk-go-v2/service/mq v1.29.0 h1:HN4rlj8jxdzTyXjGjOZ1UxIjUv0H6shmca/t51Nrfj4= +github.com/aws/aws-sdk-go-v2/service/mq v1.29.0/go.mod h1:0x3GT0RZzP/DvhbV+ujNOGfM1sZD3yOKzrnka9WLtLY= github.com/aws/aws-sdk-go-v2/service/mwaa v1.33.10 h1:Qx3OJ8vCOw0QezAP8vRvESfNMW8/xkGeUhcgdvLJgJc= github.com/aws/aws-sdk-go-v2/service/mwaa v1.33.10/go.mod h1:rALLtQIvUqx7Rwdt/ELVoBK/lvBGefb6dJjwCmV2tE0= github.com/aws/aws-sdk-go-v2/service/neptune v1.35.17 h1:FNOfjMXTUyUOw0x1lFU5/7mwkAWLonwGYPokaS4f534= github.com/aws/aws-sdk-go-v2/service/neptune v1.35.17/go.mod h1:Bgm8nW1Ca9aGQijlNcCdQNOI2Zpg6XJ1ixbSvOcdxiQ= -github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.44.14 h1:y0j0mCPfqyII2KKOhtR5zb3HIs/dhbJDiJ2C+mbsPOo= -github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.44.14/go.mod h1:Ge4hg3Mpyjq1VSjXvBvKY4xtDGfdM387O2bSwMMsU+c= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.45.11 h1:LtsFhIgmWBwPLh5Nrbqd9uE0wYSYDAcGVaUIMZ5eHEU= -github.com/aws/aws-sdk-go-v2/service/opensearch v1.45.11/go.mod h1:/7xP6IgRuDF9VykZfiV9UKnTstxWOVpltAXyEIPfEqc= -github.com/aws/aws-sdk-go-v2/service/organizations v1.37.8 h1:VsGPLkO6PuyRFlNs0XPWt8qM1bItGR45Id+8PhxtohQ= -github.com/aws/aws-sdk-go-v2/service/organizations v1.37.8/go.mod h1:i2X4j27XVv3td7oL251Qs7x6GE4qt/bNrgeD3i/K8Bg= -github.com/aws/aws-sdk-go-v2/service/personalize v1.39.15 h1:iWBLSY+JGiRekA0bV7YdqoHQz7Azhi4wORGQQRz7sRI= -github.com/aws/aws-sdk-go-v2/service/personalize v1.39.15/go.mod h1:ymQEhELpDIXL0d7Le8BHDqu15G4bmMZBVBPB/jb5QqI= -github.com/aws/aws-sdk-go-v2/service/qldb v1.25.15 h1:cl7KnyKa29eHlBGfTV//yr+cXwlCcdWiaMEV48pUrG8= -github.com/aws/aws-sdk-go-v2/service/qldb v1.25.15/go.mod h1:aNj4PW8OKdqV6jgeBgiDIEzstyTJQXm/ysAlj2RBt2A= +github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.47.2 h1:tr0Es7FLfkhowBBqPSmxcdkluG5mkPsvyzhCH9xQBeI= +github.com/aws/aws-sdk-go-v2/service/networkfirewall v1.47.2/go.mod h1:hffD6JfzixDLvqjd04wInnfXHkxquWl3whXOQrL0HVE= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.46.3 h1:vWClqL1dTCuPtWkaGDW7Y6P9ocqHtfFrjlkWYARm1qI= +github.com/aws/aws-sdk-go-v2/service/opensearch v1.46.3/go.mod h1:51rUy2+lDiOQVlekScV044he709HMMhCdUDHqSBojgg= +github.com/aws/aws-sdk-go-v2/service/organizations v1.38.3 h1:rAUHsUFmux71j/4wQ5nUHsXyJxSMRgMlDnmFfahDhSk= +github.com/aws/aws-sdk-go-v2/service/organizations v1.38.3/go.mod h1:iYC/SPpI4WveHr4ZzPFWTmXRODyJub5Aif75W7Ll+yM= +github.com/aws/aws-sdk-go-v2/service/personalize v1.41.0 h1:VdBo8acJ4KK8cGSlVu8Tp22g0Ck99auW9rW5ZvY3WqM= +github.com/aws/aws-sdk-go-v2/service/personalize v1.41.0/go.mod h1:j+/29fvwi8rgRdh546kZnNUNKS9o2yq/25ICLgpYrBc= +github.com/aws/aws-sdk-go-v2/service/qldb v1.26.2 h1:2md04eYXp5hD2n1cvlOLj73eNEkG25rpXZgSYzWyZ1U= +github.com/aws/aws-sdk-go-v2/service/qldb v1.26.2/go.mod h1:KHgfc8tLcKSLPhzem2r90gG61VmC61AsMBvchY9G3fQ= github.com/aws/aws-sdk-go-v2/service/quicksight v1.83.6 h1:rYKFywmknWy4PLFOk2X8Wa818+s9+QZk6L4W/mypfIc= github.com/aws/aws-sdk-go-v2/service/quicksight v1.83.6/go.mod h1:LkgjwpXsumf2z7vd7VBe6/47e/w80gSqOxTt1XDnB8g= github.com/aws/aws-sdk-go-v2/service/ram v1.29.19 h1:IN0zyYG144t9zuC1STbqiZUSRPD9z86E/89KIID5mDU= github.com/aws/aws-sdk-go-v2/service/ram v1.29.19/go.mod h1:YHwLbRciDAQrPVLmrkY48ziBzzceIakT1gDtNn2MqIo= -github.com/aws/aws-sdk-go-v2/service/rds v1.93.12 h1:6vjEcP08FsczK2J55oxnbYC4UZ4UBDCBW+rBFtK0H/c= -github.com/aws/aws-sdk-go-v2/service/rds v1.93.12/go.mod h1:oOqXBxRebL78/MgTi1EoBer+a3Myg0Wr2nO1qG881kM= -github.com/aws/aws-sdk-go-v2/service/redshift v1.53.12 h1:QvivZiQwKzQHF8WlhjE8r+D+Wt8oPRS0ez2+J8Cz/uY= -github.com/aws/aws-sdk-go-v2/service/redshift v1.53.12/go.mod h1:GpXAY5XQ8k+0wZlJyK7Uan7sARUjDZALGW5FVU33r9M= +github.com/aws/aws-sdk-go-v2/service/rds v1.95.0 h1:7KmQEDuz6XWafMaeIahplfGSEakzX4RMSrNHyvhkEq8= +github.com/aws/aws-sdk-go-v2/service/rds v1.95.0/go.mod h1:CXiHj5rVyQ5Q3zNSoYzwaJfWm8IGDweyyCGfO8ei5fQ= +github.com/aws/aws-sdk-go-v2/service/redshift v1.54.3 h1:LNOKEsPjtoBrV2WYUb2zPLOOtD5sKt907LZ/h0cYHSk= +github.com/aws/aws-sdk-go-v2/service/redshift v1.54.3/go.mod h1:TC8pNvjiikrjpX2MEzX/cEJ4/T4XIoSY4BskVvHj8bk= github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.27.18 h1:b2KYj1uWeBWVSnmknOeVBETaeVhbDlmcwqQVVnlo9+A= github.com/aws/aws-sdk-go-v2/service/resourcegroups v1.27.18/go.mod h1:/8OM8ydYDMcuraeE9vuXwCmM13PH2oQ95dO/KHz8C2w= -github.com/aws/aws-sdk-go-v2/service/route53 v1.48.7 h1:oPqYaMfI6XYKXD5jlJ4JHipkKcA2Ska3JLLz11ukf0E= -github.com/aws/aws-sdk-go-v2/service/route53 v1.48.7/go.mod h1:DFFR1FKSHaBJZF2eMW+6PsSg97pldSoHQnRx4tH2Mek= -github.com/aws/aws-sdk-go-v2/service/route53domains v1.28.9 h1:glJ4bj+dLEk3Xs/G9QYR2moZgviIgPviY6KYttO4Pzk= -github.com/aws/aws-sdk-go-v2/service/route53domains v1.28.9/go.mod h1:7j2+GOorkHj5etw/C7BBN35uudoiwlZMOsZ6A5KZaQ4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.76.1 h1:d4ZG8mELlLeUWFBMCqPtRfEP3J6aQgg/KTC9jLSlkMs= -github.com/aws/aws-sdk-go-v2/service/s3 v1.76.1/go.mod h1:uZoEIR6PzGOZEjgAZE4hfYfsqK2zOHhq68JLKEvvXj4= -github.com/aws/aws-sdk-go-v2/service/s3control v1.53.4 h1:c9LZuGaBuYCdsLpddHmWDV1IBSIqfgBgafXlZCcOfTg= -github.com/aws/aws-sdk-go-v2/service/s3control v1.53.4/go.mod h1:m4Sl0b5CcQ+PLzAp+YfUBg261AEABfrDRstdIEW81vI= -github.com/aws/aws-sdk-go-v2/service/sagemaker v1.174.3 h1:E8EowmomKnPF4PcMlu6q3VNg+sxb7hkAWNjTnyic3KY= -github.com/aws/aws-sdk-go-v2/service/sagemaker v1.174.3/go.mod h1:O2We5UIkXH3yEzv3bW1Q5paGsjLRPIE1rHurcoiP1hk= -github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.17 h1:BCuAerVGC9iASLn/NOBPbOEyaOxwq79rwuEy9C+DwAg= -github.com/aws/aws-sdk-go-v2/service/scheduler v1.12.17/go.mod h1:+nJV+aTeG5LOdi5Mhgk8h0LTgTTPI8k35AeD4lnedbc= -github.com/aws/aws-sdk-go-v2/service/schemas v1.28.17 h1:KVy3R5ewpF6uLiiNmes8PzWaF3tnWCWMoP6+HS8L9+I= -github.com/aws/aws-sdk-go-v2/service/schemas v1.28.17/go.mod h1:hHEItaWvJgRTMp+gM1YL6EXBdj3awHdFWkW6oV3VrTs= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 h1:U/gg5eOAPx9vzip9A6cQ2GkIAPBthHMaKDfZ/WWEuj0= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18/go.mod h1:ul2OTb6zT/dpZX/2bxKVwa6eIDBBlPNuau9uZuIoRAI= +github.com/aws/aws-sdk-go-v2/service/route53 v1.51.1 h1:41HrH51fydStW2Tah74zkqZlJfyx4gXeuGOdsIFuckY= +github.com/aws/aws-sdk-go-v2/service/route53 v1.51.1/go.mod h1:kGYOjvTa0Vw0qxrqrOLut1vMnui6qLxqv/SX3vYeM8Y= +github.com/aws/aws-sdk-go-v2/service/route53domains v1.29.2 h1:JyU9np3Or9o3SN3L07AUUxzbS0upGSJbNsv9hfhVjOg= +github.com/aws/aws-sdk-go-v2/service/route53domains v1.29.2/go.mod h1:l41whGvS6dfDuxh6RMNo3+MOvpk7zDx+bOHelpeBbuU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 h1:BRXS0U76Z8wfF+bnkilA2QwpIch6URlm++yPUt9QPmQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3/go.mod h1:bNXKFFyaiVvWuR6O16h/I1724+aXe/tAkA9/QS01t5k= +github.com/aws/aws-sdk-go-v2/service/s3control v1.58.0 h1:wsuflTCwIRWhaweTtYuJ+dt+L0lnSNj7x+c0cfegYjA= +github.com/aws/aws-sdk-go-v2/service/s3control v1.58.0/go.mod h1:hqimoWPQe+lvweuYZ2c1Fn4q3UyAFhbjSoABSl8Y7Pw= +github.com/aws/aws-sdk-go-v2/service/sagemaker v1.192.0 h1:dRv60LT/+DwykSeivSG7FRcFBKxaOaI5Dy9HEgDAJ6k= +github.com/aws/aws-sdk-go-v2/service/sagemaker v1.192.0/go.mod h1:fp2LcfhQkz90js0Bkg5nXdCGCRy4y/FGgc14uvZ97eA= +github.com/aws/aws-sdk-go-v2/service/scheduler v1.13.3 h1:dwlGFf1j4Z9Sz+cX6xjvozzLSM07ZI25BSaWnNNHcFU= +github.com/aws/aws-sdk-go-v2/service/scheduler v1.13.3/go.mod h1:DyWRoXzh5uB79qixa/wH8VBAfH06+sHGBLDR97B7Roo= +github.com/aws/aws-sdk-go-v2/service/schemas v1.29.2 h1:kLswBLkHpvkkHpowIB58/CaqYX0Af0QSCrfOvqcg1yQ= +github.com/aws/aws-sdk-go-v2/service/schemas v1.29.2/go.mod h1:FIxbu6/NMttJ4N1VpJ6GFbPqKbYvrnYuBcBNVn1VGho= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 h1:EKXYJ8kgz4fiqef8xApu7eH0eae2SrVG+oHCLFybMRI= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.32.15 h1:q8QdhnyYVRwZ/jMkw9+1ydxVZqS/ecKuC+vWquwE/2E= github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.32.15/go.mod h1:TtCXeGYXnhV5/2fD+xakezYEsT7u63wA/nVddV5Yc/Y= github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.30.15 h1:CtTWLvbPEWAbyStpPpen7fX/jYJsihwkt/B58YBDZ4Y= github.com/aws/aws-sdk-go-v2/service/servicecatalogappregistry v1.30.15/go.mod h1:DguTH69XMfnETAqTRD1RcdWidosswS+e9IEW7e5VnJw= -github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.34.11 h1:0P8AxY1gL1XAMtbh5oJ4dKa19vH+hWrOunHAKgzoI6k= -github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.34.11/go.mod h1:vqJsXcYIagfc/7a+68TvAM2GogOSY6aK0bbROwq7uoM= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.35.4 h1:zZvziql5vgfDs2hTfF8fRF4pySG7A28/qNJQihJvpwc= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.35.4/go.mod h1:IbC8X3WZvsN+w48OrHBDUKcVnhhzO1YpXkCkFlr0qs8= github.com/aws/aws-sdk-go-v2/service/servicequotas v1.25.18 h1:CG0TMFjcvZBmUlCF/MU6fOUjTCPkzc0b0UzVpbVfn6I= github.com/aws/aws-sdk-go-v2/service/servicequotas v1.25.18/go.mod h1:STMQPHWC5Lwpy89f1GeG9GfVXLOHmDmYsoAtOKbura4= github.com/aws/aws-sdk-go-v2/service/sesv2 v1.41.5 h1:4Axfv4Ytz7gMiAigzbS3NXWcXRFFHBZB8vFcG7oYRsk= @@ -249,38 +253,38 @@ github.com/aws/aws-sdk-go-v2/service/sfn v1.34.12 h1:Z8QNfI+dlO7GQ4QPSgcuERJJgm4 github.com/aws/aws-sdk-go-v2/service/sfn v1.34.12/go.mod h1:DhcsLMpcPAMuYzyY+v6Cc8oN7c6SFOmTp9QnBR6v4Yg= github.com/aws/aws-sdk-go-v2/service/shield v1.29.15 h1:JXwiwRjiU56efLvid+v8mA0IGwY5Jz60OGaN4yFwYKg= github.com/aws/aws-sdk-go-v2/service/shield v1.29.15/go.mod h1:WaswlUUG89Wmppp/fPJoBVQeEiMnVvLH1ZRXuyTWY5M= -github.com/aws/aws-sdk-go-v2/service/sns v1.33.19 h1:ghgWtf6FnkD6YqDUq65Zg5lzQ92xADHBoJdWUyChiFw= -github.com/aws/aws-sdk-go-v2/service/sns v1.33.19/go.mod h1:/TQAkYgLlLoH1/2Y9qgaE460iPWhdq67emlW/ue42U8= -github.com/aws/aws-sdk-go-v2/service/sqs v1.37.14 h1:KSVbQW2umLp7i4Lo6mvBUz5PqV+Ze/IL6LCTasxQWEk= -github.com/aws/aws-sdk-go-v2/service/sqs v1.37.14/go.mod h1:jiaEkIw2Bb6IsoY9PDAZqVXJjNaKSxQGGj10CiloDWU= -github.com/aws/aws-sdk-go-v2/service/ssm v1.56.12 h1:EKEY56SQTqEsOuh68B8YVqmsLJ1nuwUGYyKImyo+0ug= -github.com/aws/aws-sdk-go-v2/service/ssm v1.56.12/go.mod h1:I/j1db6MPxBp7vcVrRAh+u+vERu79MWoyhoSjRaDl9E= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 h1:/eE3DogBjYlvlbhd2ssWyeuovWunHLxfgw3s/OJa4GQ= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.15/go.mod h1:2PCJYpi7EKeA5SkStAmZlF6fi0uUABuhtF8ILHjGc3Y= -github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.29.15 h1:2QWnEehDMz2+11QOg2wQJQHUOFkW5eqTExVEPm52nzs= -github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.29.15/go.mod h1:fHC61z8I2NMx8Dn2Y0rSua7JOsBb5j0b2smo0Do/BF8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 h1:M/zwXiL2iXUrHputuXgmO94TVNmcenPHxgLXLutodKE= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14/go.mod h1:RVwIw3y/IqxC2YEXSIkAzRDdEU1iRabDPaYjpGCbCGQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 h1:TzeR06UCMUq+KA3bDkujxK1GVGy+G8qQN/QVYzGLkQE= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.14/go.mod h1:dspXf/oYWGWo6DEvj98wpaTeqt5+DMidZD0A9BYTizc= +github.com/aws/aws-sdk-go-v2/service/sns v1.34.4 h1:ihddI5wufQQCJiujUgAvWRqZcfDmSKIfXlAuX7T95cg= +github.com/aws/aws-sdk-go-v2/service/sns v1.34.4/go.mod h1:PJtxxMdj747j8DeZENRTTYAz/lx/pADn/U0k7YNNiUY= +github.com/aws/aws-sdk-go-v2/service/sqs v1.38.5 h1:KNgVWw8qbPzjYnIF1gL0EAszy6VKGnmUK6VSm1huYY8= +github.com/aws/aws-sdk-go-v2/service/sqs v1.38.5/go.mod h1:Bar4MrRxeqdn6XIh8JGfiXuFRmyrrsZNTJotxEJmWW0= +github.com/aws/aws-sdk-go-v2/service/ssm v1.59.0 h1:KWArCwA/WkuHWKfygkNz0B6YS6OvdgoJUaJHX0Qby1s= +github.com/aws/aws-sdk-go-v2/service/ssm v1.59.0/go.mod h1:PUWUl5MDiYNQkUHN9Pyd9kgtA/YhbxnSnHP+yQqzrM8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.31.0 h1:mBlGhCX5dS6Z1qUiVMrUFaAZiZZ5ARYTrKLOBGfq0EU= +github.com/aws/aws-sdk-go-v2/service/ssoadmin v1.31.0/go.mod h1:znVkl7Y14sZKEL/sbRQ6qgD8wj8VdTcVVQp5iRaKXcc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/XvaX32evhproijJEZY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.29.16 h1:A6oLifvrpiy020lUUV38xEbAquPHgqRfrtlqleWKYlo= github.com/aws/aws-sdk-go-v2/service/timestreamwrite v1.29.16/go.mod h1:pFiao5K15XNf+tdIBEC7UBv/+mX0AJRJbjXyp16zckA= github.com/aws/aws-sdk-go-v2/service/transfer v1.56.3 h1:CncxingiUxLlvt+Qv2M++0X9EjbLZh4qPdkLuznwrB8= github.com/aws/aws-sdk-go-v2/service/transfer v1.56.3/go.mod h1:mXIyuGxYttWAfx7AWEy0bm3kaI6JeR+4OoNeOUAokQM= -github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.21.2 h1:yTUOaP89/Nbs/bwiSj12HXQcUMtmQtaHCeNKOt69IwU= -github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.21.2/go.mod h1:zMBFRdfEYqrmRKoRrr6zw5fZKyYCqp/PPnAwFFAXgZg= +github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.24.0 h1:irXtmHVnlCqfSLv+i0/NeoSXPfK+8tg+twAAKGkIzYY= +github.com/aws/aws-sdk-go-v2/service/verifiedpermissions v1.24.0/go.mod h1:hpdAJSO4wx0ba8515Ay3BFGYn3kEKDxqFrc1dm/92c0= github.com/aws/aws-sdk-go-v2/service/waf v1.25.15 h1:+U69MzlvfUpGDSmtVo+rNOgMzuW2NJHnw+39vpE7Nak= github.com/aws/aws-sdk-go-v2/service/waf v1.25.15/go.mod h1:40coE3l6WyJ23gzAMlpCtOe7bQj/Ngl8sBj2HXkZIAE= github.com/aws/aws-sdk-go-v2/service/wafregional v1.25.15 h1:go4iFjI2znuFRzv88NCsEBpaZZrYhJo5bbujxZ92c6I= github.com/aws/aws-sdk-go-v2/service/wafregional v1.25.15/go.mod h1:fUMTJKyA4OzO0ZaczisluPLNPGViwV9mfEjZN7uIdz0= -github.com/aws/aws-sdk-go-v2/service/wafv2 v1.55.14 h1:jAg6PkV5jWEos/AgISHejICAv/dxJ3mVmHJ/YACRujs= -github.com/aws/aws-sdk-go-v2/service/wafv2 v1.55.14/go.mod h1:pdG5oSr//VTUwSXD9QQ1BIVMR67jSXMnaibfM04+mq8= +github.com/aws/aws-sdk-go-v2/service/wafv2 v1.60.1 h1:LMNN0VN6bw+SLySSa8ICYpZ+/aFZGf/lmq2hNVUYdqo= +github.com/aws/aws-sdk-go-v2/service/wafv2 v1.60.1/go.mod h1:Zai6/lANvFn0uX9OKqPGy4C9a7TIcbnlzzM1EHTd3kE= github.com/aws/aws-sdk-go-v2/service/workspaces v1.52.5 h1:Gf0oxO8TqXd2rG7zBl28UR5YIHWmZNrzjzXUq2BimCA= github.com/aws/aws-sdk-go-v2/service/workspaces v1.52.5/go.mod h1:D/kzuJvmwTak9Sj3Tw+dSbGplmRqcb6kH4lTQGxvm40= github.com/aws/aws-sdk-go-v2/service/xray v1.30.12 h1:3Np9HkqLvQWZ2sPWJl1JOc+KqZPDE3++EUCeaGQX0R0= github.com/aws/aws-sdk-go-v2/service/xray v1.30.12/go.mod h1:rGNePC4sX1plcHPK25qN/866tnHrxgTZKe9TS7UzKs8= -github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= -github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= +github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= github.com/basgys/goxml2json v1.1.0 h1:4ln5i4rseYfXNd86lGEB+Vi652IsIXIvggKM/BhUKVw= github.com/basgys/goxml2json v1.1.0/go.mod h1:wH7a5Np/Q4QoECFIU8zTQlZwZkrilY0itPfecMw41Dw= github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= @@ -320,6 +324,10 @@ github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3Bop github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 h1:FWNFq4fM1wPfcK40yHE5UO3RUdSNPaBC+j3PokzA6OQ= github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1/go.mod h1:5YoVOkjYAQumqlV356Hj3xeYh4BdZuLE0/nRkf2NKkI= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -352,8 +360,8 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -364,8 +372,8 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -377,8 +385,8 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/grpc-ecosystem/go-grpc-middleware/providers/zerolog/v2 v2.0.0-rc.3 h1:hRcWZ7716+E1tkMSZJ/QeeC2dPGGB1R/4z4m9RsL8Qg= @@ -404,8 +412,9 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -431,10 +440,10 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= -github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= -github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/schollz/progressbar/v3 v3.12.1 h1:JAhtIrLWAn6/p7i82SrpSG3fgAwlAxi+Sy12r4AzBvQ= github.com/schollz/progressbar/v3 v3.12.1/go.mod h1:g7QSuwyGpqCjVQPFZXA31MSxtrhka9Y9LMdF+XT77/Y= @@ -471,6 +480,18 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -486,8 +507,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20231127185646-65229373498e h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No= -golang.org/x/exp v0.0.0-20231127185646-65229373498e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -509,8 +530,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -539,8 +560,8 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -556,8 +577,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -590,19 +611,19 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -649,8 +670,8 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -707,8 +728,8 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -722,8 +743,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= +google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/grpc/examples v0.0.0-20210424002626-9572fd6faeae/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -737,8 +758,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/resources/forks/apigatewayv2/deserializers.go b/resources/forks/apigatewayv2/deserializers.go index 2e625c7d..5edca303 100644 --- a/resources/forks/apigatewayv2/deserializers.go +++ b/resources/forks/apigatewayv2/deserializers.go @@ -61,7 +61,7 @@ func (m *awsRestjson1_deserializeOpGetDomainNames) HandleDeserialize(ctx context decoder := json.NewDecoder(body) decoder.UseNumber() - var shape interface{} + var shape any if err := decoder.Decode(&shape); err != nil && err != io.EOF { var snapshot bytes.Buffer io.Copy(&snapshot, ringBuffer) @@ -145,7 +145,7 @@ func awsRestjson1_deserializeOpErrorGetDomainNames(response *smithyhttp.Response } } -func awsRestjson1_deserializeOpDocumentGetDomainNamesOutput(v **apigatewayv2.GetDomainNamesOutput, value interface{}) error { +func awsRestjson1_deserializeOpDocumentGetDomainNamesOutput(v **apigatewayv2.GetDomainNamesOutput, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -153,7 +153,7 @@ func awsRestjson1_deserializeOpDocumentGetDomainNamesOutput(v **apigatewayv2.Get return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -198,7 +198,7 @@ func awsRestjson1_deserializeErrorBadRequestException(response *smithyhttp.Respo body := io.TeeReader(errorBody, ringBuffer) decoder := json.NewDecoder(body) decoder.UseNumber() - var shape interface{} + var shape any if err := decoder.Decode(&shape); err != nil && err != io.EOF { var snapshot bytes.Buffer io.Copy(&snapshot, ringBuffer) @@ -234,7 +234,7 @@ func awsRestjson1_deserializeErrorNotFoundException(response *smithyhttp.Respons body := io.TeeReader(errorBody, ringBuffer) decoder := json.NewDecoder(body) decoder.UseNumber() - var shape interface{} + var shape any if err := decoder.Decode(&shape); err != nil && err != io.EOF { var snapshot bytes.Buffer io.Copy(&snapshot, ringBuffer) @@ -270,7 +270,7 @@ func awsRestjson1_deserializeErrorTooManyRequestsException(response *smithyhttp. body := io.TeeReader(errorBody, ringBuffer) decoder := json.NewDecoder(body) decoder.UseNumber() - var shape interface{} + var shape any if err := decoder.Decode(&shape); err != nil && err != io.EOF { var snapshot bytes.Buffer io.Copy(&snapshot, ringBuffer) @@ -298,7 +298,7 @@ func awsRestjson1_deserializeErrorTooManyRequestsException(response *smithyhttp. return output } -func awsRestjson1_deserializeDocument__listOfDomainName(v *[]types.DomainName, value interface{}) error { +func awsRestjson1_deserializeDocument__listOfDomainName(v *[]types.DomainName, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -306,7 +306,7 @@ func awsRestjson1_deserializeDocument__listOfDomainName(v *[]types.DomainName, v return nil } - shape, ok := value.([]interface{}) + shape, ok := value.([]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -332,7 +332,7 @@ func awsRestjson1_deserializeDocument__listOfDomainName(v *[]types.DomainName, v return nil } -func awsRestjson1_deserializeDocumentBadRequestException(v **types.BadRequestException, value interface{}) error { +func awsRestjson1_deserializeDocumentBadRequestException(v **types.BadRequestException, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -340,7 +340,7 @@ func awsRestjson1_deserializeDocumentBadRequestException(v **types.BadRequestExc return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -372,7 +372,7 @@ func awsRestjson1_deserializeDocumentBadRequestException(v **types.BadRequestExc return nil } -func awsRestjson1_deserializeDocumentTooManyRequestsException(v **types.TooManyRequestsException, value interface{}) error { +func awsRestjson1_deserializeDocumentTooManyRequestsException(v **types.TooManyRequestsException, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -380,7 +380,7 @@ func awsRestjson1_deserializeDocumentTooManyRequestsException(v **types.TooManyR return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -421,7 +421,7 @@ func awsRestjson1_deserializeDocumentTooManyRequestsException(v **types.TooManyR return nil } -func awsRestjson1_deserializeDocumentDomainName(v **types.DomainName, value interface{}) error { +func awsRestjson1_deserializeDocumentDomainName(v **types.DomainName, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -429,7 +429,7 @@ func awsRestjson1_deserializeDocumentDomainName(v **types.DomainName, value inte return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -485,7 +485,7 @@ func awsRestjson1_deserializeDocumentDomainName(v **types.DomainName, value inte return nil } -func awsRestjson1_deserializeDocumentDomainNameConfigurations(v *[]types.DomainNameConfiguration, value interface{}) error { +func awsRestjson1_deserializeDocumentDomainNameConfigurations(v *[]types.DomainNameConfiguration, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -493,7 +493,7 @@ func awsRestjson1_deserializeDocumentDomainNameConfigurations(v *[]types.DomainN return nil } - shape, ok := value.([]interface{}) + shape, ok := value.([]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -519,7 +519,7 @@ func awsRestjson1_deserializeDocumentDomainNameConfigurations(v *[]types.DomainN return nil } -func awsRestjson1_deserializeDocumentMutualTlsAuthentication(v **types.MutualTlsAuthentication, value interface{}) error { +func awsRestjson1_deserializeDocumentMutualTlsAuthentication(v **types.MutualTlsAuthentication, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -527,7 +527,7 @@ func awsRestjson1_deserializeDocumentMutualTlsAuthentication(v **types.MutualTls return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -573,7 +573,7 @@ func awsRestjson1_deserializeDocumentMutualTlsAuthentication(v **types.MutualTls return nil } -func awsRestjson1_deserializeDocumentTags(v *map[string]string, value interface{}) error { +func awsRestjson1_deserializeDocumentTags(v *map[string]string, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -581,7 +581,7 @@ func awsRestjson1_deserializeDocumentTags(v *map[string]string, value interface{ return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -609,7 +609,7 @@ func awsRestjson1_deserializeDocumentTags(v *map[string]string, value interface{ return nil } -func awsRestjson1_deserializeDocumentNotFoundException(v **types.NotFoundException, value interface{}) error { +func awsRestjson1_deserializeDocumentNotFoundException(v **types.NotFoundException, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -617,7 +617,7 @@ func awsRestjson1_deserializeDocumentNotFoundException(v **types.NotFoundExcepti return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -658,7 +658,7 @@ func awsRestjson1_deserializeDocumentNotFoundException(v **types.NotFoundExcepti return nil } -func awsRestjson1_deserializeDocumentDomainNameConfiguration(v **types.DomainNameConfiguration, value interface{}) error { +func awsRestjson1_deserializeDocumentDomainNameConfiguration(v **types.DomainNameConfiguration, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -666,7 +666,7 @@ func awsRestjson1_deserializeDocumentDomainNameConfiguration(v **types.DomainNam return nil } - shape, ok := value.(map[string]interface{}) + shape, ok := value.(map[string]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } @@ -776,7 +776,7 @@ func awsRestjson1_deserializeDocumentDomainNameConfiguration(v **types.DomainNam return nil } -func awsRestjson1_deserializeDocument__listOf__string(v *[]string, value interface{}) error { +func awsRestjson1_deserializeDocument__listOf__string(v *[]string, value any) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) } @@ -784,7 +784,7 @@ func awsRestjson1_deserializeDocument__listOf__string(v *[]string, value interfa return nil } - shape, ok := value.([]interface{}) + shape, ok := value.([]any) if !ok { return fmt.Errorf("unexpected JSON type %v", value) } diff --git a/resources/services/acm/certificates.go b/resources/services/acm/certificates.go index cbb0c807..5181fb58 100644 --- a/resources/services/acm/certificates.go +++ b/resources/services/acm/certificates.go @@ -34,134 +34,14 @@ func Certificates() *schema.Table { }, }, { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveCertificateTags, - }, - { - Name: "certificate_authority_arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("CertificateAuthorityArn"), - }, - { - Name: "created_at", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreatedAt"), - }, - { - Name: "domain_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("DomainName"), - }, - { - Name: "domain_validation_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("DomainValidationOptions"), - }, - { - Name: "extended_key_usages", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("ExtendedKeyUsages"), - }, - { - Name: "failure_reason", - Type: schema.TypeString, - Resolver: schema.PathResolver("FailureReason"), - }, - { - Name: "imported_at", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("ImportedAt"), - }, - { - Name: "in_use_by", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("InUseBy"), - }, - { - Name: "issued_at", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("IssuedAt"), - }, - { - Name: "issuer", - Type: schema.TypeString, - Resolver: schema.PathResolver("Issuer"), - }, - { - Name: "key_algorithm", - Type: schema.TypeString, - Resolver: schema.PathResolver("KeyAlgorithm"), - }, - { - Name: "key_usages", + Name: "certificate_detail", Type: schema.TypeJSON, - Resolver: schema.PathResolver("KeyUsages"), + Resolver: schema.PathResolver("CertificateDetail"), }, { - Name: "not_after", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("NotAfter"), - }, - { - Name: "not_before", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("NotBefore"), - }, - { - Name: "options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("Options"), - }, - { - Name: "renewal_eligibility", - Type: schema.TypeString, - Resolver: schema.PathResolver("RenewalEligibility"), - }, - { - Name: "renewal_summary", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("RenewalSummary"), - }, - { - Name: "revocation_reason", - Type: schema.TypeString, - Resolver: schema.PathResolver("RevocationReason"), - }, - { - Name: "revoked_at", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("RevokedAt"), - }, - { - Name: "serial", - Type: schema.TypeString, - Resolver: schema.PathResolver("Serial"), - }, - { - Name: "signature_algorithm", - Type: schema.TypeString, - Resolver: schema.PathResolver("SignatureAlgorithm"), - }, - { - Name: "status", - Type: schema.TypeString, - Resolver: schema.PathResolver("Status"), - }, - { - Name: "subject", - Type: schema.TypeString, - Resolver: schema.PathResolver("Subject"), - }, - { - Name: "subject_alternative_names", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("SubjectAlternativeNames"), - }, - { - Name: "type", - Type: schema.TypeString, - Resolver: schema.PathResolver("Type"), + Resolver: client.ResolveTags, }, }, } diff --git a/resources/services/acm/certificates_fetch.go b/resources/services/acm/certificates_fetch.go index 61f79f45..97eac38a 100644 --- a/resources/services/acm/certificates_fetch.go +++ b/resources/services/acm/certificates_fetch.go @@ -3,10 +3,13 @@ package acm import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/service/acm" "github.com/aws/aws-sdk-go-v2/service/acm/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchAcmCertificates(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -32,17 +35,26 @@ func getCertificate(ctx context.Context, meta schema.ClientMeta, resource *schem if err != nil { return err } - resource.Item = output.Certificate + + cert := ohaws.ACMCertificate{ + CertificateDetail: *output.Certificate, + } + + tags, err := getCertificateTags(ctx, svc, *cert.CertificateArn) + if err != nil { + return err + } + cert.Tags = tags + + resource.Item = &cert return nil } -func resolveCertificateTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cert := resource.Item.(*types.CertificateDetail) - cl := meta.(*client.Client) - svc := cl.Services().Acm - out, err := svc.ListTagsForCertificate(ctx, &acm.ListTagsForCertificateInput{CertificateArn: cert.CertificateArn}) +func getCertificateTags(ctx context.Context, svc services.AcmClient, certificateArn string) ([]types.Tag, error) { + out, err := svc.ListTagsForCertificate(ctx, &acm.ListTagsForCertificateInput{CertificateArn: &certificateArn}) if err != nil { - return err + return nil, err } - return resource.Set(c.Name, client.TagsToMap(out.Tags)) + + return out.Tags, nil } diff --git a/resources/services/apigatewayv2/apis.go b/resources/services/apigatewayv2/apis.go index 290a509b..11c41a4e 100644 --- a/resources/services/apigatewayv2/apis.go +++ b/resources/services/apigatewayv2/apis.go @@ -94,6 +94,11 @@ func Apis() *schema.Table { Type: schema.TypeStringArray, Resolver: schema.PathResolver("ImportInfo"), }, + { + Name: "ip_address_type", + Type: schema.TypeString, + Resolver: schema.PathResolver("IpAddressType"), + }, { Name: "tags", Type: schema.TypeJSON, diff --git a/resources/services/athena/data_catalogs.go b/resources/services/athena/data_catalogs.go index 602db281..9837e576 100644 --- a/resources/services/athena/data_catalogs.go +++ b/resources/services/athena/data_catalogs.go @@ -34,44 +34,14 @@ func DataCatalogs() *schema.Table { }, }, { - Name: "tags", + Name: "data_catalog", Type: schema.TypeJSON, - Resolver: resolveAthenaDataCatalogTags, - }, - { - Name: "name", - Type: schema.TypeString, - Resolver: schema.PathResolver("Name"), - }, - { - Name: "type", - Type: schema.TypeString, - Resolver: schema.PathResolver("Type"), - }, - { - Name: "connection_type", - Type: schema.TypeString, - Resolver: schema.PathResolver("ConnectionType"), + Resolver: schema.PathResolver("DataCatalog"), }, { - Name: "description", - Type: schema.TypeString, - Resolver: schema.PathResolver("Description"), - }, - { - Name: "error", - Type: schema.TypeString, - Resolver: schema.PathResolver("Error"), - }, - { - Name: "parameters", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Parameters"), - }, - { - Name: "status", - Type: schema.TypeString, - Resolver: schema.PathResolver("Status"), + Resolver: client.ResolveTags, }, }, diff --git a/resources/services/athena/data_catalogs_fetch.go b/resources/services/athena/data_catalogs_fetch.go index ed7404c0..7288d964 100644 --- a/resources/services/athena/data_catalogs_fetch.go +++ b/resources/services/athena/data_catalogs_fetch.go @@ -4,12 +4,15 @@ import ( "context" "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/athena" "github.com/aws/aws-sdk-go-v2/service/athena/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchAthenaDataCatalogs(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -41,48 +44,57 @@ func getDataCatalog(ctx context.Context, meta schema.ClientMeta, resource *schem // retrieving of default data catalog (AwsDataCatalog) returns "not found error" (with statuscode 400: InvalidRequestException:...) but it exists and its // relations can be fetched by its name if client.IsAWSError(err, "InvalidRequestException") && *catalogSummary.CatalogName == "AwsDataCatalog" { - resource.Item = types.DataCatalog{Name: catalogSummary.CatalogName, Type: catalogSummary.Type} + resource.Item = &ohaws.AthenaDataCatalog{DataCatalog: types.DataCatalog{Name: catalogSummary.CatalogName, Type: catalogSummary.Type}} return nil } return err } - resource.Item = *dc.DataCatalog + + catalog := ohaws.AthenaDataCatalog{ + DataCatalog: *dc.DataCatalog, + } + + tags, err := getDataCatalogTags(ctx, c, svc, createDataCatalogArn(c, *catalog.Name)) + if err != nil { + return err + } + catalog.Tags = tags + + resource.Item = &catalog + return nil } func resolveAthenaDataCatalogArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) - dc := resource.Item.(types.DataCatalog) + dc := resource.Item.(*ohaws.AthenaDataCatalog) return resource.Set(c.Name, createDataCatalogArn(cl, *dc.Name)) } -func resolveAthenaDataCatalogTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - svc := cl.Services().Athena - dc := resource.Item.(types.DataCatalog) - arnStr := createDataCatalogArn(cl, *dc.Name) - params := athena.ListTagsForResourceInput{ResourceARN: &arnStr} - tags := make(map[string]string) - for { - result, err := svc.ListTagsForResource(ctx, ¶ms) + +func getDataCatalogTags(ctx context.Context, c *client.Client, svc services.AthenaClient, catalogArn string) ([]types.Tag, error) { + params := athena.ListTagsForResourceInput{ResourceARN: &catalogArn} + + var tags []types.Tag + tagsPaginator := athena.NewListTagsForResourcePaginator(svc, ¶ms) + for tagsPaginator.HasMorePages() { + result, err := tagsPaginator.NextPage(ctx) if err != nil { - if cl.IsNotFoundError(err) { - return nil + if c.IsNotFoundError(err) { + return nil, nil } - return err + return nil, err } - client.TagsIntoMap(result.Tags, tags) - if aws.ToString(result.NextToken) == "" { - break - } - params.NextToken = result.NextToken + + tags = append(tags, result.Tags...) } - return resource.Set(c.Name, tags) + return tags, nil } + func fetchAthenaDataCatalogDatabases(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { c := meta.(*client.Client) svc := c.Services().Athena input := athena.ListDatabasesInput{ - CatalogName: parent.Item.(types.DataCatalog).Name, + CatalogName: parent.Item.(*ohaws.AthenaDataCatalog).Name, } for { response, err := svc.ListDatabases(ctx, &input) @@ -98,11 +110,12 @@ func fetchAthenaDataCatalogDatabases(ctx context.Context, meta schema.ClientMeta } return nil } + func fetchAthenaDataCatalogDatabaseTables(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { cl := meta.(*client.Client) svc := cl.Services().Athena input := athena.ListTableMetadataInput{ - CatalogName: parent.Parent.Item.(types.DataCatalog).Name, + CatalogName: parent.Parent.Item.(*ohaws.AthenaDataCatalog).Name, DatabaseName: parent.Item.(types.Database).Name, } for { diff --git a/resources/services/athena/work_groups.go b/resources/services/athena/work_groups.go index 7b011a98..e9e7599f 100644 --- a/resources/services/athena/work_groups.go +++ b/resources/services/athena/work_groups.go @@ -34,39 +34,14 @@ func WorkGroups() *schema.Table { }, }, { - Name: "tags", + Name: "work_group", Type: schema.TypeJSON, - Resolver: resolveAthenaWorkGroupTags, - }, - { - Name: "name", - Type: schema.TypeString, - Resolver: schema.PathResolver("Name"), + Resolver: schema.PathResolver("WorkGroup"), }, { - Name: "configuration", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Configuration"), - }, - { - Name: "creation_time", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreationTime"), - }, - { - Name: "description", - Type: schema.TypeString, - Resolver: schema.PathResolver("Description"), - }, - { - Name: "identity_center_application_arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("IdentityCenterApplicationArn"), - }, - { - Name: "state", - Type: schema.TypeString, - Resolver: schema.PathResolver("State"), + Resolver: client.ResolveTags, }, }, diff --git a/resources/services/athena/work_groups_fetch.go b/resources/services/athena/work_groups_fetch.go index 2299c093..549336d7 100644 --- a/resources/services/athena/work_groups_fetch.go +++ b/resources/services/athena/work_groups_fetch.go @@ -4,12 +4,15 @@ import ( "context" "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/athena" "github.com/aws/aws-sdk-go-v2/service/athena/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchAthenaWorkGroups(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -35,51 +38,56 @@ func getWorkGroup(ctx context.Context, meta schema.ClientMeta, resource *schema. c := meta.(*client.Client) svc := c.Services().Athena - wg := resource.Item.(types.WorkGroupSummary) - dc, err := svc.GetWorkGroup(ctx, &athena.GetWorkGroupInput{ - WorkGroup: wg.Name, + wgs := resource.Item.(types.WorkGroupSummary) + r, err := svc.GetWorkGroup(ctx, &athena.GetWorkGroupInput{ + WorkGroup: wgs.Name, }) if err != nil { return err } - resource.Item = *dc.WorkGroup + + wg := ohaws.AthenaWorkGroup{ + WorkGroup: *r.WorkGroup, + } + + tags, err := getAthenaWorkGroupTags(ctx, c, svc, createWorkGroupArn(c, *wg.Name)) + if err != nil { + return err + } + wg.Tags = tags + + resource.Item = &wg return nil } func resolveAthenaWorkGroupArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) - dc := resource.Item.(types.WorkGroup) + dc := resource.Item.(*ohaws.AthenaWorkGroup) return resource.Set(c.Name, createWorkGroupArn(cl, *dc.Name)) } -func resolveAthenaWorkGroupTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - svc := cl.Services().Athena - wg := resource.Item.(types.WorkGroup) - arnStr := createWorkGroupArn(cl, *wg.Name) - params := athena.ListTagsForResourceInput{ResourceARN: &arnStr} - tags := make(map[string]string) - for { - result, err := svc.ListTagsForResource(ctx, ¶ms) +func getAthenaWorkGroupTags(ctx context.Context, c *client.Client, svc services.AthenaClient, workgroupArn string) ([]types.Tag, error) { + params := athena.ListTagsForResourceInput{ResourceARN: &workgroupArn} + + var tags []types.Tag + tagsPaginator := athena.NewListTagsForResourcePaginator(svc, ¶ms) + for tagsPaginator.HasMorePages() { + result, err := tagsPaginator.NextPage(ctx) if err != nil { - if cl.IsNotFoundError(err) { - return nil + if c.IsNotFoundError(err) { + return nil, nil } - return err - } - client.TagsIntoMap(result.Tags, tags) - if aws.ToString(result.NextToken) == "" { - break + return nil, err } - params.NextToken = result.NextToken + tags = append(tags, result.Tags...) } - return resource.Set(c.Name, tags) + return tags, nil } func fetchAthenaWorkGroupPreparedStatements(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { c := meta.(*client.Client) svc := c.Services().Athena - wg := parent.Item.(types.WorkGroup) + wg := parent.Item.(*ohaws.AthenaWorkGroup) input := athena.ListPreparedStatementsInput{WorkGroup: wg.Name} for { response, err := svc.ListPreparedStatements(ctx, &input) @@ -98,7 +106,7 @@ func fetchAthenaWorkGroupPreparedStatements(ctx context.Context, meta schema.Cli func getWorkGroupPreparedStatement(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { c := meta.(*client.Client) svc := c.Services().Athena - wg := resource.Parent.Item.(types.WorkGroup) + wg := resource.Parent.Item.(*ohaws.AthenaWorkGroup) d := resource.Item.(types.PreparedStatementSummary) dc, err := svc.GetPreparedStatement(ctx, &athena.GetPreparedStatementInput{ @@ -115,7 +123,7 @@ func getWorkGroupPreparedStatement(ctx context.Context, meta schema.ClientMeta, func fetchAthenaWorkGroupQueryExecutions(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { c := meta.(*client.Client) svc := c.Services().Athena - wg := parent.Item.(types.WorkGroup) + wg := parent.Item.(*ohaws.AthenaWorkGroup) input := athena.ListQueryExecutionsInput{WorkGroup: wg.Name} for { response, err := svc.ListQueryExecutions(ctx, &input) @@ -149,7 +157,7 @@ func getWorkGroupQueryExecution(ctx context.Context, meta schema.ClientMeta, res func fetchAthenaWorkGroupNamedQueries(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { c := meta.(*client.Client) svc := c.Services().Athena - wg := parent.Item.(types.WorkGroup) + wg := parent.Item.(*ohaws.AthenaWorkGroup) input := athena.ListNamedQueriesInput{WorkGroup: wg.Name} for { response, err := svc.ListNamedQueries(ctx, &input) diff --git a/resources/services/backup/plans.go b/resources/services/backup/plans.go index 1ae95403..61df5bd1 100644 --- a/resources/services/backup/plans.go +++ b/resources/services/backup/plans.go @@ -34,54 +34,14 @@ func Plans() *schema.Table { }, }, { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolvePlanTags, - }, - { - Name: "advanced_backup_settings", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("AdvancedBackupSettings"), - }, - { - Name: "backup_plan", + Name: "get_backup_plan_output", Type: schema.TypeJSON, - Resolver: schema.PathResolver("BackupPlan"), - }, - { - Name: "backup_plan_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("BackupPlanId"), - }, - { - Name: "creation_date", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreationDate"), + Resolver: schema.PathResolver("GetBackupPlanOutput"), }, { - Name: "creator_request_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("CreatorRequestId"), - }, - { - Name: "deletion_date", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("DeletionDate"), - }, - { - Name: "last_execution_date", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("LastExecutionDate"), - }, - { - Name: "version_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("VersionId"), - }, - { - Name: "result_metadata", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("ResultMetadata"), + Resolver: schema.PathResolver("Tags"), }, }, diff --git a/resources/services/backup/plans_fetch.go b/resources/services/backup/plans_fetch.go index 2188e508..0122ed7f 100644 --- a/resources/services/backup/plans_fetch.go +++ b/resources/services/backup/plans_fetch.go @@ -3,11 +3,15 @@ package backup import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/backup" "github.com/aws/aws-sdk-go-v2/service/backup/types" "github.com/cloudquery/plugin-sdk/schema" + "github.com/mitchellh/mapstructure" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchBackupPlans(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -41,37 +45,41 @@ func getPlan(ctx context.Context, meta schema.ClientMeta, resource *schema.Resou if err != nil { return err } - resource.Item = plan + + var b ohaws.BackupPlan + // convert response struct to BackupVaultListMember struct + if err := mapstructure.Decode(plan, &b.GetBackupPlanOutput); err != nil { + return err + } + + tags, err := getPlanTags(ctx, svc, *b.BackupPlanArn) + if err != nil { + return err + } + b.Tags = tags + + resource.Item = &b return nil } -func resolvePlanTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - plan := resource.Item.(*backup.GetBackupPlanOutput) - cl := meta.(*client.Client) - svc := cl.Services().Backup - params := backup.ListTagsInput{ResourceArn: plan.BackupPlanArn} - tags := make(map[string]string) - for { - result, err := svc.ListTags(ctx, ¶ms) - if result == nil { - break - } +func getPlanTags(ctx context.Context, svc services.BackupClient, planArn string) (map[string]string, error) { + params := backup.ListTagsInput{ResourceArn: &planArn} + paginator := backup.NewListTagsPaginator(svc, ¶ms) + tags := map[string]string{} + for paginator.HasMorePages() { + result, err := paginator.NextPage(ctx) if err != nil { - return err + return nil, err } for k, v := range result.Tags { tags[k] = v } - if aws.ToString(result.NextToken) == "" { - break - } - params.NextToken = result.NextToken } - return resource.Set(c.Name, tags) + return tags, nil } func fetchBackupPlanSelections(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - plan := parent.Item.(*backup.GetBackupPlanOutput) + plan := parent.Item.(*ohaws.BackupPlan) cl := meta.(*client.Client) svc := cl.Services().Backup params := backup.ListBackupSelectionsInput{ diff --git a/resources/services/backup/vaults.go b/resources/services/backup/vaults.go index 40813728..31dc5c58 100644 --- a/resources/services/backup/vaults.go +++ b/resources/services/backup/vaults.go @@ -9,10 +9,11 @@ import ( func Vaults() *schema.Table { return &schema.Table{ - Name: "aws_backup_vaults", - Description: `https://docs.aws.amazon.com/aws-backup/latest/devguide/API_BackupVaultListMember.html`, - Resolver: fetchBackupVaults, - Multiplex: client.ServiceAccountRegionMultiplexer("backup"), + Name: "aws_backup_vaults", + Description: `https://docs.aws.amazon.com/aws-backup/latest/devguide/API_BackupVaultListMember.html`, + Resolver: fetchBackupVaults, + PreResourceResolver: getBackupVault, + Multiplex: client.ServiceAccountRegionMultiplexer("backup"), Columns: []schema.Column{ { Name: "account_id", @@ -45,64 +46,14 @@ func Vaults() *schema.Table { IgnoreInTests: true, }, { - Name: "tags", + Name: "backup_vault_list_member", Type: schema.TypeJSON, - Resolver: resolveVaultTags, - }, - { - Name: "backup_vault_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("BackupVaultName"), - }, - { - Name: "creation_date", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreationDate"), - }, - { - Name: "creator_request_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("CreatorRequestId"), - }, - { - Name: "encryption_key_arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("EncryptionKeyArn"), - }, - { - Name: "lock_date", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("LockDate"), + Resolver: schema.PathResolver("BackupVaultListMember"), }, { - Name: "locked", - Type: schema.TypeBool, - Resolver: schema.PathResolver("Locked"), - }, - { - Name: "max_retention_days", - Type: schema.TypeInt, - Resolver: schema.PathResolver("MaxRetentionDays"), - }, - { - Name: "min_retention_days", - Type: schema.TypeInt, - Resolver: schema.PathResolver("MinRetentionDays"), - }, - { - Name: "number_of_recovery_points", - Type: schema.TypeInt, - Resolver: schema.PathResolver("NumberOfRecoveryPoints"), - }, - { - Name: "vault_state", - Type: schema.TypeString, - Resolver: schema.PathResolver("VaultState"), - }, - { - Name: "vault_type", - Type: schema.TypeString, - Resolver: schema.PathResolver("VaultType"), + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), }, }, diff --git a/resources/services/backup/vaults_fetch.go b/resources/services/backup/vaults_fetch.go index f5155826..49b3b00d 100644 --- a/resources/services/backup/vaults_fetch.go +++ b/resources/services/backup/vaults_fetch.go @@ -5,12 +5,14 @@ import ( "encoding/json" "strings" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/backup" "github.com/aws/aws-sdk-go-v2/service/backup/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchBackupVaults(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -22,7 +24,15 @@ func fetchBackupVaults(ctx context.Context, meta schema.ClientMeta, parent *sche if err != nil { return err } - res <- result.BackupVaultList + + vaults := make([]*ohaws.BackupVault, len(result.BackupVaultList)) + for idx, v := range result.BackupVaultList { + vaults[idx] = &ohaws.BackupVault{ + BackupVaultListMember: v, + } + } + + res <- vaults if aws.ToString(result.NextToken) == "" { break } @@ -31,35 +41,32 @@ func fetchBackupVaults(ctx context.Context, meta schema.ClientMeta, parent *sche return nil } -func resolveVaultTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - vault := resource.Item.(types.BackupVaultListMember) +func getBackupVault(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { cl := meta.(*client.Client) svc := cl.Services().Backup + vault := resource.Item.(*ohaws.BackupVault) + params := backup.ListTagsInput{ResourceArn: vault.BackupVaultArn} - tags := make(map[string]string) - for { - result, err := svc.ListTags(ctx, ¶ms, func(o *backup.Options) { - o.Region = cl.Region - }) - if result == nil { - break - } + paginator := backup.NewListTagsPaginator(svc, ¶ms) + + vault.Tags = map[string]string{} + for paginator.HasMorePages() { + result, err := paginator.NextPage(ctx) if err != nil { return err } for k, v := range result.Tags { - tags[k] = v + vault.Tags[k] = v } - if aws.ToString(result.NextToken) == "" { - break - } - params.NextToken = result.NextToken } - return resource.Set(c.Name, tags) + + resource.Item = vault + + return nil } func resolveVaultAccessPolicy(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - vault := resource.Item.(types.BackupVaultListMember) + vault := resource.Item.(*ohaws.BackupVault) cl := meta.(*client.Client) svc := cl.Services().Backup result, err := svc.GetBackupVaultAccessPolicy( @@ -88,7 +95,7 @@ func resolveVaultAccessPolicy(ctx context.Context, meta schema.ClientMeta, resou } func resolveVaultNotifications(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, col schema.Column) error { - vault := resource.Item.(types.BackupVaultListMember) + vault := resource.Item.(*ohaws.BackupVault) cl := meta.(*client.Client) svc := cl.Services().Backup result, err := svc.GetBackupVaultNotifications( @@ -107,7 +114,7 @@ func resolveVaultNotifications(ctx context.Context, meta schema.ClientMeta, reso func fetchBackupVaultRecoveryPoints(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { cl := meta.(*client.Client) svc := cl.Services().Backup - vault := parent.Item.(types.BackupVaultListMember) + vault := parent.Item.(*ohaws.BackupVault) params := backup.ListRecoveryPointsByBackupVaultInput{BackupVaultName: vault.BackupVaultName, MaxResults: aws.Int32(100)} for { result, err := svc.ListRecoveryPointsByBackupVault(ctx, ¶ms) diff --git a/resources/services/backup/vaults_mock_test.go b/resources/services/backup/vaults_mock_test.go index 932236d4..8c70e2c0 100644 --- a/resources/services/backup/vaults_mock_test.go +++ b/resources/services/backup/vaults_mock_test.go @@ -3,13 +3,14 @@ package backup import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/backup" "github.com/aws/aws-sdk-go-v2/service/backup/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildBackupVaultsMock(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -85,7 +86,7 @@ func buildBackupVaultsMock(t *testing.T, ctrl *gomock.Controller) client.Service gomock.Any(), ).Return( &backup.ListTagsOutput{ - Tags: map[string]string{"tag1": "value1"}, + Tags: map[string]string{"tag2": "value2"}, }, nil, ) diff --git a/resources/services/cloudtrail/models/cloudtrail.go b/resources/services/cloudtrail/models/cloudtrail.go deleted file mode 100644 index ee98c45a..00000000 --- a/resources/services/cloudtrail/models/cloudtrail.go +++ /dev/null @@ -1,8 +0,0 @@ -package models - -import "github.com/aws/aws-sdk-go-v2/service/cloudtrail/types" - -type CloudTrailWrapper struct { - types.Trail - Tags map[string]string -} diff --git a/resources/services/cloudtrail/trails.go b/resources/services/cloudtrail/trails.go index c2b344ef..181c1a62 100644 --- a/resources/services/cloudtrail/trails.go +++ b/resources/services/cloudtrail/trails.go @@ -43,84 +43,14 @@ func Trails() *schema.Table { Resolver: resolveCloudTrailStatus, }, { - Name: "cloud_watch_logs_log_group_arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("CloudWatchLogsLogGroupArn"), - }, - { - Name: "cloud_watch_logs_role_arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("CloudWatchLogsRoleArn"), - }, - { - Name: "has_custom_event_selectors", - Type: schema.TypeBool, - Resolver: schema.PathResolver("HasCustomEventSelectors"), - }, - { - Name: "has_insight_selectors", - Type: schema.TypeBool, - Resolver: schema.PathResolver("HasInsightSelectors"), - }, - { - Name: "home_region", - Type: schema.TypeString, - Resolver: schema.PathResolver("HomeRegion"), - }, - { - Name: "include_global_service_events", - Type: schema.TypeBool, - Resolver: schema.PathResolver("IncludeGlobalServiceEvents"), - }, - { - Name: "is_multi_region_trail", - Type: schema.TypeBool, - Resolver: schema.PathResolver("IsMultiRegionTrail"), - }, - { - Name: "is_organization_trail", - Type: schema.TypeBool, - Resolver: schema.PathResolver("IsOrganizationTrail"), - }, - { - Name: "kms_key_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("KmsKeyId"), - }, - { - Name: "log_file_validation_enabled", - Type: schema.TypeBool, - Resolver: schema.PathResolver("LogFileValidationEnabled"), - }, - { - Name: "name", - Type: schema.TypeString, - Resolver: schema.PathResolver("Name"), - }, - { - Name: "s3_bucket_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("S3BucketName"), - }, - { - Name: "s3_key_prefix", - Type: schema.TypeString, - Resolver: schema.PathResolver("S3KeyPrefix"), - }, - { - Name: "sns_topic_arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("SnsTopicARN"), - }, - { - Name: "sns_topic_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("SnsTopicName"), + Name: "trail", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Trail"), }, { Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Tags"), + Resolver: client.ResolveTags, }, }, diff --git a/resources/services/cloudtrail/trails_fetch.go b/resources/services/cloudtrail/trails_fetch.go index aba199d5..eb7e01f9 100644 --- a/resources/services/cloudtrail/trails_fetch.go +++ b/resources/services/cloudtrail/trails_fetch.go @@ -5,13 +5,14 @@ import ( "fmt" "regexp" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/cloudtrail/models" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/cloudtrail" "github.com/aws/aws-sdk-go-v2/service/cloudtrail/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) // groupNameRegex extracts log group name from the ARN @@ -22,22 +23,20 @@ func fetchCloudtrailTrails(ctx context.Context, meta schema.ClientMeta, parent * svc := c.Services().Cloudtrail log := c.Logger() response, err := svc.DescribeTrails(ctx, nil) - if err != nil { return err } - getBundledTrailsWithTags := func(trails []types.Trail, region string) ([]*models.CloudTrailWrapper, error) { - processed := make([]*models.CloudTrailWrapper, len(trails)) + getBundledTrailsWithTags := func(trails []types.Trail, region string) ([]*ohaws.CloudTrail, error) { + processed := make([]*ohaws.CloudTrail, len(trails)) input := cloudtrail.ListTagsInput{ ResourceIdList: make([]string, 0, len(trails)), } for i, h := range trails { - processed[i] = &models.CloudTrailWrapper{ + processed[i] = &ohaws.CloudTrail{ Trail: h, - Tags: make(map[string]string), } // Before fetching trail tags we have to check if the trail is organization trail @@ -67,8 +66,8 @@ func fetchCloudtrailTrails(ctx context.Context, meta schema.ClientMeta, parent * if err != nil { return nil, err } - for i, tr := range processed { - client.TagsIntoMap(getCloudTrailTagsByResourceID(*tr.TrailARN, response.ResourceTagList), processed[i].Tags) + for _, tr := range processed { + tr.Tags = getCloudTrailTagsByResourceID(*tr.TrailARN, response.ResourceTagList) } if aws.ToString(response.NextToken) == "" { break @@ -106,7 +105,7 @@ func fetchCloudtrailTrails(ctx context.Context, meta schema.ClientMeta, parent * func resolveCloudTrailStatus(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, col schema.Column) error { c := meta.(*client.Client) svc := c.Services().Cloudtrail - r := resource.Item.(*models.CloudTrailWrapper) + r := resource.Item.(*ohaws.CloudTrail) response, err := svc.GetTrailStatus(ctx, &cloudtrail.GetTrailStatusInput{Name: r.TrailARN}, func(o *cloudtrail.Options) { o.Region = *r.HomeRegion @@ -120,7 +119,7 @@ func resolveCloudTrailStatus(ctx context.Context, meta schema.ClientMeta, resour func resolveCloudtrailTrailCloudwatchLogsLogGroupName(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { groupName := "" log := meta.(*client.Client).Logger() - r := resource.Item.(*models.CloudTrailWrapper) + r := resource.Item.(*ohaws.CloudTrail) if r.CloudWatchLogsLogGroupArn != nil { matches := groupNameRegex.FindStringSubmatch(*r.CloudWatchLogsLogGroupArn) if len(matches) < 2 { @@ -136,7 +135,7 @@ func resolveCloudtrailTrailCloudwatchLogsLogGroupName(ctx context.Context, meta } func fetchCloudtrailTrailEventSelectors(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - r := parent.Item.(*models.CloudTrailWrapper) + r := parent.Item.(*ohaws.CloudTrail) c := meta.(*client.Client) svc := c.Services().Cloudtrail response, err := svc.GetEventSelectors(ctx, &cloudtrail.GetEventSelectorsInput{TrailName: r.TrailARN}, func(options *cloudtrail.Options) { diff --git a/resources/services/cloudwatch/alarms.go b/resources/services/cloudwatch/alarms.go index 7fb9a875..4775e90a 100644 --- a/resources/services/cloudwatch/alarms.go +++ b/resources/services/cloudwatch/alarms.go @@ -9,10 +9,11 @@ import ( func Alarms() *schema.Table { return &schema.Table{ - Name: "aws_cloudwatch_alarms", - Description: `https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricAlarm.html`, - Resolver: fetchCloudwatchAlarms, - Multiplex: client.ServiceAccountRegionMultiplexer("logs"), + Name: "aws_cloudwatch_alarms", + Description: `https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricAlarm.html`, + Resolver: fetchCloudwatchAlarms, + PreResourceResolver: getAlarm, + Multiplex: client.ServiceAccountRegionMultiplexer("logs"), Columns: []schema.Column{ { Name: "account_id", @@ -24,15 +25,10 @@ func Alarms() *schema.Table { Type: schema.TypeString, Resolver: client.ResolveAWSRegion, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveCloudwatchAlarmTags, - }, { Name: "arn", Type: schema.TypeString, - Resolver: schema.PathResolver("AlarmArn"), + Resolver: schema.PathResolver("MetricAlarm.AlarmArn"), CreationOptions: schema.ColumnCreationOptions{ PrimaryKey: true, }, @@ -43,139 +39,14 @@ func Alarms() *schema.Table { Resolver: resolveCloudwatchAlarmDimensions, }, { - Name: "actions_enabled", - Type: schema.TypeBool, - Resolver: schema.PathResolver("ActionsEnabled"), - }, - { - Name: "alarm_actions", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("AlarmActions"), - }, - { - Name: "alarm_configuration_updated_timestamp", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("AlarmConfigurationUpdatedTimestamp"), - }, - { - Name: "alarm_description", - Type: schema.TypeString, - Resolver: schema.PathResolver("AlarmDescription"), - }, - { - Name: "alarm_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("AlarmName"), - }, - { - Name: "comparison_operator", - Type: schema.TypeString, - Resolver: schema.PathResolver("ComparisonOperator"), - }, - { - Name: "datapoints_to_alarm", - Type: schema.TypeInt, - Resolver: schema.PathResolver("DatapointsToAlarm"), - }, - { - Name: "evaluate_low_sample_count_percentile", - Type: schema.TypeString, - Resolver: schema.PathResolver("EvaluateLowSampleCountPercentile"), - }, - { - Name: "evaluation_periods", - Type: schema.TypeInt, - Resolver: schema.PathResolver("EvaluationPeriods"), - }, - { - Name: "evaluation_state", - Type: schema.TypeString, - Resolver: schema.PathResolver("EvaluationState"), - }, - { - Name: "extended_statistic", - Type: schema.TypeString, - Resolver: schema.PathResolver("ExtendedStatistic"), - }, - { - Name: "insufficient_data_actions", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("InsufficientDataActions"), - }, - { - Name: "metric_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("MetricName"), - }, - { - Name: "metrics", + Name: "metric_alarm", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Metrics"), - }, - { - Name: "namespace", - Type: schema.TypeString, - Resolver: schema.PathResolver("Namespace"), - }, - { - Name: "ok_actions", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("OKActions"), - }, - { - Name: "period", - Type: schema.TypeInt, - Resolver: schema.PathResolver("Period"), - }, - { - Name: "state_reason", - Type: schema.TypeString, - Resolver: schema.PathResolver("StateReason"), - }, - { - Name: "state_reason_data", - Type: schema.TypeString, - Resolver: schema.PathResolver("StateReasonData"), - }, - { - Name: "state_transitioned_timestamp", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("StateTransitionedTimestamp"), - }, - { - Name: "state_updated_timestamp", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("StateUpdatedTimestamp"), + Resolver: schema.PathResolver("MetricAlarm"), }, { - Name: "state_value", - Type: schema.TypeString, - Resolver: schema.PathResolver("StateValue"), - }, - { - Name: "statistic", - Type: schema.TypeString, - Resolver: schema.PathResolver("Statistic"), - }, - { - Name: "threshold", - Type: schema.TypeFloat, - Resolver: schema.PathResolver("Threshold"), - }, - { - Name: "threshold_metric_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("ThresholdMetricId"), - }, - { - Name: "treat_missing_data", - Type: schema.TypeString, - Resolver: schema.PathResolver("TreatMissingData"), - }, - { - Name: "unit", - Type: schema.TypeString, - Resolver: schema.PathResolver("Unit"), + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, }, }, } diff --git a/resources/services/cloudwatch/alarms_fetch.go b/resources/services/cloudwatch/alarms_fetch.go index 91be7dac..59120005 100644 --- a/resources/services/cloudwatch/alarms_fetch.go +++ b/resources/services/cloudwatch/alarms_fetch.go @@ -3,11 +3,12 @@ package cloudwatch import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/cloudwatch" - "github.com/aws/aws-sdk-go-v2/service/cloudwatch/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchCloudwatchAlarms(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -16,11 +17,18 @@ func fetchCloudwatchAlarms(ctx context.Context, meta schema.ClientMeta, parent * svc := c.Services().Cloudwatch for { response, err := svc.DescribeAlarms(ctx, &config) - if err != nil { return err } - res <- response.MetricAlarms + + alarms := make([]*ohaws.Alarm, len(response.MetricAlarms)) + for idx, a := range response.MetricAlarms { + alarms[idx] = &ohaws.Alarm{ + MetricAlarm: &a, + } + } + + res <- alarms if aws.ToString(response.NextToken) == "" { break } @@ -28,8 +36,9 @@ func fetchCloudwatchAlarms(ctx context.Context, meta schema.ClientMeta, parent * } return nil } + func resolveCloudwatchAlarmDimensions(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - alarm := resource.Item.(types.MetricAlarm) + alarm := resource.Item.(*ohaws.Alarm) dimensions := make(map[string]*string) for _, d := range alarm.Dimensions { dimensions[*d.Name] = d.Value @@ -37,17 +46,24 @@ func resolveCloudwatchAlarmDimensions(ctx context.Context, meta schema.ClientMet return resource.Set("dimensions", dimensions) } -func resolveCloudwatchAlarmTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { +func getAlarm(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { cl := meta.(*client.Client) svc := cl.Services().Cloudwatch - alarm := resource.Item.(types.MetricAlarm) + alarm := resource.Item.(*ohaws.Alarm) input := cloudwatch.ListTagsForResourceInput{ - ResourceARN: alarm.AlarmArn, + ResourceARN: alarm.MetricAlarm.AlarmArn, } output, err := svc.ListTagsForResource(ctx, &input) if err != nil { return err } - return resource.Set(c.Name, client.TagsToMap(output.Tags)) + + alarm.Tags = make([]ohaws.Tag, len(output.Tags)) + for i := range output.Tags { + alarm.Tags[i].Key = output.Tags[i].Key + alarm.Tags[i].Value = output.Tags[i].Value + } + + return nil } diff --git a/resources/services/cognito/user_pools.go b/resources/services/cognito/user_pools.go index 37256758..474ddb44 100644 --- a/resources/services/cognito/user_pools.go +++ b/resources/services/cognito/user_pools.go @@ -204,6 +204,11 @@ func UserPools() *schema.Table { Type: schema.TypeJSON, Resolver: schema.PathResolver("VerificationMessageTemplate"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), + }, }, Relations: []*schema.Table{ diff --git a/resources/services/cognito/user_pools_fetch.go b/resources/services/cognito/user_pools_fetch.go index 8a8e0f7b..1d60b7fa 100644 --- a/resources/services/cognito/user_pools_fetch.go +++ b/resources/services/cognito/user_pools_fetch.go @@ -3,11 +3,14 @@ package cognito import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider" "github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchCognitoUserPools(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -42,12 +45,33 @@ func getUserPool(ctx context.Context, meta schema.ClientMeta, resource *schema.R return err } - resource.Item = upo.UserPool + pool := ohaws.CognitoUserPool{ + UserPoolType: *upo.UserPool, + } + + tags, err := getUserPoolTags(ctx, svc, *pool.Arn) + if err != nil { + return err + } + pool.Tags = tags + + resource.Item = &pool return nil } +func getUserPoolTags(ctx context.Context, svc services.CognitoidentityproviderClient, poolArn string) (map[string]string, error) { + tags, err := svc.ListTagsForResource(ctx, &cognitoidentityprovider.ListTagsForResourceInput{ + ResourceArn: &poolArn, + }) + if err != nil { + return nil, err + } + + return tags.Tags, nil +} + func fetchCognitoUserPoolIdentityProviders(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - pool := parent.Item.(*types.UserPoolType) + pool := parent.Item.(*ohaws.CognitoUserPool) c := meta.(*client.Client) svc := c.Services().Cognitoidentityprovider @@ -71,7 +95,7 @@ func getUserPoolIdentityProvider(ctx context.Context, meta schema.ClientMeta, re c := meta.(*client.Client) svc := c.Services().Cognitoidentityprovider item := resource.Item.(types.ProviderDescription) - pool := resource.Parent.Item.(*types.UserPoolType) + pool := resource.Parent.Item.(*ohaws.CognitoUserPool) pd, err := svc.DescribeIdentityProvider(ctx, &cognitoidentityprovider.DescribeIdentityProviderInput{ ProviderName: item.ProviderName, diff --git a/resources/services/cognito/user_pools_mock_test.go b/resources/services/cognito/user_pools_mock_test.go index 7bee3e78..011432de 100644 --- a/resources/services/cognito/user_pools_mock_test.go +++ b/resources/services/cognito/user_pools_mock_test.go @@ -3,13 +3,14 @@ package cognito import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider" "github.com/aws/aws-sdk-go-v2/service/cognitoidentityprovider/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildCognitoUserPools(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -42,6 +43,16 @@ func buildCognitoUserPools(t *testing.T, ctrl *gomock.Controller) client.Service nil, ) + m.EXPECT().ListTagsForResource( + gomock.Any(), + &cognitoidentityprovider.ListTagsForResourceInput{ResourceArn: pool.Arn}, + ).Return( + &cognitoidentityprovider.ListTagsForResourceOutput{ + Tags: map[string]string{"key1": "val1"}, + }, + nil, + ) + var providerDesc types.ProviderDescription if err := faker.FakeObject(&providerDesc); err != nil { t.Fatal(err) diff --git a/resources/services/ec2/ebs_volumes.go b/resources/services/ec2/ebs_volumes.go index 817ca0d5..51b24395 100644 --- a/resources/services/ec2/ebs_volumes.go +++ b/resources/services/ec2/ebs_volumes.go @@ -122,6 +122,11 @@ func EbsVolumes() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("VolumeId"), }, + { + Name: "volume_initialization_rate", + Type: schema.TypeInt, + Resolver: schema.PathResolver("VolumeInitializationRate"), + }, { Name: "volume_type", Type: schema.TypeString, diff --git a/resources/services/ec2/eips.go b/resources/services/ec2/eips.go index 2f643943..e301c777 100644 --- a/resources/services/ec2/eips.go +++ b/resources/services/ec2/eips.go @@ -99,6 +99,11 @@ func Eips() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("PublicIpv4Pool"), }, + { + Name: "service_managed", + Type: schema.TypeString, + Resolver: schema.PathResolver("ServiceManaged"), + }, { Name: "tags", Type: schema.TypeJSON, diff --git a/resources/services/ec2/models/ec2.go b/resources/services/ec2/models/ec2.go deleted file mode 100644 index 18a16418..00000000 --- a/resources/services/ec2/models/ec2.go +++ /dev/null @@ -1,14 +0,0 @@ -package models - -import "github.com/aws/aws-sdk-go-v2/service/ec2/types" - -type RegionalConfig struct { - EbsEncryptionEnabledByDefault bool - EbsDefaultKmsKeyId *string -} - -// Region combines the sdk Region type and the RegionConfig type above -type Region struct { - types.Region - EC2Config RegionalConfig -} diff --git a/resources/services/ec2/regional_config_fetch.go b/resources/services/ec2/regional_config_fetch.go index 70f654ab..5aedf2a0 100644 --- a/resources/services/ec2/regional_config_fetch.go +++ b/resources/services/ec2/regional_config_fetch.go @@ -9,7 +9,7 @@ import ( "github.com/cloudquery/plugin-sdk/schema" "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/ec2/models" + "github.com/OpsHelmInc/ohaws" ) func fetchEc2RegionalConfigs(ctx context.Context, meta schema.ClientMeta, _ *schema.Resource, res chan<- any) error { @@ -18,7 +18,7 @@ func fetchEc2RegionalConfigs(ctx context.Context, meta schema.ClientMeta, _ *sch var errs error svc := c.Services().Ec2 - var regionalConfig models.RegionalConfig + var regionalConfig ohaws.RegionalConfig resp, err := svc.GetEbsDefaultKmsKeyId(ctx, &ec2.GetEbsDefaultKmsKeyIdInput{}) if err != nil { c.Logger().Error().Err(err).Msg("error calling GetEbsDefaultKmsKeyId") diff --git a/resources/services/ec2/regions_fetch.go b/resources/services/ec2/regions_fetch.go index a96379e0..208a2493 100644 --- a/resources/services/ec2/regions_fetch.go +++ b/resources/services/ec2/regions_fetch.go @@ -10,7 +10,7 @@ import ( "github.com/cloudquery/plugin-sdk/schema" "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/ec2/models" + "github.com/OpsHelmInc/ohaws" ) func fetchEc2Regions(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -21,13 +21,13 @@ func fetchEc2Regions(ctx context.Context, meta schema.ClientMeta, parent *schema } for _, r := range output.Regions { - res <- &models.Region{Region: r} + res <- &ohaws.Region{Region: r} } return nil } func resolveRegionEnabled(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - region := resource.Item.(*models.Region) + region := resource.Item.(*ohaws.Region) switch *region.OptInStatus { case "opt-in-not-required", "opted-in": return resource.Set(c.Name, true) @@ -44,10 +44,11 @@ func resolveRegionPartition(ctx context.Context, meta schema.ClientMeta, resourc func resolveRegionArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) + region := resource.Item.(*ohaws.Region) a := arn.ARN{ Partition: cl.Partition, Service: "ec2", - Region: cl.Region, + Region: aws.ToString(region.RegionName), AccountID: cl.AccountID, Resource: "region", } @@ -59,7 +60,7 @@ func resolveEc2RegionConfig(ctx context.Context, meta schema.ClientMeta, resourc svc := cl.Services().Ec2 var ( - regionalConfig models.RegionalConfig + regionalConfig ohaws.RegionalConfig errs error ) @@ -81,7 +82,7 @@ func resolveEc2RegionConfig(ctx context.Context, meta schema.ClientMeta, resourc regionalConfig.EbsEncryptionEnabledByDefault = *ebsResp.EbsEncryptionByDefault } - conf := resource.Item.(*models.Region) + conf := resource.Item.(*ohaws.Region) conf.EC2Config = regionalConfig err = resource.Set(c.Name, regionalConfig) diff --git a/resources/services/ec2/reserved_instances.go b/resources/services/ec2/reserved_instances.go index 00a42599..2cd16956 100644 --- a/resources/services/ec2/reserved_instances.go +++ b/resources/services/ec2/reserved_instances.go @@ -37,6 +37,11 @@ func ReservedInstances() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("AvailabilityZone"), }, + { + Name: "availability_zone_id", + Type: schema.TypeString, + Resolver: schema.PathResolver("AvailabilityZoneId"), + }, { Name: "currency_code", Type: schema.TypeString, diff --git a/resources/services/ec2/vpcs.go b/resources/services/ec2/vpcs.go index 7b20716f..3dc3643e 100644 --- a/resources/services/ec2/vpcs.go +++ b/resources/services/ec2/vpcs.go @@ -57,6 +57,11 @@ func Vpcs() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("DhcpOptionsId"), }, + { + Name: "encryption_control", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("EncryptionControl"), + }, { Name: "instance_tenancy", Type: schema.TypeString, diff --git a/resources/services/ecr/repositories.go b/resources/services/ecr/repositories.go index 0329723c..da440484 100644 --- a/resources/services/ecr/repositories.go +++ b/resources/services/ecr/repositories.go @@ -9,10 +9,11 @@ import ( func Repositories() *schema.Table { return &schema.Table{ - Name: "aws_ecr_repositories", - Description: `https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_Repository.html`, - Resolver: fetchEcrRepositories, - Multiplex: client.ServiceAccountRegionMultiplexer("api.ecr"), + Name: "aws_ecr_repositories", + Description: `https://docs.aws.amazon.com/AmazonECR/latest/APIReference/API_Repository.html`, + Resolver: fetchEcrRepositories, + PreResourceResolver: getRepository, + Multiplex: client.ServiceAccountRegionMultiplexer("api.ecr"), Columns: []schema.Column{ { Name: "account_id", @@ -32,11 +33,6 @@ func Repositories() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveRepositoryTags, - }, { Name: "policy_text", Type: schema.TypeJSON, @@ -48,39 +44,14 @@ func Repositories() *schema.Table { Resolver: client.StaticValueResolver("AWS::ECR::Repository"), }, { - Name: "created_at", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreatedAt"), - }, - { - Name: "encryption_configuration", + Name: "repository", Type: schema.TypeJSON, - Resolver: schema.PathResolver("EncryptionConfiguration"), + Resolver: schema.PathResolver("Repository"), }, { - Name: "image_scanning_configuration", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("ImageScanningConfiguration"), - }, - { - Name: "image_tag_mutability", - Type: schema.TypeString, - Resolver: schema.PathResolver("ImageTagMutability"), - }, - { - Name: "registry_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("RegistryId"), - }, - { - Name: "repository_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("RepositoryName"), - }, - { - Name: "repository_uri", - Type: schema.TypeString, - Resolver: schema.PathResolver("RepositoryUri"), + Resolver: schema.PathResolver("Tags"), }, }, diff --git a/resources/services/ecr/repositories_fetch.go b/resources/services/ecr/repositories_fetch.go index 2869ce3b..ca6125fd 100644 --- a/resources/services/ecr/repositories_fetch.go +++ b/resources/services/ecr/repositories_fetch.go @@ -11,6 +11,7 @@ import ( "github.com/OpsHelmInc/cloudquery/client" "github.com/OpsHelmInc/cloudquery/resources/services/ecr/models" + "github.com/OpsHelmInc/ohaws" ) func fetchEcrRepositories(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -25,7 +26,14 @@ func fetchEcrRepositories(ctx context.Context, meta schema.ClientMeta, parent *s if err != nil { return err } - res <- output.Repositories + + repos := make([]*ohaws.ECRRepository, len(output.Repositories)) + for idx, r := range output.Repositories { + repos[idx] = &ohaws.ECRRepository{ + Repository: r, + } + } + res <- repos if aws.ToString(output.NextToken) == "" { break } @@ -34,10 +42,10 @@ func fetchEcrRepositories(ctx context.Context, meta schema.ClientMeta, parent *s return nil } -func resolveRepositoryTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { +func getRepository(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { cl := meta.(*client.Client) svc := cl.Services().Ecr - repo := resource.Item.(types.Repository) + repo := resource.Item.(*ohaws.ECRRepository) input := ecr.ListTagsForResourceInput{ ResourceArn: repo.RepositoryArn, @@ -46,13 +54,15 @@ func resolveRepositoryTags(ctx context.Context, meta schema.ClientMeta, resource if err != nil { return err } - return resource.Set(c.Name, client.TagsToMap(output.Tags)) + + repo.Tags = client.TagsToMap(output.Tags) + return nil } func resolveRepositoryPolicy(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) svc := cl.Services().Ecr - repo := resource.Item.(types.Repository) + repo := resource.Item.(*ohaws.ECRRepository) input := ecr.GetRepositoryPolicyInput{ RepositoryName: repo.RepositoryName, @@ -67,7 +77,7 @@ func resolveRepositoryPolicy(ctx context.Context, meta schema.ClientMeta, resour func fetchEcrRepositoryImages(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { config := ecr.DescribeImagesInput{ - RepositoryName: parent.Item.(types.Repository).RepositoryName, + RepositoryName: parent.Item.(*ohaws.ECRRepository).RepositoryName, MaxResults: aws.Int32(1000), } paginator := ecr.NewDescribeImagesPaginator(meta.(*client.Client).Services().Ecr, &config) @@ -84,7 +94,7 @@ func fetchEcrRepositoryImages(ctx context.Context, meta schema.ClientMeta, paren func fetchEcrRepositoryImageScanFindings(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { c := meta.(*client.Client) image := parent.Item.(types.ImageDetail) - repo := parent.Parent.Item.(types.Repository) + repo := parent.Parent.Item.(*ohaws.ECRRepository) for _, tag := range image.ImageTags { config := ecr.DescribeImageScanFindingsInput{ RepositoryName: repo.RepositoryName, diff --git a/resources/services/ecrpublic/repositories.go b/resources/services/ecrpublic/repositories.go index 31735fe1..329f25d7 100644 --- a/resources/services/ecrpublic/repositories.go +++ b/resources/services/ecrpublic/repositories.go @@ -9,10 +9,11 @@ import ( func Repositories() *schema.Table { return &schema.Table{ - Name: "aws_ecrpublic_repositories", - Description: `https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_Repository.html`, - Resolver: fetchEcrpublicRepositories, - Multiplex: client.ServiceAccountRegionMultiplexer("api.ecr-public"), + Name: "aws_ecrpublic_repositories", + Description: `https://docs.aws.amazon.com/AmazonECRPublic/latest/APIReference/API_Repository.html`, + Resolver: fetchEcrpublicRepositories, + PreResourceResolver: getRepository, + Multiplex: client.ServiceAccountRegionMultiplexer("api.ecr-public"), Columns: []schema.Column{ { Name: "account_id", @@ -32,35 +33,20 @@ func Repositories() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveRepositoryTags, - }, { Name: "oh_resource_type", Type: schema.TypeString, Resolver: client.StaticValueResolver("AWS::ECR::PublicRepository"), }, { - Name: "created_at", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreatedAt"), - }, - { - Name: "registry_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("RegistryId"), - }, - { - Name: "repository_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("RepositoryName"), + Name: "repository", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Repository"), }, { - Name: "repository_uri", - Type: schema.TypeString, - Resolver: schema.PathResolver("RepositoryUri"), + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), }, }, diff --git a/resources/services/ecrpublic/repositories_fetch.go b/resources/services/ecrpublic/repositories_fetch.go index d209983c..66a5398d 100644 --- a/resources/services/ecrpublic/repositories_fetch.go +++ b/resources/services/ecrpublic/repositories_fetch.go @@ -3,12 +3,14 @@ package ecrpublic import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/ecrpublic" "github.com/aws/aws-sdk-go-v2/service/ecrpublic/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchEcrpublicRepositories(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -23,7 +25,15 @@ func fetchEcrpublicRepositories(ctx context.Context, meta schema.ClientMeta, par if err != nil { return err } - res <- output.Repositories + + repos := make([]*ohaws.ECRPublicRepository, len(output.Repositories)) + for idx, r := range output.Repositories { + repos[idx] = &ohaws.ECRPublicRepository{ + Repository: r, + } + } + res <- repos + if aws.ToString(output.NextToken) == "" { break } @@ -32,10 +42,10 @@ func fetchEcrpublicRepositories(ctx context.Context, meta schema.ClientMeta, par return nil } -func resolveRepositoryTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { +func getRepository(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { cl := meta.(*client.Client) svc := cl.Services().Ecrpublic - repo := resource.Item.(types.Repository) + repo := resource.Item.(*ohaws.ECRPublicRepository) input := ecrpublic.ListTagsForResourceInput{ ResourceArn: repo.RepositoryArn, @@ -44,12 +54,14 @@ func resolveRepositoryTags(ctx context.Context, meta schema.ClientMeta, resource if err != nil { return err } - return resource.Set(c.Name, client.TagsToMap(output.Tags)) + + repo.Tags = client.TagsToMap(output.Tags) + return nil } func fetchEcrpublicRepositoryImages(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { maxResults := int32(1000) - p := parent.Item.(types.Repository) + p := parent.Item.(*ohaws.ECRPublicRepository) config := ecrpublic.DescribeImagesInput{ RepositoryName: p.RepositoryName, MaxResults: &maxResults, diff --git a/resources/services/elasticache/clusters.go b/resources/services/elasticache/clusters.go index 1333a124..39323dc2 100644 --- a/resources/services/elasticache/clusters.go +++ b/resources/services/elasticache/clusters.go @@ -9,10 +9,11 @@ import ( func Clusters() *schema.Table { return &schema.Table{ - Name: "aws_elasticache_clusters", - Description: `https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheCluster.html`, - Resolver: fetchElasticacheClusters, - Multiplex: client.ServiceAccountRegionMultiplexer("elasticache"), + Name: "aws_elasticache_clusters", + Description: `https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheCluster.html`, + Resolver: fetchElasticacheClusters, + PreResourceResolver: getCluster, + Multiplex: client.ServiceAccountRegionMultiplexer("elasticache"), Columns: []schema.Column{ { Name: "account_id", @@ -197,6 +198,11 @@ func Clusters() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("TransitEncryptionMode"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/elasticache/clusters_fetch.go b/resources/services/elasticache/clusters_fetch.go index 638225a9..a2713fd9 100644 --- a/resources/services/elasticache/clusters_fetch.go +++ b/resources/services/elasticache/clusters_fetch.go @@ -3,10 +3,12 @@ package elasticache import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/elasticache" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchElasticacheClusters(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -19,7 +21,35 @@ func fetchElasticacheClusters(ctx context.Context, meta schema.ClientMeta, paren if err != nil { return err } - res <- v.CacheClusters + + clusters := make([]*ohaws.CacheCluster, len(v.CacheClusters)) + for idx, c := range v.CacheClusters { + clusters[idx] = &ohaws.CacheCluster{ + CacheCluster: c, + } + } + res <- clusters } return nil } + +func getCluster(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + c := meta.(*client.Client) + cluster := resource.Item.(*ohaws.CacheCluster) + svc := c.Services().Elasticache + + tagsResp, err := svc.ListTagsForResource(ctx, &elasticache.ListTagsForResourceInput{ + ResourceName: cluster.ARN, + }) + if err != nil { + return err + } + + cluster.Tags = make([]ohaws.Tag, len(tagsResp.TagList)) + for i := range tagsResp.TagList { + cluster.Tags[i].Key = tagsResp.TagList[i].Key + cluster.Tags[i].Value = tagsResp.TagList[i].Value + } + + return nil +} diff --git a/resources/services/elasticache/clusters_mock_test.go b/resources/services/elasticache/clusters_mock_test.go index 2abe66de..af36d19e 100644 --- a/resources/services/elasticache/clusters_mock_test.go +++ b/resources/services/elasticache/clusters_mock_test.go @@ -3,11 +3,14 @@ package elasticache import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/elasticache" + "github.com/aws/aws-sdk-go-v2/service/elasticache/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildElasticacheClusters(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -20,6 +23,15 @@ func buildElasticacheClusters(t *testing.T, ctrl *gomock.Controller) client.Serv } mockElasticache.EXPECT().DescribeCacheClusters(gomock.Any(), gomock.Any(), gomock.Any()).Return(&output, nil) + mockElasticache.EXPECT().ListTagsForResource( + gomock.Any(), + &elasticache.ListTagsForResourceInput{ResourceName: output.CacheClusters[0].ARN}, + ).Return( + &elasticache.ListTagsForResourceOutput{ + TagList: []types.Tag{{Key: aws.String("key1"), Value: aws.String("val1")}}, + }, + nil, + ) return client.Services{ Elasticache: mockElasticache, diff --git a/resources/services/elasticache/replication_groups.go b/resources/services/elasticache/replication_groups.go index c77b4624..8ce526ed 100644 --- a/resources/services/elasticache/replication_groups.go +++ b/resources/services/elasticache/replication_groups.go @@ -9,10 +9,11 @@ import ( func ReplicationGroups() *schema.Table { return &schema.Table{ - Name: "aws_elasticache_replication_groups", - Description: `https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ReplicationGroup.html`, - Resolver: fetchElasticacheReplicationGroups, - Multiplex: client.ServiceAccountRegionMultiplexer("elasticache"), + Name: "aws_elasticache_replication_groups", + Description: `https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_ReplicationGroup.html`, + Resolver: fetchElasticacheReplicationGroups, + PreResourceResolver: getReplicationGroup, + Multiplex: client.ServiceAccountRegionMultiplexer("elasticache"), Columns: []schema.Column{ { Name: "account_id", @@ -187,6 +188,11 @@ func ReplicationGroups() *schema.Table { Type: schema.TypeStringArray, Resolver: schema.PathResolver("UserGroupIds"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/elasticache/replication_groups_fetch.go b/resources/services/elasticache/replication_groups_fetch.go index 8e12db70..346b93f0 100644 --- a/resources/services/elasticache/replication_groups_fetch.go +++ b/resources/services/elasticache/replication_groups_fetch.go @@ -3,9 +3,11 @@ package elasticache import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/service/elasticache" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchElasticacheReplicationGroups(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -15,7 +17,35 @@ func fetchElasticacheReplicationGroups(ctx context.Context, meta schema.ClientMe if err != nil { return err } - res <- v.ReplicationGroups + + groups := make([]*ohaws.ReplicationGroup, len(v.ReplicationGroups)) + for idx, g := range v.ReplicationGroups { + groups[idx] = &ohaws.ReplicationGroup{ + ReplicationGroup: g, + } + } + res <- groups } return nil } + +func getReplicationGroup(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + c := meta.(*client.Client) + group := resource.Item.(*ohaws.ReplicationGroup) + svc := c.Services().Elasticache + + tagsResp, err := svc.ListTagsForResource(ctx, &elasticache.ListTagsForResourceInput{ + ResourceName: group.ARN, + }) + if err != nil { + return err + } + + group.Tags = make([]ohaws.Tag, len(tagsResp.TagList)) + for i := range tagsResp.TagList { + group.Tags[i].Key = tagsResp.TagList[i].Key + group.Tags[i].Value = tagsResp.TagList[i].Value + } + + return nil +} diff --git a/resources/services/elasticache/replication_groups_mock_test.go b/resources/services/elasticache/replication_groups_mock_test.go index 903222b5..e97f3690 100644 --- a/resources/services/elasticache/replication_groups_mock_test.go +++ b/resources/services/elasticache/replication_groups_mock_test.go @@ -3,11 +3,14 @@ package elasticache import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/elasticache" + "github.com/aws/aws-sdk-go-v2/service/elasticache/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildElasticacheReplicationGroups(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -20,6 +23,15 @@ func buildElasticacheReplicationGroups(t *testing.T, ctrl *gomock.Controller) cl } mockElasticache.EXPECT().DescribeReplicationGroups(gomock.Any(), gomock.Any(), gomock.Any()).Return(&output, nil) + mockElasticache.EXPECT().ListTagsForResource( + gomock.Any(), + &elasticache.ListTagsForResourceInput{ResourceName: output.ReplicationGroups[0].ARN}, + ).Return( + &elasticache.ListTagsForResourceOutput{ + TagList: []types.Tag{{Key: aws.String("key1"), Value: aws.String("val1")}}, + }, + nil, + ) return client.Services{ Elasticache: mockElasticache, diff --git a/resources/services/elasticache/subnet_groups.go b/resources/services/elasticache/subnet_groups.go index f382989a..bb5e0deb 100644 --- a/resources/services/elasticache/subnet_groups.go +++ b/resources/services/elasticache/subnet_groups.go @@ -9,10 +9,11 @@ import ( func SubnetGroups() *schema.Table { return &schema.Table{ - Name: "aws_elasticache_subnet_groups", - Description: `https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheSubnetGroup.html`, - Resolver: fetchElasticacheSubnetGroups, - Multiplex: client.ServiceAccountRegionMultiplexer("elasticache"), + Name: "aws_elasticache_subnet_groups", + Description: `https://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/API_CacheSubnetGroup.html`, + Resolver: fetchElasticacheSubnetGroups, + PreResourceResolver: getCacheSubnetGroup, + Multiplex: client.ServiceAccountRegionMultiplexer("elasticache"), Columns: []schema.Column{ { Name: "account_id", @@ -57,6 +58,11 @@ func SubnetGroups() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("VpcId"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/elasticache/subnet_groups_fetch.go b/resources/services/elasticache/subnet_groups_fetch.go index d29b8f9d..5ea5fcd5 100644 --- a/resources/services/elasticache/subnet_groups_fetch.go +++ b/resources/services/elasticache/subnet_groups_fetch.go @@ -3,9 +3,11 @@ package elasticache import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/service/elasticache" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchElasticacheSubnetGroups(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -15,7 +17,35 @@ func fetchElasticacheSubnetGroups(ctx context.Context, meta schema.ClientMeta, p if err != nil { return err } - res <- v.CacheSubnetGroups + + groups := make([]*ohaws.CacheSubnetGroup, len(v.CacheSubnetGroups)) + for idx, g := range v.CacheSubnetGroups { + groups[idx] = &ohaws.CacheSubnetGroup{ + CacheSubnetGroup: g, + } + } + res <- groups } return nil } + +func getCacheSubnetGroup(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + c := meta.(*client.Client) + group := resource.Item.(*ohaws.CacheSubnetGroup) + svc := c.Services().Elasticache + + tagsResp, err := svc.ListTagsForResource(ctx, &elasticache.ListTagsForResourceInput{ + ResourceName: group.ARN, + }) + if err != nil { + return err + } + + group.Tags = make([]ohaws.Tag, len(tagsResp.TagList)) + for i := range tagsResp.TagList { + group.Tags[i].Key = tagsResp.TagList[i].Key + group.Tags[i].Value = tagsResp.TagList[i].Value + } + + return nil +} diff --git a/resources/services/elasticache/subnet_groups_mock_test.go b/resources/services/elasticache/subnet_groups_mock_test.go index f9f654d3..c8f44f82 100644 --- a/resources/services/elasticache/subnet_groups_mock_test.go +++ b/resources/services/elasticache/subnet_groups_mock_test.go @@ -3,11 +3,14 @@ package elasticache import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/elasticache" + "github.com/aws/aws-sdk-go-v2/service/elasticache/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildElasticacheSubnetGroups(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -20,6 +23,15 @@ func buildElasticacheSubnetGroups(t *testing.T, ctrl *gomock.Controller) client. } mockElasticache.EXPECT().DescribeCacheSubnetGroups(gomock.Any(), gomock.Any(), gomock.Any()).Return(&output, nil) + mockElasticache.EXPECT().ListTagsForResource( + gomock.Any(), + &elasticache.ListTagsForResourceInput{ResourceName: output.CacheSubnetGroups[0].ARN}, + ).Return( + &elasticache.ListTagsForResourceOutput{ + TagList: []types.Tag{{Key: aws.String("key1"), Value: aws.String("val1")}}, + }, + nil, + ) return client.Services{ Elasticache: mockElasticache, diff --git a/resources/services/elasticsearch/domains.go b/resources/services/elasticsearch/domains.go index 0c8d7300..b0bef775 100644 --- a/resources/services/elasticsearch/domains.go +++ b/resources/services/elasticsearch/domains.go @@ -30,11 +30,6 @@ func Domains() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveElasticsearchDomainTags, - }, { Name: "id", Type: schema.TypeString, @@ -44,134 +39,14 @@ func Domains() *schema.Table { }, }, { - Name: "arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("ARN"), - }, - { - Name: "domain_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("DomainName"), - }, - { - Name: "elasticsearch_cluster_config", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("ElasticsearchClusterConfig"), - }, - { - Name: "access_policies", - Type: schema.TypeString, - Resolver: schema.PathResolver("AccessPolicies"), - }, - { - Name: "advanced_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("AdvancedOptions"), - }, - { - Name: "advanced_security_options", + Name: "elasticsearch_domain_status", Type: schema.TypeJSON, - Resolver: schema.PathResolver("AdvancedSecurityOptions"), + Resolver: schema.PathResolver("ElasticsearchDomainStatus"), }, { - Name: "auto_tune_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("AutoTuneOptions"), - }, - { - Name: "change_progress_details", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("ChangeProgressDetails"), - }, - { - Name: "cognito_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("CognitoOptions"), - }, - { - Name: "created", - Type: schema.TypeBool, - Resolver: schema.PathResolver("Created"), - }, - { - Name: "deleted", - Type: schema.TypeBool, - Resolver: schema.PathResolver("Deleted"), - }, - { - Name: "domain_endpoint_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("DomainEndpointOptions"), - }, - { - Name: "domain_processing_status", - Type: schema.TypeString, - Resolver: schema.PathResolver("DomainProcessingStatus"), - }, - { - Name: "ebs_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("EBSOptions"), - }, - { - Name: "elasticsearch_version", - Type: schema.TypeString, - Resolver: schema.PathResolver("ElasticsearchVersion"), - }, - { - Name: "encryption_at_rest_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("EncryptionAtRestOptions"), - }, - { - Name: "endpoint", - Type: schema.TypeString, - Resolver: schema.PathResolver("Endpoint"), - }, - { - Name: "endpoints", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("Endpoints"), - }, - { - Name: "log_publishing_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("LogPublishingOptions"), - }, - { - Name: "modifying_properties", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("ModifyingProperties"), - }, - { - Name: "node_to_node_encryption_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("NodeToNodeEncryptionOptions"), - }, - { - Name: "processing", - Type: schema.TypeBool, - Resolver: schema.PathResolver("Processing"), - }, - { - Name: "service_software_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("ServiceSoftwareOptions"), - }, - { - Name: "snapshot_options", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("SnapshotOptions"), - }, - { - Name: "upgrade_processing", - Type: schema.TypeBool, - Resolver: schema.PathResolver("UpgradeProcessing"), - }, - { - Name: "vpc_options", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("VPCOptions"), + Resolver: client.ResolveTags, }, }, } diff --git a/resources/services/elasticsearch/domains_fetch.go b/resources/services/elasticsearch/domains_fetch.go index 80bb5795..753c5a1d 100644 --- a/resources/services/elasticsearch/domains_fetch.go +++ b/resources/services/elasticsearch/domains_fetch.go @@ -3,10 +3,13 @@ package elasticsearch import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/service/elasticsearchservice" "github.com/aws/aws-sdk-go-v2/service/elasticsearchservice/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchElasticsearchDomains(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -32,28 +35,30 @@ func getDomain(ctx context.Context, meta schema.ClientMeta, resource *schema.Res return nil } - resource.Item = domainOutput.DomainStatus + domain := ohaws.ElasticsearchDomain{ + ElasticsearchDomainStatus: *domainOutput.DomainStatus, + } + + tags, err := getElasticsearchDomainTags(ctx, svc, *domain.ARN) + if err != nil { + return err + } + domain.Tags = tags + + resource.Item = &domain return nil } -func resolveElasticsearchDomainTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - region := meta.(*client.Client).Region - svc := meta.(*client.Client).Services().Elasticsearchservice - domain := resource.Item.(*types.ElasticsearchDomainStatus) +func getElasticsearchDomainTags(ctx context.Context, svc services.ElasticsearchserviceClient, domainARN string) ([]types.Tag, error) { tagsOutput, err := svc.ListTags(ctx, &elasticsearchservice.ListTagsInput{ - ARN: domain.ARN, - }, func(o *elasticsearchservice.Options) { - o.Region = region + ARN: &domainARN, }) if err != nil { - return err + return nil, err } if len(tagsOutput.TagList) == 0 { - return nil - } - tags := make(map[string]*string) - for _, s := range tagsOutput.TagList { - tags[*s.Key] = s.Value + return nil, nil } - return resource.Set(c.Name, tags) + + return tagsOutput.TagList, nil } diff --git a/resources/services/elbv2/listeners.go b/resources/services/elbv2/listeners.go index 82f37e08..5a107e69 100644 --- a/resources/services/elbv2/listeners.go +++ b/resources/services/elbv2/listeners.go @@ -9,10 +9,11 @@ import ( func Listeners() *schema.Table { return &schema.Table{ - Name: "aws_elbv2_listeners", - Description: `https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_Listener.html`, - Resolver: fetchElbv2Listeners, - Multiplex: client.ServiceAccountRegionMultiplexer("elasticloadbalancing"), + Name: "aws_elbv2_listeners", + Description: `https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_Listener.html`, + Resolver: fetchElbv2Listeners, + PreResourceResolver: getLoadBalancerListener, + Multiplex: client.ServiceAccountRegionMultiplexer("elasticloadbalancing"), Columns: []schema.Column{ { Name: "account_id", @@ -32,55 +33,20 @@ func Listeners() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveElbv2listenerTags, - }, { Name: "oh_resource_type", Type: schema.TypeString, Resolver: client.StaticValueResolver("AWS::ElasticLoadBalancingV2::Listener"), }, { - Name: "alpn_policy", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("AlpnPolicy"), - }, - { - Name: "certificates", + Name: "listener", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Certificates"), + Resolver: schema.PathResolver("Listener"), }, { - Name: "default_actions", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("DefaultActions"), - }, - { - Name: "load_balancer_arn", - Type: schema.TypeString, - Resolver: schema.PathResolver("LoadBalancerArn"), - }, - { - Name: "mutual_authentication", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("MutualAuthentication"), - }, - { - Name: "port", - Type: schema.TypeInt, - Resolver: schema.PathResolver("Port"), - }, - { - Name: "protocol", - Type: schema.TypeString, - Resolver: schema.PathResolver("Protocol"), - }, - { - Name: "ssl_policy", - Type: schema.TypeString, - Resolver: schema.PathResolver("SslPolicy"), + Resolver: schema.PathResolver("Tags"), }, }, diff --git a/resources/services/elbv2/listeners_fetch.go b/resources/services/elbv2/listeners_fetch.go index 607edbd0..c89fda55 100644 --- a/resources/services/elbv2/listeners_fetch.go +++ b/resources/services/elbv2/listeners_fetch.go @@ -3,15 +3,16 @@ package elbv2 import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" elbv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2" - "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchElbv2Listeners(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - lb := parent.Item.(types.LoadBalancer) + lb := parent.Item.(*ohaws.LoadBalancerV2) config := elbv2.DescribeListenersInput{ LoadBalancerArn: lb.LoadBalancerArn, } @@ -25,7 +26,13 @@ func fetchElbv2Listeners(ctx context.Context, meta schema.ClientMeta, parent *sc } return err } - res <- response.Listeners + listeners := make([]*ohaws.LoadBalancerV2Listener, len(response.Listeners)) + for idx := range response.Listeners { + listeners[idx] = &ohaws.LoadBalancerV2Listener{ + Listener: response.Listeners[idx], + } + } + res <- listeners if aws.ToString(response.NextMarker) == "" { break } @@ -33,10 +40,11 @@ func fetchElbv2Listeners(ctx context.Context, meta schema.ClientMeta, parent *sc } return nil } -func resolveElbv2listenerTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + +func getLoadBalancerListener(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { region := meta.(*client.Client).Region svc := meta.(*client.Client).Services().Elasticloadbalancingv2 - listener := resource.Item.(types.Listener) + listener := resource.Item.(*ohaws.LoadBalancerV2Listener) tagsOutput, err := svc.DescribeTags(ctx, &elbv2.DescribeTagsInput{ ResourceArns: []string{ *listener.ListenerArn, @@ -50,20 +58,21 @@ func resolveElbv2listenerTags(ctx context.Context, meta schema.ClientMeta, resou if len(tagsOutput.TagDescriptions) == 0 { return nil } - tags := make(map[string]*string) + listener.Tags = make(map[string]string, len(tagsOutput.TagDescriptions)) for _, td := range tagsOutput.TagDescriptions { for _, s := range td.Tags { - tags[*s.Key] = s.Value + listener.Tags[aws.ToString(s.Key)] = aws.ToString(s.Value) } } - return resource.Set(c.Name, tags) + return nil } + func fetchElbv2ListenerCertificates(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { c := meta.(*client.Client) region := c.Region svc := c.Services().Elasticloadbalancingv2 - listener := parent.Item.(types.Listener) + listener := parent.Item.(*ohaws.LoadBalancerV2Listener) config := elbv2.DescribeListenerCertificatesInput{ListenerArn: listener.ListenerArn} for { response, err := svc.DescribeListenerCertificates(ctx, &config, func(options *elbv2.Options) { diff --git a/resources/services/elbv2/load_balancer_attributes.go b/resources/services/elbv2/load_balancer_attributes.go deleted file mode 100644 index 170398d5..00000000 --- a/resources/services/elbv2/load_balancer_attributes.go +++ /dev/null @@ -1,44 +0,0 @@ -// Code generated by codegen; DO NOT EDIT. - -package elbv2 - -import ( - "github.com/OpsHelmInc/cloudquery/client" - "github.com/cloudquery/plugin-sdk/schema" -) - -func LoadBalancerAttributes() *schema.Table { - return &schema.Table{ - Name: "aws_elbv2_load_balancer_attributes", - Description: `https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_LoadBalancerAttribute.html`, - Resolver: fetchElbv2LoadBalancerAttributes, - Multiplex: client.ServiceAccountRegionMultiplexer("elasticloadbalancing"), - Columns: []schema.Column{ - { - Name: "account_id", - Type: schema.TypeString, - Resolver: client.ResolveAWSAccount, - }, - { - Name: "region", - Type: schema.TypeString, - Resolver: client.ResolveAWSRegion, - }, - { - Name: "load_balancer_arn", - Type: schema.TypeString, - Resolver: schema.ParentColumnResolver("arn"), - }, - { - Name: "key", - Type: schema.TypeString, - Resolver: schema.PathResolver("Key"), - }, - { - Name: "value", - Type: schema.TypeString, - Resolver: schema.PathResolver("Value"), - }, - }, - } -} diff --git a/resources/services/elbv2/load_balancers.go b/resources/services/elbv2/load_balancers.go index 4c6e1bd5..cee335fc 100644 --- a/resources/services/elbv2/load_balancers.go +++ b/resources/services/elbv2/load_balancers.go @@ -9,10 +9,11 @@ import ( func LoadBalancers() *schema.Table { return &schema.Table{ - Name: "aws_elbv2_load_balancers", - Description: `https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_LoadBalancer.html`, - Resolver: fetchElbv2LoadBalancers, - Multiplex: client.ServiceAccountRegionMultiplexer("elasticloadbalancing"), + Name: "aws_elbv2_load_balancers", + Description: `https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_LoadBalancer.html`, + Resolver: fetchElbv2LoadBalancers, + PreResourceResolver: getLoadBalancer, + Multiplex: client.ServiceAccountRegionMultiplexer("elasticloadbalancing"), Columns: []schema.Column{ { Name: "account_id", @@ -30,11 +31,6 @@ func LoadBalancers() *schema.Table { Resolver: resolveElbv2loadBalancerWebACLArn, IgnoreInTests: true, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveElbv2loadBalancerTags, - }, { Name: "arn", Type: schema.TypeString, @@ -49,80 +45,24 @@ func LoadBalancers() *schema.Table { Resolver: client.StaticValueResolver("AWS::ElasticLoadBalancingV2::LoadBalancer"), }, { - Name: "availability_zones", + Name: "load_balancer", Type: schema.TypeJSON, - Resolver: schema.PathResolver("AvailabilityZones"), - }, - { - Name: "canonical_hosted_zone_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("CanonicalHostedZoneId"), - }, - { - Name: "created_time", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreatedTime"), - }, - { - Name: "customer_owned_ipv4_pool", - Type: schema.TypeString, - Resolver: schema.PathResolver("CustomerOwnedIpv4Pool"), - }, - { - Name: "dns_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("DNSName"), - }, - { - Name: "enable_prefix_for_ipv6_source_nat", - Type: schema.TypeString, - Resolver: schema.PathResolver("EnablePrefixForIpv6SourceNat"), - }, - { - Name: "enforce_security_group_inbound_rules_on_private_link_traffic", - Type: schema.TypeString, - Resolver: schema.PathResolver("EnforceSecurityGroupInboundRulesOnPrivateLinkTraffic"), - }, - { - Name: "ip_address_type", - Type: schema.TypeString, - Resolver: schema.PathResolver("IpAddressType"), + Resolver: schema.PathResolver("LoadBalancer"), }, { - Name: "load_balancer_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("LoadBalancerName"), - }, - { - Name: "scheme", - Type: schema.TypeString, - Resolver: schema.PathResolver("Scheme"), - }, - { - Name: "security_groups", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("SecurityGroups"), - }, - { - Name: "state", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("State"), + Resolver: schema.PathResolver("Tags"), }, { - Name: "type", - Type: schema.TypeString, - Resolver: schema.PathResolver("Type"), - }, - { - Name: "vpc_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("VpcId"), + Name: "unknown_attributes", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("UnknownAttributes"), }, }, Relations: []*schema.Table{ Listeners(), - LoadBalancerAttributes(), }, } } diff --git a/resources/services/elbv2/load_balancers_fetch.go b/resources/services/elbv2/load_balancers_fetch.go index e9f149a4..1d62226f 100644 --- a/resources/services/elbv2/load_balancers_fetch.go +++ b/resources/services/elbv2/load_balancers_fetch.go @@ -3,14 +3,18 @@ package elbv2 import ( "context" "errors" + "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" elbv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2" "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types" "github.com/aws/aws-sdk-go-v2/service/wafv2" wafv2types "github.com/aws/aws-sdk-go-v2/service/wafv2/types" "github.com/cloudquery/plugin-sdk/schema" + "github.com/mitchellh/mapstructure" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchElbv2LoadBalancers(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -22,7 +26,13 @@ func fetchElbv2LoadBalancers(ctx context.Context, meta schema.ClientMeta, parent if err != nil { return err } - res <- response.LoadBalancers + lbs := make([]*ohaws.LoadBalancerV2, len(response.LoadBalancers)) + for idx, lb := range response.LoadBalancers { + lbs[idx] = &ohaws.LoadBalancerV2{ + LoadBalancer: lb, + } + } + res <- lbs if aws.ToString(response.NextMarker) == "" { break } @@ -30,8 +40,9 @@ func fetchElbv2LoadBalancers(ctx context.Context, meta schema.ClientMeta, parent } return nil } + func resolveElbv2loadBalancerWebACLArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - p := resource.Item.(types.LoadBalancer) + p := resource.Item.(*ohaws.LoadBalancerV2) // only application load balancer can have web acl arn if p.Type != types.LoadBalancerTypeEnumApplication { return nil @@ -55,45 +66,45 @@ func resolveElbv2loadBalancerWebACLArn(ctx context.Context, meta schema.ClientMe return resource.Set(c.Name, response.WebACL.ARN) } -func resolveElbv2loadBalancerTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - region := cl.Region - svc := cl.Services().Elasticloadbalancingv2 - loadBalancer := resource.Item.(types.LoadBalancer) - tagsOutput, err := svc.DescribeTags(ctx, &elbv2.DescribeTagsInput{ - ResourceArns: []string{ - *loadBalancer.LoadBalancerArn, - }, - }, func(o *elbv2.Options) { - o.Region = region - }) + +func getLoadBalancer(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + c := meta.(*client.Client) + svc := c.Services().Elasticloadbalancingv2 + lb := resource.Item.(*ohaws.LoadBalancerV2) + + attrsResp, err := svc.DescribeLoadBalancerAttributes(ctx, &elbv2.DescribeLoadBalancerAttributesInput{LoadBalancerArn: lb.LoadBalancerArn}) if err != nil { - if cl.IsNotFoundError(err) { - return nil - } - return err - } - if len(tagsOutput.TagDescriptions) == 0 { - return nil + return fmt.Errorf("error describing load balancer attributes: %w", err) } - tags := make(map[string]*string) - for _, td := range tagsOutput.TagDescriptions { - for _, s := range td.Tags { - tags[*s.Key] = s.Value + + attrsMap := make(map[string]string, len(attrsResp.Attributes)) + for i := range attrsResp.Attributes { + if s := aws.ToString(attrsResp.Attributes[i].Key); s != "" { + attrsMap[s] = aws.ToString(attrsResp.Attributes[i].Value) } } - return resource.Set(c.Name, tags) -} + d, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{WeaklyTypedInput: true, Result: &lb}) + if err != nil { + return fmt.Errorf("error instantiating decoder: %w", err) + } + if err := d.Decode(attrsMap); err != nil { + return fmt.Errorf("error decoding load balancer attributes: %w", err) + } -func fetchElbv2LoadBalancerAttributes(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - lb := parent.Item.(types.LoadBalancer) - c := meta.(*client.Client) - svc := c.Services().Elasticloadbalancingv2 - result, err := svc.DescribeLoadBalancerAttributes(ctx, &elbv2.DescribeLoadBalancerAttributesInput{LoadBalancerArn: lb.LoadBalancerArn}) + tagsResp, err := svc.DescribeTags(ctx, &elbv2.DescribeTagsInput{ResourceArns: []string{aws.ToString(lb.LoadBalancerArn)}}) if err != nil { - return err + return fmt.Errorf("error describing load balancer tags: %w", err) + } + + arnStr := aws.ToString(lb.LoadBalancerArn) + for _, t := range tagsResp.TagDescriptions { + if aws.ToString(t.ResourceArn) == arnStr { + lb.Tags = client.TagsToMap(t.Tags) + } } - res <- result.Attributes + + resource.Item = lb + return nil } diff --git a/resources/services/elbv2/target_groups.go b/resources/services/elbv2/target_groups.go index eadc82dd..209a6bae 100644 --- a/resources/services/elbv2/target_groups.go +++ b/resources/services/elbv2/target_groups.go @@ -9,10 +9,11 @@ import ( func TargetGroups() *schema.Table { return &schema.Table{ - Name: "aws_elbv2_target_groups", - Description: `https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_TargetGroup.html`, - Resolver: fetchElbv2TargetGroups, - Multiplex: client.ServiceAccountRegionMultiplexer("elasticloadbalancing"), + Name: "aws_elbv2_target_groups", + Description: `https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_TargetGroup.html`, + Resolver: fetchElbv2TargetGroups, + PreResourceResolver: getTargetGroup, + Multiplex: client.ServiceAccountRegionMultiplexer("elasticloadbalancing"), Columns: []schema.Column{ { Name: "account_id", @@ -24,11 +25,6 @@ func TargetGroups() *schema.Table { Type: schema.TypeString, Resolver: client.ResolveAWSRegion, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveElbv2targetGroupTags, - }, { Name: "arn", Type: schema.TypeString, @@ -43,89 +39,19 @@ func TargetGroups() *schema.Table { Resolver: client.StaticValueResolver("AWS::ElasticLoadBalancingV2::TargetGroup"), }, { - Name: "health_check_enabled", - Type: schema.TypeBool, - Resolver: schema.PathResolver("HealthCheckEnabled"), - }, - { - Name: "health_check_interval_seconds", - Type: schema.TypeInt, - Resolver: schema.PathResolver("HealthCheckIntervalSeconds"), - }, - { - Name: "health_check_path", - Type: schema.TypeString, - Resolver: schema.PathResolver("HealthCheckPath"), - }, - { - Name: "health_check_port", - Type: schema.TypeString, - Resolver: schema.PathResolver("HealthCheckPort"), - }, - { - Name: "health_check_protocol", - Type: schema.TypeString, - Resolver: schema.PathResolver("HealthCheckProtocol"), - }, - { - Name: "health_check_timeout_seconds", - Type: schema.TypeInt, - Resolver: schema.PathResolver("HealthCheckTimeoutSeconds"), - }, - { - Name: "healthy_threshold_count", - Type: schema.TypeInt, - Resolver: schema.PathResolver("HealthyThresholdCount"), - }, - { - Name: "ip_address_type", - Type: schema.TypeString, - Resolver: schema.PathResolver("IpAddressType"), - }, - { - Name: "load_balancer_arns", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("LoadBalancerArns"), - }, - { - Name: "matcher", + Name: "target_group", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Matcher"), - }, - { - Name: "port", - Type: schema.TypeInt, - Resolver: schema.PathResolver("Port"), - }, - { - Name: "protocol", - Type: schema.TypeString, - Resolver: schema.PathResolver("Protocol"), - }, - { - Name: "protocol_version", - Type: schema.TypeString, - Resolver: schema.PathResolver("ProtocolVersion"), - }, - { - Name: "target_group_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("TargetGroupName"), + Resolver: schema.PathResolver("TargetGroup"), }, { - Name: "target_type", - Type: schema.TypeString, - Resolver: schema.PathResolver("TargetType"), - }, - { - Name: "unhealthy_threshold_count", - Type: schema.TypeInt, - Resolver: schema.PathResolver("UnhealthyThresholdCount"), + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), }, { - Name: "vpc_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("VpcId"), + Name: "unknown_attributes", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("UnknownAttributes"), }, }, diff --git a/resources/services/elbv2/target_groups_fetch.go b/resources/services/elbv2/target_groups_fetch.go index 8599bdca..40aedeb1 100644 --- a/resources/services/elbv2/target_groups_fetch.go +++ b/resources/services/elbv2/target_groups_fetch.go @@ -2,12 +2,15 @@ package elbv2 import ( "context" + "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" elbv2 "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2" - "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types" "github.com/cloudquery/plugin-sdk/schema" + "github.com/mitchellh/mapstructure" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchElbv2TargetGroups(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -19,7 +22,13 @@ func fetchElbv2TargetGroups(ctx context.Context, meta schema.ClientMeta, parent if err != nil { return err } - res <- response.TargetGroups + tgs := make([]*ohaws.TargetGroup, len(response.TargetGroups)) + for idx := range response.TargetGroups { + tgs[idx] = &ohaws.TargetGroup{ + TargetGroup: response.TargetGroups[idx], + } + } + res <- tgs if aws.ToString(response.NextMarker) == "" { break } @@ -27,11 +36,35 @@ func fetchElbv2TargetGroups(ctx context.Context, meta schema.ClientMeta, parent } return nil } -func resolveElbv2targetGroupTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + +func getTargetGroup(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { cl := meta.(*client.Client) region := meta.(*client.Client).Region svc := meta.(*client.Client).Services().Elasticloadbalancingv2 - targetGroup := resource.Item.(types.TargetGroup) + targetGroup := resource.Item.(*ohaws.TargetGroup) + + attrsResp, err := svc.DescribeTargetGroupAttributes(ctx, &elbv2.DescribeTargetGroupAttributesInput{ + TargetGroupArn: targetGroup.TargetGroupArn, + }) + if err != nil { + return fmt.Errorf("error target group attributes: %w", err) + } + + attrsMap := make(map[string]string, len(attrsResp.Attributes)) + for i := range attrsResp.Attributes { + if s := aws.ToString(attrsResp.Attributes[i].Key); s != "" { + attrsMap[s] = aws.ToString(attrsResp.Attributes[i].Value) + } + } + + d, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{WeaklyTypedInput: true, Result: &targetGroup}) + if err != nil { + return fmt.Errorf("error instantiating decoder: %w", err) + } + if err := d.Decode(attrsMap); err != nil { + return fmt.Errorf("error decoding target group attributes: %w", err) + } + tagsOutput, err := svc.DescribeTags(ctx, &elbv2.DescribeTagsInput{ ResourceArns: []string{ *targetGroup.TargetGroupArn, @@ -48,17 +81,21 @@ func resolveElbv2targetGroupTags(ctx context.Context, meta schema.ClientMeta, re if len(tagsOutput.TagDescriptions) == 0 { return nil } - tags := make(map[string]*string) - for _, s := range tagsOutput.TagDescriptions[0].Tags { - tags[*s.Key] = s.Value + + targetGroup.Tags = make(map[string]string, len(tagsOutput.TagDescriptions)) + for _, td := range tagsOutput.TagDescriptions { + for _, s := range td.Tags { + targetGroup.Tags[aws.ToString(s.Key)] = aws.ToString(s.Value) + } } - return resource.Set(c.Name, tags) + + return nil } func fetchElbv2TargetGroupTargetHealthDescriptions(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { cl := meta.(*client.Client) svc := cl.Services().Elasticloadbalancingv2 - tg := parent.Item.(types.TargetGroup) + tg := parent.Item.(*ohaws.TargetGroup) response, err := svc.DescribeTargetHealth(ctx, &elbv2.DescribeTargetHealthInput{ TargetGroupArn: tg.TargetGroupArn, }) diff --git a/resources/services/elbv2/target_groups_mock_test.go b/resources/services/elbv2/target_groups_mock_test.go index b51a18a7..6dc9f80c 100644 --- a/resources/services/elbv2/target_groups_mock_test.go +++ b/resources/services/elbv2/target_groups_mock_test.go @@ -3,12 +3,13 @@ package elbv2 import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2" elbv2Types "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildElbv2TargetGroups(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -31,6 +32,13 @@ func buildElbv2TargetGroups(t *testing.T, ctrl *gomock.Controller) client.Servic } m.EXPECT().DescribeTags(gomock.Any(), gomock.Any(), gomock.Any()).Return(&tags, nil) + attrs := elasticloadbalancingv2.DescribeTargetGroupAttributesOutput{} + err = faker.FakeObject(&attrs) + if err != nil { + t.Fatal(err) + } + m.EXPECT().DescribeTargetGroupAttributes(gomock.Any(), gomock.Any(), gomock.Any()).Return(&attrs, nil) + th := elasticloadbalancingv2.DescribeTargetHealthOutput{} err = faker.FakeObject(&th) if err != nil { diff --git a/resources/services/eventbridge/api_destinations.go b/resources/services/eventbridge/api_destinations.go index 82427215..c589a6e9 100644 --- a/resources/services/eventbridge/api_destinations.go +++ b/resources/services/eventbridge/api_destinations.go @@ -9,10 +9,11 @@ import ( func ApiDestinations() *schema.Table { return &schema.Table{ - Name: "aws_eventbridge_api_destinations", - Description: `https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_ApiDestination.html`, - Resolver: fetchEventbridgeApiDestinations, - Multiplex: client.ServiceAccountRegionMultiplexer("events"), + Name: "aws_eventbridge_api_destinations", + Description: `https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_ApiDestination.html`, + Resolver: fetchEventbridgeApiDestinations, + PreResourceResolver: getEventBridgeAPIDestination, + Multiplex: client.ServiceAccountRegionMultiplexer("events"), Columns: []schema.Column{ { Name: "account_id", @@ -47,6 +48,11 @@ func ApiDestinations() *schema.Table { Type: schema.TypeTimestamp, Resolver: schema.PathResolver("CreationTime"), }, + { + Name: "description", + Type: schema.TypeString, + Resolver: schema.PathResolver("Description"), + }, { Name: "http_method", Type: schema.TypeString, @@ -72,6 +78,16 @@ func ApiDestinations() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("Name"), }, + { + Name: "result_metadata", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("ResultMetadata"), + }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/eventbridge/api_destinations_fetch.go b/resources/services/eventbridge/api_destinations_fetch.go index 1d7f4c04..130fb4dd 100644 --- a/resources/services/eventbridge/api_destinations_fetch.go +++ b/resources/services/eventbridge/api_destinations_fetch.go @@ -1,17 +1,18 @@ -// Code generated by codegen; DO NOT EDIT. - package eventbridge import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/eventbridge" + "github.com/aws/aws-sdk-go-v2/service/eventbridge/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) -func fetchEventbridgeApiDestinations(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- interface{}) error { +func fetchEventbridgeApiDestinations(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { var input eventbridge.ListApiDestinationsInput c := meta.(*client.Client) svc := c.Services().Eventbridge @@ -28,3 +29,21 @@ func fetchEventbridgeApiDestinations(ctx context.Context, meta schema.ClientMeta } return nil } + +func getEventBridgeAPIDestination(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + c := meta.(*client.Client) + svc := c.Services().Eventbridge + d := resource.Item.(types.ApiDestination) + + resp, err := svc.DescribeApiDestination(ctx, &eventbridge.DescribeApiDestinationInput{Name: d.Name}) + if err != nil { + return err + } + + dest := &ohaws.EventBridgeAPIDestination{ + DescribeApiDestinationOutput: resp, + } + resource.Item = dest + + return nil +} diff --git a/resources/services/eventbridge/api_destinations_mock_test.go b/resources/services/eventbridge/api_destinations_mock_test.go deleted file mode 100644 index 7f76d40e..00000000 --- a/resources/services/eventbridge/api_destinations_mock_test.go +++ /dev/null @@ -1,41 +0,0 @@ -// Code generated by codegen; DO NOT EDIT. - -package eventbridge - -import ( - "testing" - - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" - "github.com/aws/aws-sdk-go-v2/service/eventbridge" - "github.com/aws/aws-sdk-go-v2/service/eventbridge/types" - "github.com/cloudquery/plugin-sdk/faker" - "github.com/golang/mock/gomock" -) - -func buildEventbridgeApiDestinationsMock(t *testing.T, ctrl *gomock.Controller) client.Services { - m := mocks.NewMockEventbridgeClient(ctrl) - object := types.ApiDestination{} - err := faker.FakeObject(&object) - if err != nil { - t.Fatal(err) - } - - m.EXPECT().ListApiDestinations(gomock.Any(), gomock.Any(), gomock.Any()).Return( - &eventbridge.ListApiDestinationsOutput{ - ApiDestinations: []types.ApiDestination{object}, - }, nil) - - tagsOutput := eventbridge.ListTagsForResourceOutput{} - err = faker.FakeObject(&tagsOutput) - if err != nil { - t.Fatal(err) - } - m.EXPECT().ListTagsForResource(gomock.Any(), gomock.Any()).Return(&tagsOutput, nil).AnyTimes() - return client.Services{ - Eventbridge: m, - } -} -func TestEventbridgeApiDestinations(t *testing.T) { - client.AwsMockTestHelper(t, ApiDestinations(), buildEventbridgeApiDestinationsMock, client.TestOptions{}) -} diff --git a/resources/services/eventbridge/event_bus_rules.go b/resources/services/eventbridge/event_bus_rules.go index 36db2fe1..2dc8df78 100644 --- a/resources/services/eventbridge/event_bus_rules.go +++ b/resources/services/eventbridge/event_bus_rules.go @@ -9,10 +9,11 @@ import ( func EventBusRules() *schema.Table { return &schema.Table{ - Name: "aws_eventbridge_event_bus_rules", - Description: `https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Rule.html`, - Resolver: fetchEventbridgeEventBusRules, - Multiplex: client.ServiceAccountRegionMultiplexer("events"), + Name: "aws_eventbridge_event_bus_rules", + Description: `https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_Rule.html`, + Resolver: fetchEventbridgeEventBusRules, + PreResourceResolver: getEventBusRule, + Multiplex: client.ServiceAccountRegionMultiplexer("events"), Columns: []schema.Column{ { Name: "account_id", @@ -29,16 +30,16 @@ func EventBusRules() *schema.Table { Type: schema.TypeString, Resolver: schema.ParentColumnResolver("arn"), }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveEventbridgeEventBusRuleTags, - }, { Name: "arn", Type: schema.TypeString, Resolver: schema.PathResolver("Arn"), }, + { + Name: "created_by", + Type: schema.TypeString, + Resolver: schema.PathResolver("CreatedBy"), + }, { Name: "description", Type: schema.TypeString, @@ -79,6 +80,16 @@ func EventBusRules() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("State"), }, + { + Name: "result_metadata", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("ResultMetadata"), + }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/eventbridge/event_buses.go b/resources/services/eventbridge/event_buses.go index 7b78476b..36279b1a 100644 --- a/resources/services/eventbridge/event_buses.go +++ b/resources/services/eventbridge/event_buses.go @@ -9,10 +9,11 @@ import ( func EventBuses() *schema.Table { return &schema.Table{ - Name: "aws_eventbridge_event_buses", - Description: `https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_EventBus.html`, - Resolver: fetchEventbridgeEventBuses, - Multiplex: client.ServiceAccountRegionMultiplexer("events"), + Name: "aws_eventbridge_event_buses", + Description: `https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_EventBus.html`, + Resolver: fetchEventbridgeEventBuses, + PreResourceResolver: getEventbridgeEventBus, + Multiplex: client.ServiceAccountRegionMultiplexer("events"), Columns: []schema.Column{ { Name: "account_id", @@ -24,11 +25,6 @@ func EventBuses() *schema.Table { Type: schema.TypeString, Resolver: client.ResolveAWSRegion, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveEventbridgeEventBusTags, - }, { Name: "arn", Type: schema.TypeString, @@ -41,11 +37,21 @@ func EventBuses() *schema.Table { Type: schema.TypeTimestamp, Resolver: schema.PathResolver("CreationTime"), }, + { + Name: "dead_letter_config", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("DeadLetterConfig"), + }, { Name: "description", Type: schema.TypeString, Resolver: schema.PathResolver("Description"), }, + { + Name: "kms_key_identifier", + Type: schema.TypeString, + Resolver: schema.PathResolver("KmsKeyIdentifier"), + }, { Name: "last_modified_time", Type: schema.TypeTimestamp, @@ -61,6 +67,16 @@ func EventBuses() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("Policy"), }, + { + Name: "result_metadata", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("ResultMetadata"), + }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, Relations: []*schema.Table{ diff --git a/resources/services/eventbridge/event_buses_fetch.go b/resources/services/eventbridge/event_buses_fetch.go index 0c77962c..9e314c52 100644 --- a/resources/services/eventbridge/event_buses_fetch.go +++ b/resources/services/eventbridge/event_buses_fetch.go @@ -2,12 +2,15 @@ package eventbridge import ( "context" + "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/eventbridge" "github.com/aws/aws-sdk-go-v2/service/eventbridge/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchEventbridgeEventBuses(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -27,12 +30,34 @@ func fetchEventbridgeEventBuses(ctx context.Context, meta schema.ClientMeta, par } return nil } -func resolveEventbridgeEventBusTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - eventBusArn := resource.Item.(types.EventBus).Arn - return resolveEventBridgeTags(ctx, meta, resource, c, *eventBusArn) + +func getEventbridgeEventBus(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + c := meta.(*client.Client) + svc := c.Services().Eventbridge + eb := resource.Item.(types.EventBus) + + resp, err := svc.DescribeEventBus(ctx, &eventbridge.DescribeEventBusInput{Name: eb.Name}) + if err != nil { + return fmt.Errorf("error describing event bus: %w", err) + } + + eventBus := &ohaws.EventBus{ + DescribeEventBusOutput: resp, + } + + tags, err := getEventBridgeTags(ctx, meta, *eventBus.Arn) + if err != nil { + return err + } + + eventBus.Tags = tags + resource.Item = eventBus + + return nil } + func fetchEventbridgeEventBusRules(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - p := parent.Item.(types.EventBus) + p := parent.Item.(*ohaws.EventBus) input := eventbridge.ListRulesInput{ EventBusName: p.Arn, } @@ -51,12 +76,36 @@ func fetchEventbridgeEventBusRules(ctx context.Context, meta schema.ClientMeta, } return nil } -func resolveEventbridgeEventBusRuleTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - eventBusArn := resource.Item.(types.Rule).Arn - return resolveEventBridgeTags(ctx, meta, resource, c, *eventBusArn) + +func getEventBusRule(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + c := meta.(*client.Client) + svc := c.Services().Eventbridge + r := resource.Item.(types.Rule) + + resp, err := svc.DescribeRule(ctx, &eventbridge.DescribeRuleInput{ + Name: r.Name, + EventBusName: r.EventBusName, + }) + if err != nil { + return fmt.Errorf("error describing event bridge rule: %w", err) + } + + rule := &ohaws.EventBridgeRule{ + DescribeRuleOutput: resp, + } + + tags, err := getEventBridgeTags(ctx, meta, *rule.Arn) + if err != nil { + return err + } + rule.Tags = tags + + resource.Item = rule + + return nil } -func resolveEventBridgeTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column, resourceArn string) error { +func getEventBridgeTags(ctx context.Context, meta schema.ClientMeta, resourceArn string) ([]types.Tag, error) { cl := meta.(*client.Client) svc := cl.Services().Eventbridge input := eventbridge.ListTagsForResourceInput{ @@ -64,7 +113,7 @@ func resolveEventBridgeTags(ctx context.Context, meta schema.ClientMeta, resourc } output, err := svc.ListTagsForResource(ctx, &input) if err != nil { - return err + return nil, err } - return resource.Set(c.Name, client.TagsToMap(output.Tags)) + return output.Tags, nil } diff --git a/resources/services/eventbridge/event_buses_mock_test.go b/resources/services/eventbridge/event_buses_mock_test.go index 5b3f5f05..f115744a 100644 --- a/resources/services/eventbridge/event_buses_mock_test.go +++ b/resources/services/eventbridge/event_buses_mock_test.go @@ -3,12 +3,14 @@ package eventbridge import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/service/eventbridge" "github.com/aws/aws-sdk-go-v2/service/eventbridge/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + "github.com/stretchr/testify/require" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildEventBridgeEventBusesMock(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -19,12 +21,18 @@ func buildEventBridgeEventBusesMock(t *testing.T, ctrl *gomock.Controller) clien t.Fatal(err) } + busDescription := eventbridge.DescribeEventBusOutput{} + require.NoError(t, faker.FakeObject(&busDescription)) + rule := types.Rule{} err = faker.FakeObject(&rule) if err != nil { t.Fatal(err) } + ruleDescription := eventbridge.DescribeRuleOutput{} + require.NoError(t, faker.FakeObject(&ruleDescription)) + tags := eventbridge.ListTagsForResourceOutput{} err = faker.FakeObject(&tags) if err != nil { @@ -35,10 +43,15 @@ func buildEventBridgeEventBusesMock(t *testing.T, ctrl *gomock.Controller) clien &eventbridge.ListEventBusesOutput{ EventBuses: []types.EventBus{bus}, }, nil) + + m.EXPECT().DescribeEventBus(gomock.Any(), &eventbridge.DescribeEventBusInput{Name: bus.Name}).Return(&busDescription, nil) m.EXPECT().ListRules(gomock.Any(), gomock.Any(), gomock.Any()).Return( &eventbridge.ListRulesOutput{ Rules: []types.Rule{rule}, }, nil) + m.EXPECT().DescribeRule(gomock.Any(), &eventbridge.DescribeRuleInput{Name: rule.Name, EventBusName: busDescription.Name}).Return(&ruleDescription, nil) + + // bus tags m.EXPECT().ListTagsForResource(gomock.Any(), gomock.Any(), gomock.Any()).MinTimes(2).Return( &tags, nil) diff --git a/resources/services/firehose/delivery_streams.go b/resources/services/firehose/delivery_streams.go index 870d3212..4af4878b 100644 --- a/resources/services/firehose/delivery_streams.go +++ b/resources/services/firehose/delivery_streams.go @@ -25,11 +25,6 @@ func DeliveryStreams() *schema.Table { Type: schema.TypeString, Resolver: client.ResolveAWSRegion, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveFirehoseDeliveryStreamTags, - }, { Name: "arn", Type: schema.TypeString, @@ -39,59 +34,14 @@ func DeliveryStreams() *schema.Table { }, }, { - Name: "delivery_stream_name", - Type: schema.TypeString, - Resolver: schema.PathResolver("DeliveryStreamName"), - }, - { - Name: "delivery_stream_status", - Type: schema.TypeString, - Resolver: schema.PathResolver("DeliveryStreamStatus"), - }, - { - Name: "delivery_stream_type", - Type: schema.TypeString, - Resolver: schema.PathResolver("DeliveryStreamType"), - }, - { - Name: "destinations", + Name: "delivery_stream_description", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Destinations"), - }, - { - Name: "has_more_destinations", - Type: schema.TypeBool, - Resolver: schema.PathResolver("HasMoreDestinations"), + Resolver: schema.PathResolver("DeliveryStreamDescription"), }, { - Name: "version_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("VersionId"), - }, - { - Name: "create_timestamp", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreateTimestamp"), - }, - { - Name: "delivery_stream_encryption_configuration", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("DeliveryStreamEncryptionConfiguration"), - }, - { - Name: "failure_description", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("FailureDescription"), - }, - { - Name: "last_update_timestamp", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("LastUpdateTimestamp"), - }, - { - Name: "source", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Source"), + Resolver: client.ResolveTags, }, }, } diff --git a/resources/services/firehose/delivery_streams_fetch.go b/resources/services/firehose/delivery_streams_fetch.go index 356775ad..8372ea5f 100644 --- a/resources/services/firehose/delivery_streams_fetch.go +++ b/resources/services/firehose/delivery_streams_fetch.go @@ -3,11 +3,14 @@ package firehose import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/firehose" "github.com/aws/aws-sdk-go-v2/service/firehose/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchFirehoseDeliveryStreams(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -38,22 +41,29 @@ func getDeliveryStream(ctx context.Context, meta schema.ClientMeta, resource *sc if err != nil { return err } - resource.Item = streamSummary.DeliveryStreamDescription + + tags, err := getFirehoseDeliveryStreamTags(ctx, svc, *streamSummary.DeliveryStreamDescription.DeliveryStreamName) + if err != nil { + return err + } + + resource.Item = &ohaws.FirehoseStream{ + DeliveryStreamDescription: *streamSummary.DeliveryStreamDescription, + Tags: tags, + } + return nil } -func resolveFirehoseDeliveryStreamTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - svc := cl.Services().Firehose - summary := resource.Item.(*types.DeliveryStreamDescription) +func getFirehoseDeliveryStreamTags(ctx context.Context, svc services.FirehoseClient, streamName string) ([]types.Tag, error) { input := firehose.ListTagsForDeliveryStreamInput{ - DeliveryStreamName: summary.DeliveryStreamName, + DeliveryStreamName: aws.String(streamName), } var tags []types.Tag for { output, err := svc.ListTagsForDeliveryStream(ctx, &input) if err != nil { - return err + return nil, err } tags = append(tags, output.Tags...) if !aws.ToBool(output.HasMoreTags) { @@ -61,5 +71,5 @@ func resolveFirehoseDeliveryStreamTags(ctx context.Context, meta schema.ClientMe } input.ExclusiveStartTagKey = aws.String(*output.Tags[len(output.Tags)-1].Key) } - return resource.Set(c.Name, client.TagsToMap(tags)) + return tags, nil } diff --git a/resources/services/glue/database_tables.go b/resources/services/glue/database_tables.go index dc9a0c39..b8d1797e 100644 --- a/resources/services/glue/database_tables.go +++ b/resources/services/glue/database_tables.go @@ -9,9 +9,10 @@ import ( func DatabaseTables() *schema.Table { return &schema.Table{ - Name: "aws_glue_database_tables", - Resolver: fetchGlueDatabaseTables, - Multiplex: client.ServiceAccountRegionMultiplexer("glue"), + Name: "aws_glue_database_tables", + Resolver: fetchGlueDatabaseTables, + PreResourceResolver: getGlueTable, + Multiplex: client.ServiceAccountRegionMultiplexer("glue"), Columns: []schema.Column{ { Name: "account_id", @@ -154,6 +155,11 @@ func DatabaseTables() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("ViewOriginalText"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), + }, }, Relations: []*schema.Table{ diff --git a/resources/services/glue/databases.go b/resources/services/glue/databases.go index b1797969..e934d935 100644 --- a/resources/services/glue/databases.go +++ b/resources/services/glue/databases.go @@ -9,9 +9,10 @@ import ( func Databases() *schema.Table { return &schema.Table{ - Name: "aws_glue_databases", - Resolver: fetchGlueDatabases, - Multiplex: client.ServiceAccountRegionMultiplexer("glue"), + Name: "aws_glue_databases", + Resolver: fetchGlueDatabases, + PreResourceResolver: getGlueDatabase, + Multiplex: client.ServiceAccountRegionMultiplexer("glue"), Columns: []schema.Column{ { Name: "account_id", @@ -31,11 +32,6 @@ func Databases() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveGlueDatabaseTags, - }, { Name: "name", Type: schema.TypeString, @@ -81,6 +77,11 @@ func Databases() *schema.Table { Type: schema.TypeJSON, Resolver: schema.PathResolver("TargetDatabase"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), + }, }, Relations: []*schema.Table{ diff --git a/resources/services/glue/databases_fetch.go b/resources/services/glue/databases_fetch.go index 2405a662..0501f8f7 100644 --- a/resources/services/glue/databases_fetch.go +++ b/resources/services/glue/databases_fetch.go @@ -4,12 +4,14 @@ import ( "context" "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/glue" "github.com/aws/aws-sdk-go-v2/service/glue/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchGlueDatabases(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -29,25 +31,38 @@ func fetchGlueDatabases(ctx context.Context, meta schema.ClientMeta, parent *sch } return nil } + func resolveGlueDatabaseArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) - return resource.Set(c.Name, databaseARN(cl, aws.ToString(resource.Item.(types.Database).Name))) + return resource.Set(c.Name, databaseARN(cl, aws.ToString(resource.Item.(*ohaws.GlueDatabase).Name))) } -func resolveGlueDatabaseTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + +func getGlueDatabase(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { cl := meta.(*client.Client) svc := cl.Services().Glue + d := resource.Item.(types.Database) input := glue.GetTagsInput{ - ResourceArn: aws.String(databaseARN(cl, aws.ToString(resource.Item.(types.Database).Name))), + ResourceArn: aws.String(databaseARN(cl, aws.ToString(d.Name))), } response, err := svc.GetTags(ctx, &input) if err != nil { + if cl.IsNotFoundError(err) { + return nil + } return err } - return resource.Set(c.Name, response.Tags) + + resource.Item = &ohaws.GlueDatabase{ + Database: d, + Tags: response.Tags, + } + + return nil } + func fetchGlueDatabaseTables(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - r := parent.Item.(types.Database) + r := parent.Item.(*ohaws.GlueDatabase) cl := meta.(*client.Client) svc := cl.Services().Glue input := glue.GetTablesInput{ @@ -66,11 +81,37 @@ func fetchGlueDatabaseTables(ctx context.Context, meta schema.ClientMeta, parent } return nil } + +func getGlueTable(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + cl := meta.(*client.Client) + svc := cl.Services().Glue + t := resource.Item.(types.Table) + + input := glue.GetTagsInput{ + ResourceArn: aws.String(tableARN(cl, aws.ToString(t.DatabaseName), aws.ToString(t.Name))), + } + + response, err := svc.GetTags(ctx, &input) + if err != nil { + if cl.IsNotFoundError(err) { + return nil + } + return err + } + + resource.Item = &ohaws.GlueTable{ + Table: t, + Tags: response.Tags, + } + + return nil +} + func fetchGlueDatabaseTableIndexes(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { cl := meta.(*client.Client) svc := cl.Services().Glue - d := parent.Parent.Item.(types.Database) - t := parent.Item.(types.Table) + d := parent.Parent.Item.(*ohaws.GlueDatabase) + t := parent.Item.(*ohaws.GlueTable) input := glue.GetPartitionIndexesInput{DatabaseName: d.Name, CatalogId: d.CatalogId, TableName: t.Name} for { result, err := svc.GetPartitionIndexes(ctx, &input) @@ -99,3 +140,13 @@ func databaseARN(cl *client.Client, name string) string { Resource: fmt.Sprintf("database/%s", name), }.String() } + +func tableARN(cl *client.Client, dbName, tableName string) string { + return arn.ARN{ + Partition: cl.Partition, + Service: string(client.GlueService), + Region: cl.Region, + AccountID: cl.AccountID, + Resource: fmt.Sprintf("table/%s/%s", dbName, tableName), + }.String() +} diff --git a/resources/services/glue/databases_mock_test.go b/resources/services/glue/databases_mock_test.go index 1c9da218..86608790 100644 --- a/resources/services/glue/databases_mock_test.go +++ b/resources/services/glue/databases_mock_test.go @@ -3,12 +3,13 @@ package glue import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/service/glue" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildDatabasesMock(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -29,10 +30,16 @@ func buildDatabasesMock(t *testing.T, ctrl *gomock.Controller) client.Services { i.NextToken = nil m.EXPECT().GetPartitionIndexes(gomock.Any(), gomock.Any()).Return(&i, nil) + // get database tags tags := glue.GetTagsOutput{} require.NoError(t, faker.FakeObject(&tags)) m.EXPECT().GetTags(gomock.Any(), gomock.Any()).Return(&tags, nil) + // get table tags + tableTags := glue.GetTagsOutput{} + require.NoError(t, faker.FakeObject(&tableTags)) + m.EXPECT().GetTags(gomock.Any(), gomock.Any()).Return(&tableTags, nil) + return client.Services{ Glue: m, } diff --git a/resources/services/glue/jobs.go b/resources/services/glue/jobs.go index 77a99a58..f86e5a36 100644 --- a/resources/services/glue/jobs.go +++ b/resources/services/glue/jobs.go @@ -9,9 +9,10 @@ import ( func Jobs() *schema.Table { return &schema.Table{ - Name: "aws_glue_jobs", - Resolver: fetchGlueJobs, - Multiplex: client.ServiceAccountRegionMultiplexer("glue"), + Name: "aws_glue_jobs", + Resolver: fetchGlueJobs, + PreResourceResolver: getGlueJob, + Multiplex: client.ServiceAccountRegionMultiplexer("glue"), Columns: []schema.Column{ { Name: "account_id", @@ -31,11 +32,6 @@ func Jobs() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveGlueJobTags, - }, { Name: "allocated_capacity", Type: schema.TypeInt, @@ -171,6 +167,11 @@ func Jobs() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("WorkerType"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), + }, }, Relations: []*schema.Table{ diff --git a/resources/services/glue/jobs_fetch.go b/resources/services/glue/jobs_fetch.go index 3c1b9db2..0ba42032 100644 --- a/resources/services/glue/jobs_fetch.go +++ b/resources/services/glue/jobs_fetch.go @@ -4,12 +4,14 @@ import ( "context" "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/glue" "github.com/aws/aws-sdk-go-v2/service/glue/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchGlueJobs(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -29,15 +31,18 @@ func fetchGlueJobs(ctx context.Context, meta schema.ClientMeta, parent *schema.R } return nil } + func resolveGlueJobArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) - return resource.Set(c.Name, jobARN(cl, aws.ToString(resource.Item.(types.Job).Name))) + return resource.Set(c.Name, jobARN(cl, aws.ToString(resource.Item.(*ohaws.GlueJob).Name))) } -func resolveGlueJobTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + +func getGlueJob(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { cl := meta.(*client.Client) svc := cl.Services().Glue + j := resource.Item.(types.Job) result, err := svc.GetTags(ctx, &glue.GetTagsInput{ - ResourceArn: aws.String(jobARN(cl, aws.ToString(resource.Item.(types.Job).Name))), + ResourceArn: aws.String(jobARN(cl, aws.ToString(j.Name))), }) if err != nil { if cl.IsNotFoundError(err) { @@ -45,13 +50,20 @@ func resolveGlueJobTags(ctx context.Context, meta schema.ClientMeta, resource *s } return err } - return resource.Set(c.Name, result.Tags) + + resource.Item = &ohaws.GlueJob{ + Job: j, + Tags: result.Tags, + } + + return nil } + func fetchGlueJobRuns(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { cl := meta.(*client.Client) svc := cl.Services().Glue input := glue.GetJobRunsInput{ - JobName: parent.Item.(types.Job).Name, + JobName: parent.Item.(*ohaws.GlueJob).Name, } for { result, err := svc.GetJobRuns(ctx, &input) diff --git a/resources/services/glue/triggers.go b/resources/services/glue/triggers.go index 1a298417..8b116025 100644 --- a/resources/services/glue/triggers.go +++ b/resources/services/glue/triggers.go @@ -32,11 +32,6 @@ func Triggers() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveGlueTriggerTags, - }, { Name: "actions", Type: schema.TypeJSON, @@ -87,6 +82,11 @@ func Triggers() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("WorkflowName"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("Tags"), + }, }, } } diff --git a/resources/services/glue/triggers_fetch.go b/resources/services/glue/triggers_fetch.go index 5806327c..d979d9e4 100644 --- a/resources/services/glue/triggers_fetch.go +++ b/resources/services/glue/triggers_fetch.go @@ -4,12 +4,13 @@ import ( "context" "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/glue" - "github.com/aws/aws-sdk-go-v2/service/glue/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchGlueTriggers(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -40,28 +41,30 @@ func getTrigger(ctx context.Context, meta schema.ClientMeta, resource *schema.Re if err != nil { return err } - resource.Item = *dc.Trigger - return nil -} -func resolveGlueTriggerArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - return resource.Set(c.Name, triggerARN(cl, aws.ToString(resource.Item.(types.Trigger).Name))) -} + input := glue.GetTagsInput{ + ResourceArn: aws.String(triggerARN(c, name)), + } -func resolveGlueTriggerTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - svc := cl.Services().Glue - result, err := svc.GetTags(ctx, &glue.GetTagsInput{ - ResourceArn: aws.String(triggerARN(cl, aws.ToString(resource.Item.(types.Trigger).Name))), - }) + tagsResp, err := svc.GetTags(ctx, &input) if err != nil { - if cl.IsNotFoundError(err) { + if c.IsNotFoundError(err) { return nil } return err } - return resource.Set(c.Name, result.Tags) + + resource.Item = &ohaws.GlueTrigger{ + Trigger: *dc.Trigger, + Tags: tagsResp.Tags, + } + + return nil +} + +func resolveGlueTriggerArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + cl := meta.(*client.Client) + return resource.Set(c.Name, triggerARN(cl, aws.ToString(resource.Item.(*ohaws.GlueTrigger).Name))) } func triggerARN(cl *client.Client, name string) string { diff --git a/resources/services/iam/credential_reports_fetch.go b/resources/services/iam/credential_reports_fetch.go index 9da7b7fd..80a67531 100644 --- a/resources/services/iam/credential_reports_fetch.go +++ b/resources/services/iam/credential_reports_fetch.go @@ -5,13 +5,14 @@ import ( "errors" "time" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/iam/models" "github.com/aws/aws-sdk-go-v2/service/iam" "github.com/aws/smithy-go" "github.com/cloudquery/plugin-sdk/schema" "github.com/gocarina/gocsv" "github.com/thoas/go-funk" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchIamCredentialReports(ctx context.Context, meta schema.ClientMeta, _ *schema.Resource, res chan<- any) error { @@ -22,7 +23,7 @@ func fetchIamCredentialReports(ctx context.Context, meta schema.ClientMeta, _ *s for { reportOutput, err = svc.GetCredentialReport(ctx, &iam.GetCredentialReportInput{}) if err == nil && reportOutput != nil { - var users []*models.CredentialReportEntry + var users []*ohaws.CredentialReportEntry err = gocsv.UnmarshalBytes(reportOutput.Content, &users) if err != nil { return err @@ -60,10 +61,11 @@ func fetchIamCredentialReports(ctx context.Context, meta schema.ClientMeta, _ *s } } } + func timestampPathResolver(path string) schema.ColumnResolver { return func(_ context.Context, meta schema.ClientMeta, r *schema.Resource, c schema.Column) error { t := funk.Get(r.Item, path, funk.WithAllowZero()) - dt := t.(models.DateTime) + dt := t.(ohaws.OptionalTime) return r.Set(c.Name, dt.Time) } } diff --git a/resources/services/iam/credential_reports_mock_test.go b/resources/services/iam/credential_reports_mock_test.go index a69e055c..150bab4e 100644 --- a/resources/services/iam/credential_reports_mock_test.go +++ b/resources/services/iam/credential_reports_mock_test.go @@ -5,12 +5,13 @@ import ( "sync" "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" - "github.com/OpsHelmInc/cloudquery/resources/services/iam/models" "github.com/aws/aws-sdk-go-v2/service/iam" "github.com/golang/mock/gomock" "github.com/rs/zerolog" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" + "github.com/OpsHelmInc/ohaws" ) var exampleReport = `user,arn,user_creation_time,password_enabled,password_last_used,password_last_changed,password_next_rotation,mfa_active,access_key_1_active,access_key_1_last_rotated,access_key_1_last_used_date,access_key_1_last_used_region,access_key_1_last_used_service,access_key_2_active,access_key_2_last_rotated,access_key_2_last_used_date,access_key_2_last_used_region,access_key_2_last_used_service,cert_1_active,cert_1_last_rotated,cert_2_active,cert_2_last_rotated @@ -63,9 +64,9 @@ func testCredentialReportsWithNilValues(t *testing.T) { var wg sync.WaitGroup wg.Add(1) go func() { - got := make([]*models.CredentialReportEntry, 0, 3) + got := make([]*ohaws.CredentialReportEntry, 0, 3) for v := range res { - vals := v.([]*models.CredentialReportEntry) + vals := v.([]*ohaws.CredentialReportEntry) got = append(got, vals...) } if len(got) != 3 { diff --git a/resources/services/iam/models/iam.go b/resources/services/iam/models/iam.go index 4c040ba0..0810110e 100644 --- a/resources/services/iam/models/iam.go +++ b/resources/services/iam/models/iam.go @@ -1,17 +1,9 @@ package models import ( - "time" - "github.com/aws/aws-sdk-go-v2/service/iam" - "github.com/aws/aws-sdk-go-v2/service/iam/types" ) -type AccessKeyWrapper struct { - types.AccessKeyMetadata - LastRotated time.Time -} - type Account struct { Users int32 `json:"users,omitempty"` UsersQuota int32 `json:"users_quota,omitempty"` @@ -42,49 +34,6 @@ type Account struct { Aliases []string `json:"aliases,omitempty"` } -type DateTime struct { - *time.Time -} - -func (d *DateTime) UnmarshalCSV(val string) (err error) { - switch val { - case "N/A", "not_supported", "no_information": - d.Time = nil - return nil - } - t, err := time.Parse(time.RFC3339, val) - if err != nil { - return err - } - d.Time = &t - return nil -} - -type CredentialReportEntry struct { - User string `csv:"user"` - Arn string `csv:"arn"` - UserCreationTime DateTime `csv:"user_creation_time"` - PasswordStatus string `csv:"password_enabled"` - PasswordLastChanged DateTime `csv:"password_last_changed"` - PasswordNextRotation DateTime `csv:"password_next_rotation"` - MfaActive bool `csv:"mfa_active"` - AccessKey1Active bool `csv:"access_key_1_active"` - AccessKey2Active bool `csv:"access_key_2_active"` - AccessKey1LastRotated DateTime `csv:"access_key_1_last_rotated"` - AccessKey2LastRotated DateTime `csv:"access_key_2_last_rotated"` - Cert1Active bool `csv:"cert_1_active"` - Cert2Active bool `csv:"cert_2_active"` - Cert1LastRotated DateTime `csv:"cert_1_last_rotated"` - Cert2LastRotated DateTime `csv:"cert_2_last_rotated"` - AccessKey1LastUsedDate DateTime `csv:"access_key_1_last_used_date"` - AccessKey1LastUsedRegion string `csv:"access_key_1_last_used_region"` - AccessKey1LastUsedService string `csv:"access_key_1_last_used_service"` - AccessKey2LastUsedDate DateTime `csv:"access_key_2_last_used_date"` - AccessKey2LastUsedRegion string `csv:"access_key_2_last_used_region"` - AccessKey2LastUsedService string `csv:"access_key_2_last_used_service"` - PasswordLastUsed DateTime `csv:"password_last_used"` -} - type IamOpenIdIdentityProviderWrapper struct { *iam.GetOpenIDConnectProviderOutput Arn string @@ -94,8 +43,3 @@ type IAMSAMLIdentityProviderWrapper struct { *iam.GetSAMLProviderOutput Arn string } - -type PasswordPolicyWrapper struct { - types.PasswordPolicy - PolicyExists bool -} diff --git a/resources/services/iam/password_policies.go b/resources/services/iam/password_policies.go index 70ce57ad..4ceb8c95 100644 --- a/resources/services/iam/password_policies.go +++ b/resources/services/iam/password_policies.go @@ -32,54 +32,9 @@ func PasswordPolicies() *schema.Table { Resolver: client.StaticValueResolver("AWS::IAM::AccountPasswordPolicy"), }, { - Name: "allow_users_to_change_password", - Type: schema.TypeBool, - Resolver: schema.PathResolver("AllowUsersToChangePassword"), - }, - { - Name: "expire_passwords", - Type: schema.TypeBool, - Resolver: schema.PathResolver("ExpirePasswords"), - }, - { - Name: "hard_expiry", - Type: schema.TypeBool, - Resolver: schema.PathResolver("HardExpiry"), - }, - { - Name: "max_password_age", - Type: schema.TypeInt, - Resolver: schema.PathResolver("MaxPasswordAge"), - }, - { - Name: "minimum_password_length", - Type: schema.TypeInt, - Resolver: schema.PathResolver("MinimumPasswordLength"), - }, - { - Name: "password_reuse_prevention", - Type: schema.TypeInt, - Resolver: schema.PathResolver("PasswordReusePrevention"), - }, - { - Name: "require_lowercase_characters", - Type: schema.TypeBool, - Resolver: schema.PathResolver("RequireLowercaseCharacters"), - }, - { - Name: "require_numbers", - Type: schema.TypeBool, - Resolver: schema.PathResolver("RequireNumbers"), - }, - { - Name: "require_symbols", - Type: schema.TypeBool, - Resolver: schema.PathResolver("RequireSymbols"), - }, - { - Name: "require_uppercase_characters", - Type: schema.TypeBool, - Resolver: schema.PathResolver("RequireUppercaseCharacters"), + Name: "password_policy", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("PasswordPolicy"), }, { Name: "policy_exists", diff --git a/resources/services/iam/password_policies_fetch.go b/resources/services/iam/password_policies_fetch.go index 488f89c4..3dbecddc 100644 --- a/resources/services/iam/password_policies_fetch.go +++ b/resources/services/iam/password_policies_fetch.go @@ -8,7 +8,7 @@ import ( "github.com/cloudquery/plugin-sdk/schema" "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/iam/models" + "github.com/OpsHelmInc/ohaws" ) func fetchIamPasswordPolicies(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -18,12 +18,12 @@ func fetchIamPasswordPolicies(ctx context.Context, meta schema.ClientMeta, paren response, err := svc.GetAccountPasswordPolicy(ctx, &config) if err != nil { if c.IsNotFoundError(err) { - res <- models.PasswordPolicyWrapper{PolicyExists: false} + res <- ohaws.PasswordPolicy{PolicyExists: false} return nil } return err } - res <- models.PasswordPolicyWrapper{PasswordPolicy: *response.PasswordPolicy, PolicyExists: true} + res <- ohaws.PasswordPolicy{PasswordPolicy: *response.PasswordPolicy, PolicyExists: true} return nil } diff --git a/resources/services/iam/user_access_keys.go b/resources/services/iam/user_access_keys.go index 3149c51a..f6bee8c2 100644 --- a/resources/services/iam/user_access_keys.go +++ b/resources/services/iam/user_access_keys.go @@ -9,10 +9,9 @@ import ( func UserAccessKeys() *schema.Table { return &schema.Table{ - Name: "aws_iam_user_access_keys", - Resolver: fetchIamUserAccessKeys, - PostResourceResolver: postIamUserAccessKeyResolver, - Multiplex: client.AccountMultiplex, + Name: "aws_iam_user_access_keys", + Resolver: fetchIamUserAccessKeys, + Multiplex: client.AccountMultiplex, Columns: []schema.Column{ { Name: "account_id", @@ -34,14 +33,6 @@ func UserAccessKeys() *schema.Table { Type: schema.TypeString, Resolver: schema.ParentColumnResolver("id"), }, - { - Name: "last_used", - Type: schema.TypeTimestamp, - }, - { - Name: "last_used_service_name", - Type: schema.TypeString, - }, { Name: "oh_resource_type", Type: schema.TypeString, @@ -68,9 +59,19 @@ func UserAccessKeys() *schema.Table { Resolver: schema.PathResolver("UserName"), }, { - Name: "last_rotated", + Name: "last_used_date", Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("LastRotated"), + Resolver: schema.PathResolver("LastUsedDate"), + }, + { + Name: "last_used_region", + Type: schema.TypeString, + Resolver: schema.PathResolver("LastUsedRegion"), + }, + { + Name: "last_used_service_name", + Type: schema.TypeString, + Resolver: schema.PathResolver("LastUsedServiceName"), }, }, } diff --git a/resources/services/iam/users_fetch.go b/resources/services/iam/users_fetch.go index a7042633..b0494f25 100644 --- a/resources/services/iam/users_fetch.go +++ b/resources/services/iam/users_fetch.go @@ -15,7 +15,6 @@ import ( "github.com/OpsHelmInc/cloudquery/client" "github.com/OpsHelmInc/cloudquery/client/services" - "github.com/OpsHelmInc/cloudquery/resources/services/iam/models" "github.com/OpsHelmInc/ohaws" ) @@ -116,7 +115,7 @@ func getUser(ctx context.Context, meta schema.ClientMeta, resource *schema.Resou return err } - var accessKeys = make([]ohaws.AccessKey, 0, len(keysResp.AccessKeyMetadata)) + accessKeys := make([]ohaws.AccessKey, 0, len(keysResp.AccessKeyMetadata)) for _, md := range keysResp.AccessKeyMetadata { k, err := getUserAccessKey(ctx, svc, *userName, *md.AccessKeyId) if err != nil { @@ -152,38 +151,43 @@ func fetchIamUserGroups(ctx context.Context, meta schema.ClientMeta, parent *sch } func fetchIamUserAccessKeys(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - var config iam.ListAccessKeysInput p := parent.Item.(*ohaws.User) - svc := meta.(*client.Client).Services().Iam - config.UserName = p.UserName - for { - output, err := svc.ListAccessKeys(ctx, &config) - if err != nil { - return err - } + // keys are fetched as part of the user, so no need for this anymore + /* + var config iam.ListAccessKeysInput + svc := meta.(*client.Client).Services().Iam + config.UserName = p.UserName + for { + output, err := svc.ListAccessKeys(ctx, &config) + if err != nil { + return err + } - keys := make([]models.AccessKeyWrapper, len(output.AccessKeyMetadata)) - for i, key := range output.AccessKeyMetadata { - switch i { - case 0: - keys[i] = models.AccessKeyWrapper{AccessKeyMetadata: key, LastRotated: *key.CreateDate} - case 1: - keys[i] = models.AccessKeyWrapper{AccessKeyMetadata: key, LastRotated: *key.CreateDate} - default: - keys[i] = models.AccessKeyWrapper{AccessKeyMetadata: key} + keys := make([]ohaws.AccessKey, len(output.AccessKeyMetadata)) + for i, key := range output.AccessKeyMetadata { + switch i { + case 0: + keys[i] = ohaws.AccessKey{AccessKeyMetadata: key} + case 1: + keys[i] = ohaws.AccessKey{AccessKeyMetadata: key} + default: + keys[i] = ohaws.AccessKey{AccessKeyMetadata: key} + } + } + res <- keys + if output.Marker == nil { + break + } + config.Marker = output.Marker } - } - res <- keys - if output.Marker == nil { - break - } - config.Marker = output.Marker - } + */ + res <- p.AccessKeys return nil } +/* func postIamUserAccessKeyResolver(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { - r := resource.Item.(models.AccessKeyWrapper) + r := resource.Item.(ohaws.AccessKey) if r.AccessKeyId == nil { return nil } @@ -202,6 +206,7 @@ func postIamUserAccessKeyResolver(ctx context.Context, meta schema.ClientMeta, r } return nil } +*/ func fetchIamUserAttachedPolicies(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { var config iam.ListAttachedUserPoliciesInput @@ -224,7 +229,7 @@ func fetchIamUserAttachedPolicies(ctx context.Context, meta schema.ClientMeta, p func resolveAccessKeyArn(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) - key := resource.Item.(models.AccessKeyWrapper) + key := resource.Item.(ohaws.AccessKey) a := arn.ARN{ Partition: cl.Partition, diff --git a/resources/services/iot/certificates.go b/resources/services/iot/certificates.go index ee34f5c5..21c47380 100644 --- a/resources/services/iot/certificates.go +++ b/resources/services/iot/certificates.go @@ -9,10 +9,11 @@ import ( func Certificates() *schema.Table { return &schema.Table{ - Name: "aws_iot_certificates", - Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_CertificateDescription.html`, - Resolver: fetchIotCertificates, - Multiplex: client.ServiceAccountRegionMultiplexer("iot"), + Name: "aws_iot_certificates", + Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_CertificateDescription.html`, + Resolver: fetchIotCertificates, + PreResourceResolver: getIotCertificate, + Multiplex: client.ServiceAccountRegionMultiplexer("iot"), Columns: []schema.Column{ { Name: "account_id", @@ -102,6 +103,11 @@ func Certificates() *schema.Table { Type: schema.TypeJSON, Resolver: schema.PathResolver("Validity"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/iot/iot_certificates_fetch.go b/resources/services/iot/iot_certificates_fetch.go index b5cda43e..3e276af8 100644 --- a/resources/services/iot/iot_certificates_fetch.go +++ b/resources/services/iot/iot_certificates_fetch.go @@ -2,12 +2,14 @@ package iot import ( "context" + "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/iot" - "github.com/aws/aws-sdk-go-v2/service/iot/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchIotCertificates(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -24,7 +26,7 @@ func fetchIotCertificates(ctx context.Context, meta schema.ClientMeta, parent *s } for _, ct := range response.Certificates { - cert, err := svc.DescribeCertificate(ctx, &iot.DescribeCertificateInput{ + resp, err := svc.DescribeCertificate(ctx, &iot.DescribeCertificateInput{ CertificateId: ct.CertificateId, }, func(options *iot.Options) { options.Region = cl.Region @@ -32,7 +34,10 @@ func fetchIotCertificates(ctx context.Context, meta schema.ClientMeta, parent *s if err != nil { return err } - res <- cert.CertificateDescription + cert := &ohaws.IoTCertificate{ + CertificateDescription: *resp.CertificateDescription, + } + res <- cert } if aws.ToString(response.NextMarker) == "" { @@ -42,8 +47,25 @@ func fetchIotCertificates(ctx context.Context, meta schema.ClientMeta, parent *s } return nil } + +func getIotCertificate(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + cl := meta.(*client.Client) + svc := cl.Services().Iot + cert := resource.Item.(*ohaws.IoTCertificate) + + tags, err := getResourceTags(ctx, svc, aws.ToString(cert.CertificateArn)) + if err != nil { + return fmt.Errorf("error listing tags: %w", err) + } + + cert.Tags = tags + resource.Item = cert + + return nil +} + func ResolveIotCertificatePolicies(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - i := resource.Item.(*types.CertificateDescription) + i := resource.Item.(*ohaws.IoTCertificate) cl := meta.(*client.Client) svc := cl.Services().Iot input := iot.ListAttachedPoliciesInput{ diff --git a/resources/services/iot/iot_certificates_mock_test.go b/resources/services/iot/iot_certificates_mock_test.go index 0b23f6d9..0070d366 100644 --- a/resources/services/iot/iot_certificates_mock_test.go +++ b/resources/services/iot/iot_certificates_mock_test.go @@ -3,11 +3,12 @@ package iot import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/service/iot" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildIotCertificatesMock(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -39,6 +40,15 @@ func buildIotCertificatesMock(t *testing.T, ctrl *gomock.Controller) client.Serv m.EXPECT().ListAttachedPolicies(gomock.Any(), gomock.Any(), gomock.Any()).Return( &p, nil) + tags := iot.ListTagsForResourceOutput{} + err = faker.FakeObject(&tags) + if err != nil { + t.Fatal(err) + } + tags.NextToken = nil + m.EXPECT().ListTagsForResource(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &tags, nil) + return client.Services{ Iot: m, } diff --git a/resources/services/iot/iot_policies_fetch.go b/resources/services/iot/iot_policies_fetch.go index bdd66bbc..d9f74127 100644 --- a/resources/services/iot/iot_policies_fetch.go +++ b/resources/services/iot/iot_policies_fetch.go @@ -2,11 +2,14 @@ package iot import ( "context" + "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/iot" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchIotPolicies(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -31,7 +34,9 @@ func fetchIotPolicies(ctx context.Context, meta schema.ClientMeta, parent *schem if err != nil { return err } - res <- profile + res <- &ohaws.IoTPolicy{ + GetPolicyOutput: *profile, + } } if aws.ToString(response.NextMarker) == "" { @@ -41,8 +46,25 @@ func fetchIotPolicies(ctx context.Context, meta schema.ClientMeta, parent *schem } return nil } + +func getIotPolicy(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + cl := meta.(*client.Client) + svc := cl.Services().Iot + policy := resource.Item.(*ohaws.IoTPolicy) + + tags, err := getResourceTags(ctx, svc, aws.ToString(policy.PolicyArn)) + if err != nil { + return fmt.Errorf("error listing tags: %w", err) + } + + policy.Tags = tags + resource.Item = policy + + return nil +} + func ResolveIotPolicyTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - i := resource.Item.(*iot.GetPolicyOutput) + i := resource.Item.(*ohaws.IoTPolicy) cl := meta.(*client.Client) svc := cl.Services().Iot input := iot.ListTagsForResourceInput{ @@ -52,7 +74,6 @@ func ResolveIotPolicyTags(ctx context.Context, meta schema.ClientMeta, resource for { response, err := svc.ListTagsForResource(ctx, &input) - if err != nil { return err } diff --git a/resources/services/iot/iot_thing_groups_fetch.go b/resources/services/iot/iot_thing_groups_fetch.go index 8f895be3..57e15c58 100644 --- a/resources/services/iot/iot_thing_groups_fetch.go +++ b/resources/services/iot/iot_thing_groups_fetch.go @@ -2,11 +2,14 @@ package iot import ( "context" + "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/iot" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchIotThingGroups(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -30,7 +33,9 @@ func fetchIotThingGroups(ctx context.Context, meta schema.ClientMeta, parent *sc if err != nil { return err } - res <- group + res <- &ohaws.IoTThingGroup{ + DescribeThingGroupOutput: *group, + } } if aws.ToString(response.NextToken) == "" { @@ -40,8 +45,25 @@ func fetchIotThingGroups(ctx context.Context, meta schema.ClientMeta, parent *sc } return nil } + +func getIotThingGroup(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + cl := meta.(*client.Client) + svc := cl.Services().Iot + group := resource.Item.(*ohaws.IoTThingGroup) + + tags, err := getResourceTags(ctx, svc, aws.ToString(group.ThingGroupArn)) + if err != nil { + return fmt.Errorf("error listing tags: %w", err) + } + + group.Tags = tags + resource.Item = group + + return nil +} + func ResolveIotThingGroupThingsInGroup(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - i := resource.Item.(*iot.DescribeThingGroupOutput) + i := resource.Item.(*ohaws.IoTThingGroup) cl := meta.(*client.Client) svc := cl.Services().Iot input := iot.ListThingsInThingGroupInput{ @@ -65,8 +87,9 @@ func ResolveIotThingGroupThingsInGroup(ctx context.Context, meta schema.ClientMe } return resource.Set(c.Name, things) } + func ResolveIotThingGroupPolicies(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - i := resource.Item.(*iot.DescribeThingGroupOutput) + i := resource.Item.(*ohaws.IoTThingGroup) cl := meta.(*client.Client) svc := cl.Services().Iot input := iot.ListAttachedPoliciesInput{ @@ -92,28 +115,3 @@ func ResolveIotThingGroupPolicies(ctx context.Context, meta schema.ClientMeta, r } return resource.Set(c.Name, policies) } -func ResolveIotThingGroupTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - i := resource.Item.(*iot.DescribeThingGroupOutput) - cl := meta.(*client.Client) - svc := cl.Services().Iot - input := iot.ListTagsForResourceInput{ - ResourceArn: i.ThingGroupArn, - } - tags := make(map[string]string) - - for { - response, err := svc.ListTagsForResource(ctx, &input) - - if err != nil { - return err - } - - client.TagsIntoMap(response.Tags, tags) - - if aws.ToString(response.NextToken) == "" { - break - } - input.NextToken = response.NextToken - } - return resource.Set(c.Name, tags) -} diff --git a/resources/services/iot/iot_things_fetch.go b/resources/services/iot/iot_things_fetch.go index b5c6a6fb..87ed0718 100644 --- a/resources/services/iot/iot_things_fetch.go +++ b/resources/services/iot/iot_things_fetch.go @@ -2,12 +2,16 @@ package iot import ( "context" + "fmt" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/iot" "github.com/aws/aws-sdk-go-v2/service/iot/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchIotThings(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -30,8 +34,37 @@ func fetchIotThings(ctx context.Context, meta schema.ClientMeta, parent *schema. } return nil } -func ResolveIotThingPrincipals(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + +func getIotThing(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource) error { + cl := meta.(*client.Client) + svc := cl.Services().Iot i := resource.Item.(types.ThingAttribute) + + input := iot.DescribeThingInput{ + ThingName: i.ThingName, + } + resp, err := svc.DescribeThing(ctx, &input) + if err != nil { + return fmt.Errorf("error describing IoT thing: %w", err) + } + + t := ohaws.IoTThing{ + DescribeThingOutput: *resp, + } + + tags, err := getResourceTags(ctx, svc, aws.ToString(t.ThingArn)) + if err != nil { + return fmt.Errorf("error listing tags: %w", err) + } + + t.Tags = tags + resource.Item = &t + + return nil +} + +func ResolveIotThingPrincipals(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { + i := resource.Item.(*ohaws.IoTThing) cl := meta.(*client.Client) svc := cl.Services().Iot input := iot.ListThingPrincipalsInput{ @@ -42,7 +75,6 @@ func ResolveIotThingPrincipals(ctx context.Context, meta schema.ClientMeta, reso for { response, err := svc.ListThingPrincipals(ctx, &input) - if err != nil { return err } @@ -55,3 +87,27 @@ func ResolveIotThingPrincipals(ctx context.Context, meta schema.ClientMeta, reso } return resource.Set(c.Name, principals) } + +func getResourceTags(ctx context.Context, svc services.IotClient, resourceArn string) ([]types.Tag, error) { + var tags []types.Tag + + input := iot.ListTagsForResourceInput{ + ResourceArn: aws.String(resourceArn), + } + + for { + response, err := svc.ListTagsForResource(ctx, &input) + if err != nil { + return nil, err + } + + tags = append(tags, response.Tags...) + + if aws.ToString(response.NextToken) == "" { + break + } + input.NextToken = response.NextToken + } + + return tags, nil +} diff --git a/resources/services/iot/iot_things_mock_test.go b/resources/services/iot/iot_things_mock_test.go index 7d22bd0f..cd8638f7 100644 --- a/resources/services/iot/iot_things_mock_test.go +++ b/resources/services/iot/iot_things_mock_test.go @@ -3,12 +3,13 @@ package iot import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/service/iot" "github.com/aws/aws-sdk-go-v2/service/iot/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildIotThingsMock(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -22,6 +23,14 @@ func buildIotThingsMock(t *testing.T, ctrl *gomock.Controller) client.Services { m.EXPECT().ListThings(gomock.Any(), gomock.Any(), gomock.Any()).Return( &iot.ListThingsOutput{Things: []types.ThingAttribute{thing}}, nil) + thingDescription := iot.DescribeThingOutput{} + err = faker.FakeObject(&thingDescription) + if err != nil { + t.Fatal(err) + } + m.EXPECT().DescribeThing(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &thingDescription, nil) + lp := iot.ListThingPrincipalsOutput{} err = faker.FakeObject(&lp) if err != nil { @@ -30,6 +39,14 @@ func buildIotThingsMock(t *testing.T, ctrl *gomock.Controller) client.Services { lp.NextToken = nil m.EXPECT().ListThingPrincipals(gomock.Any(), gomock.Any(), gomock.Any()).Return( &lp, nil) + tags := iot.ListTagsForResourceOutput{} + err = faker.FakeObject(&tags) + if err != nil { + t.Fatal(err) + } + tags.NextToken = nil + m.EXPECT().ListTagsForResource(gomock.Any(), gomock.Any(), gomock.Any()).Return( + &tags, nil) return client.Services{ Iot: m, diff --git a/resources/services/iot/policies.go b/resources/services/iot/policies.go index 5d08b4d4..f0b58f61 100644 --- a/resources/services/iot/policies.go +++ b/resources/services/iot/policies.go @@ -9,10 +9,11 @@ import ( func Policies() *schema.Table { return &schema.Table{ - Name: "aws_iot_policies", - Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_Policy.html`, - Resolver: fetchIotPolicies, - Multiplex: client.ServiceAccountRegionMultiplexer("iot"), + Name: "aws_iot_policies", + Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_Policy.html`, + Resolver: fetchIotPolicies, + PreResourceResolver: getIotPolicy, + Multiplex: client.ServiceAccountRegionMultiplexer("iot"), Columns: []schema.Column{ { Name: "account_id", @@ -24,11 +25,6 @@ func Policies() *schema.Table { Type: schema.TypeString, Resolver: client.ResolveAWSRegion, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: ResolveIotPolicyTags, - }, { Name: "arn", Type: schema.TypeString, @@ -37,11 +33,46 @@ func Policies() *schema.Table { PrimaryKey: true, }, }, + { + Name: "creation_date", + Type: schema.TypeTimestamp, + Resolver: schema.PathResolver("CreationDate"), + }, + { + Name: "default_version_id", + Type: schema.TypeString, + Resolver: schema.PathResolver("DefaultVersionId"), + }, + { + Name: "generation_id", + Type: schema.TypeString, + Resolver: schema.PathResolver("GenerationId"), + }, + { + Name: "last_modified_date", + Type: schema.TypeTimestamp, + Resolver: schema.PathResolver("LastModifiedDate"), + }, + { + Name: "policy_document", + Type: schema.TypeString, + Resolver: schema.PathResolver("PolicyDocument"), + }, { Name: "policy_name", Type: schema.TypeString, Resolver: schema.PathResolver("PolicyName"), }, + { + Name: "result_metadata", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("ResultMetadata"), + }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/iot/thing_groups.go b/resources/services/iot/thing_groups.go index ef81834a..163073c7 100644 --- a/resources/services/iot/thing_groups.go +++ b/resources/services/iot/thing_groups.go @@ -9,9 +9,10 @@ import ( func ThingGroups() *schema.Table { return &schema.Table{ - Name: "aws_iot_thing_groups", - Resolver: fetchIotThingGroups, - Multiplex: client.ServiceAccountRegionMultiplexer("iot"), + Name: "aws_iot_thing_groups", + Resolver: fetchIotThingGroups, + PreResourceResolver: getIotThingGroup, + Multiplex: client.ServiceAccountRegionMultiplexer("iot"), Columns: []schema.Column{ { Name: "account_id", @@ -34,11 +35,6 @@ func ThingGroups() *schema.Table { Resolver: ResolveIotThingGroupPolicies, IgnoreInTests: true, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: ResolveIotThingGroupTags, - }, { Name: "arn", Type: schema.TypeString, @@ -97,6 +93,11 @@ func ThingGroups() *schema.Table { Type: schema.TypeJSON, Resolver: schema.PathResolver("ResultMetadata"), }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/iot/things.go b/resources/services/iot/things.go index 6314cf2a..90f6442f 100644 --- a/resources/services/iot/things.go +++ b/resources/services/iot/things.go @@ -9,10 +9,11 @@ import ( func Things() *schema.Table { return &schema.Table{ - Name: "aws_iot_things", - Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_ThingAttribute.html`, - Resolver: fetchIotThings, - Multiplex: client.ServiceAccountRegionMultiplexer("iot"), + Name: "aws_iot_things", + Description: `https://docs.aws.amazon.com/iot/latest/apireference/API_ThingAttribute.html`, + Resolver: fetchIotThings, + PreResourceResolver: getIotThing, + Multiplex: client.ServiceAccountRegionMultiplexer("iot"), Columns: []schema.Column{ { Name: "account_id", @@ -43,6 +44,21 @@ func Things() *schema.Table { Type: schema.TypeJSON, Resolver: schema.PathResolver("Attributes"), }, + { + Name: "billing_group_name", + Type: schema.TypeString, + Resolver: schema.PathResolver("BillingGroupName"), + }, + { + Name: "default_client_id", + Type: schema.TypeString, + Resolver: schema.PathResolver("DefaultClientId"), + }, + { + Name: "thing_id", + Type: schema.TypeString, + Resolver: schema.PathResolver("ThingId"), + }, { Name: "thing_name", Type: schema.TypeString, @@ -58,6 +74,16 @@ func Things() *schema.Table { Type: schema.TypeInt, Resolver: schema.PathResolver("Version"), }, + { + Name: "result_metadata", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("ResultMetadata"), + }, + { + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, + }, }, } } diff --git a/resources/services/kms/key_grants_fetch.go b/resources/services/kms/key_grants_fetch.go index b9742c59..de0782c3 100644 --- a/resources/services/kms/key_grants_fetch.go +++ b/resources/services/kms/key_grants_fetch.go @@ -3,15 +3,16 @@ package kms import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/kms" - "github.com/aws/aws-sdk-go-v2/service/kms/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchKmsKeyGrants(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - k := parent.Item.(*types.KeyMetadata) + k := parent.Item.(*ohaws.KMSKey) config := kms.ListGrantsInput{ KeyId: k.Arn, Limit: aws.Int32(100), diff --git a/resources/services/kms/keys.go b/resources/services/kms/keys.go index 4ebe2ef1..3f3d172d 100644 --- a/resources/services/kms/keys.go +++ b/resources/services/kms/keys.go @@ -30,11 +30,6 @@ func Keys() *schema.Table { Type: schema.TypeBool, Resolver: resolveKeysRotationEnabled, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveKeysTags, - }, { Name: "arn", Type: schema.TypeString, @@ -49,124 +44,14 @@ func Keys() *schema.Table { IgnoreInTests: true, }, { - Name: "key_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("KeyId"), - }, - { - Name: "aws_account_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("AWSAccountId"), - }, - { - Name: "cloud_hsm_cluster_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("CloudHsmClusterId"), - }, - { - Name: "creation_date", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("CreationDate"), - }, - { - Name: "custom_key_store_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("CustomKeyStoreId"), - }, - { - Name: "customer_master_key_spec", - Type: schema.TypeString, - Resolver: schema.PathResolver("CustomerMasterKeySpec"), - }, - { - Name: "deletion_date", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("DeletionDate"), - }, - { - Name: "description", - Type: schema.TypeString, - Resolver: schema.PathResolver("Description"), - }, - { - Name: "enabled", - Type: schema.TypeBool, - Resolver: schema.PathResolver("Enabled"), - }, - { - Name: "encryption_algorithms", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("EncryptionAlgorithms"), - }, - { - Name: "expiration_model", - Type: schema.TypeString, - Resolver: schema.PathResolver("ExpirationModel"), - }, - { - Name: "key_agreement_algorithms", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("KeyAgreementAlgorithms"), - }, - { - Name: "key_manager", - Type: schema.TypeString, - Resolver: schema.PathResolver("KeyManager"), - }, - { - Name: "key_spec", - Type: schema.TypeString, - Resolver: schema.PathResolver("KeySpec"), - }, - { - Name: "key_state", - Type: schema.TypeString, - Resolver: schema.PathResolver("KeyState"), - }, - { - Name: "key_usage", - Type: schema.TypeString, - Resolver: schema.PathResolver("KeyUsage"), - }, - { - Name: "mac_algorithms", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("MacAlgorithms"), - }, - { - Name: "multi_region", - Type: schema.TypeBool, - Resolver: schema.PathResolver("MultiRegion"), - }, - { - Name: "multi_region_configuration", + Name: "key_metadata", Type: schema.TypeJSON, - Resolver: schema.PathResolver("MultiRegionConfiguration"), - }, - { - Name: "origin", - Type: schema.TypeString, - Resolver: schema.PathResolver("Origin"), + Resolver: schema.PathResolver("KeyMetadata"), }, { - Name: "pending_deletion_window_in_days", - Type: schema.TypeInt, - Resolver: schema.PathResolver("PendingDeletionWindowInDays"), - }, - { - Name: "signing_algorithms", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("SigningAlgorithms"), - }, - { - Name: "valid_to", - Type: schema.TypeTimestamp, - Resolver: schema.PathResolver("ValidTo"), - }, - { - Name: "xks_key_configuration", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("XksKeyConfiguration"), + Resolver: client.ResolveTags, }, }, diff --git a/resources/services/kms/keys_fetch.go b/resources/services/kms/keys_fetch.go index 37bfbe9e..37cbcf98 100644 --- a/resources/services/kms/keys_fetch.go +++ b/resources/services/kms/keys_fetch.go @@ -9,6 +9,8 @@ import ( "github.com/cloudquery/plugin-sdk/schema" "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchKmsKeys(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -36,48 +38,55 @@ func getKey(ctx context.Context, meta schema.ClientMeta, resource *schema.Resour if err != nil { return err } - resource.Item = d.KeyMetadata + + var tags []ohaws.Tag + if d.KeyMetadata.Origin != "EXTERNAL" && d.KeyMetadata.KeyManager != "AWS" { + t, err := getKeyTags(ctx, c, svc, *d.KeyMetadata.KeyId) + if err != nil { + return err + } + tags = t + } + + resource.Item = &ohaws.KMSKey{ + KeyMetadata: *d.KeyMetadata, + Tags: tags, + } + return nil } func resolveKeysReplicaKeys(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - key := resource.Item.(*types.KeyMetadata) + key := resource.Item.(*ohaws.KMSKey) if key.MultiRegionConfiguration == nil { return nil } return resource.Set(c.Name, key.MultiRegionConfiguration.ReplicaKeys) } -func resolveKeysTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - svc := cl.Services().Kms - key := resource.Item.(*types.KeyMetadata) - if key.Origin == "EXTERNAL" || key.KeyManager == "AWS" { - return nil - } - - params := kms.ListResourceTagsInput{KeyId: key.KeyId} +func getKeyTags(ctx context.Context, cl *client.Client, svc services.KmsClient, keyID string) ([]ohaws.Tag, error) { + params := kms.ListResourceTagsInput{KeyId: aws.String(keyID)} paginator := kms.NewListResourceTagsPaginator(svc, ¶ms) - tags := make(map[string]string) + var tags []ohaws.Tag for paginator.HasMorePages() { page, err := paginator.NextPage(ctx, func(options *kms.Options) { options.Region = cl.Region }) if err != nil { - return err + return nil, err } - // Cannot use client.TagToMap because key/val names are different - for _, v := range page.Tags { - tags[aws.ToString(v.TagKey)] = aws.ToString(v.TagValue) + + for _, t := range page.Tags { + tags = append(tags, ohaws.Tag{Key: t.TagKey, Value: t.TagValue}) } } - return resource.Set(c.Name, tags) + return tags, nil } func resolveKeysRotationEnabled(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) svc := cl.Services().Kms - key := resource.Item.(*types.KeyMetadata) + key := resource.Item.(*ohaws.KMSKey) if key.Origin == "EXTERNAL" || key.KeyManager == "AWS" { return nil } diff --git a/resources/services/lambda/function_aliases.go b/resources/services/lambda/function_aliases.go index 123faf92..6f3dd8dd 100644 --- a/resources/services/lambda/function_aliases.go +++ b/resources/services/lambda/function_aliases.go @@ -38,29 +38,9 @@ func FunctionAliases() *schema.Table { }, }, { - Name: "description", - Type: schema.TypeString, - Resolver: schema.PathResolver("Description"), - }, - { - Name: "function_version", - Type: schema.TypeString, - Resolver: schema.PathResolver("FunctionVersion"), - }, - { - Name: "name", - Type: schema.TypeString, - Resolver: schema.PathResolver("Name"), - }, - { - Name: "revision_id", - Type: schema.TypeString, - Resolver: schema.PathResolver("RevisionId"), - }, - { - Name: "routing_config", + Name: "alias_configuration", Type: schema.TypeJSON, - Resolver: schema.PathResolver("RoutingConfig"), + Resolver: schema.PathResolver("AliasConfiguration"), }, { Name: "url_config", diff --git a/resources/services/lambda/functions_fetch.go b/resources/services/lambda/functions_fetch.go index 69a4d237..5d007c09 100644 --- a/resources/services/lambda/functions_fetch.go +++ b/resources/services/lambda/functions_fetch.go @@ -4,12 +4,13 @@ import ( "context" "encoding/json" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/lambda/models" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/lambda" "github.com/aws/aws-sdk-go-v2/service/lambda/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchLambdaFunctions(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -148,6 +149,7 @@ func fetchLambdaFunctionEventInvokeConfigs(ctx context.Context, meta schema.Clie } return nil } + func fetchLambdaFunctionAliases(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { p := parent.Item.(*lambda.GetFunctionOutput) if p.Configuration == nil { @@ -195,7 +197,7 @@ func getFunctionAliasURLConfig(ctx context.Context, meta schema.ClientMeta, reso return err } - resource.Item = &models.AliasWrapper{AliasConfiguration: &alias, UrlConfig: urlConfig} + resource.Item = &ohaws.Alias{AliasConfiguration: &alias, UrlConfig: urlConfig} return nil } @@ -255,6 +257,7 @@ func fetchLambdaFunctionConcurrencyConfigs(ctx context.Context, meta schema.Clie } return nil } + func fetchLambdaFunctionEventSourceMappings(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { p := parent.Item.(*lambda.GetFunctionOutput) if p.Configuration == nil { diff --git a/resources/services/lambda/models/lambda.go b/resources/services/lambda/models/lambda.go index a7e6aa22..3283eea0 100644 --- a/resources/services/lambda/models/lambda.go +++ b/resources/services/lambda/models/lambda.go @@ -1,15 +1,5 @@ package models -import ( - "github.com/aws/aws-sdk-go-v2/service/lambda" - "github.com/aws/aws-sdk-go-v2/service/lambda/types" -) - -type AliasWrapper struct { - *types.AliasConfiguration - UrlConfig *lambda.GetFunctionUrlConfigOutput -} - type RuntimeWrapper struct { Name string } diff --git a/resources/services/route53/hosted_zones.go b/resources/services/route53/hosted_zones.go index 36961d3e..562d0133 100644 --- a/resources/services/route53/hosted_zones.go +++ b/resources/services/route53/hosted_zones.go @@ -66,6 +66,11 @@ func HostedZones() *schema.Table { Type: schema.TypeString, Resolver: schema.PathResolver("DelegationSetId"), }, + { + Name: "delegation_set", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("DelegationSet"), + }, { Name: "vpcs", Type: schema.TypeJSON, diff --git a/resources/services/route53/hosted_zones_fetch.go b/resources/services/route53/hosted_zones_fetch.go index b56a011d..6abfea72 100644 --- a/resources/services/route53/hosted_zones_fetch.go +++ b/resources/services/route53/hosted_zones_fetch.go @@ -5,13 +5,14 @@ import ( "fmt" "strings" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/route53/models" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/aws/arn" "github.com/aws/aws-sdk-go-v2/service/route53" "github.com/aws/aws-sdk-go-v2/service/route53/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchRoute53HostedZones(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -39,10 +40,11 @@ func fetchRoute53HostedZones(ctx context.Context, meta schema.ClientMeta, parent if gotHostedZone.DelegationSet != nil { delegationSetId = gotHostedZone.DelegationSet.Id } - res <- &models.Route53HostedZoneWrapper{ + res <- &ohaws.Route53HostedZone{ HostedZone: h, Tags: client.TagsToMap(getRoute53tagsByResourceID(*h.Id, tagsResponse.ResourceTagSets)), DelegationSetId: delegationSetId, + DelegationSet: gotHostedZone.DelegationSet, VPCs: gotHostedZone.VPCs, } } @@ -75,8 +77,9 @@ func fetchRoute53HostedZones(ctx context.Context, meta schema.ClientMeta, parent } return nil } + func fetchRoute53HostedZoneQueryLoggingConfigs(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - r := parent.Item.(*models.Route53HostedZoneWrapper) + r := parent.Item.(*ohaws.Route53HostedZone) svc := meta.(*client.Client).Services().Route53 config := route53.ListQueryLoggingConfigsInput{HostedZoneId: r.Id} for { @@ -92,8 +95,9 @@ func fetchRoute53HostedZoneQueryLoggingConfigs(ctx context.Context, meta schema. } return nil } + func fetchRoute53HostedZoneResourceRecordSets(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - r := parent.Item.(*models.Route53HostedZoneWrapper) + r := parent.Item.(*ohaws.Route53HostedZone) svc := meta.(*client.Client).Services().Route53 config := route53.ListResourceRecordSetsInput{HostedZoneId: r.Id} for { @@ -114,8 +118,9 @@ func fetchRoute53HostedZoneResourceRecordSets(ctx context.Context, meta schema.C return nil } + func fetchRoute53HostedZoneTrafficPolicyInstances(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { - r := parent.Item.(*models.Route53HostedZoneWrapper) + r := parent.Item.(*ohaws.Route53HostedZone) config := route53.ListTrafficPolicyInstancesByHostedZoneInput{HostedZoneId: r.Id} svc := meta.(*client.Client).Services().Route53 for { @@ -140,9 +145,10 @@ func getRoute53tagsByResourceID(id string, set []types.ResourceTagSet) []types.T } return nil } + func resolveRoute53HostedZoneArn(_ context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) - hz := resource.Item.(*models.Route53HostedZoneWrapper) + hz := resource.Item.(*ohaws.Route53HostedZone) return resource.Set(c.Name, arn.ARN{ Partition: cl.Partition, Service: string(client.Route53Service), @@ -151,6 +157,7 @@ func resolveRoute53HostedZoneArn(_ context.Context, meta schema.ClientMeta, reso Resource: fmt.Sprintf("hostedzone/%s", aws.ToString(hz.Id)), }.String()) } + func resolveRoute53HostedZoneQueryLoggingConfigsArn(_ context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) ql := resource.Item.(types.QueryLoggingConfig) @@ -162,6 +169,7 @@ func resolveRoute53HostedZoneQueryLoggingConfigsArn(_ context.Context, meta sche Resource: fmt.Sprintf("queryloggingconfig/%s", aws.ToString(ql.Id)), }.String()) } + func resolveRoute53HostedZoneTrafficPolicyInstancesArn(_ context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { cl := meta.(*client.Client) tp := resource.Item.(types.TrafficPolicyInstance) diff --git a/resources/services/route53/models/route53.go b/resources/services/route53/models/route53.go deleted file mode 100644 index bc38d235..00000000 --- a/resources/services/route53/models/route53.go +++ /dev/null @@ -1,10 +0,0 @@ -package models - -import "github.com/aws/aws-sdk-go-v2/service/route53/types" - -type Route53HostedZoneWrapper struct { - types.HostedZone - Tags map[string]string - DelegationSetId *string - VPCs []types.VPC -} diff --git a/resources/services/sagemaker/endpoint_configurations.go b/resources/services/sagemaker/endpoint_configurations.go index 3d3b4143..d7dd4720 100644 --- a/resources/services/sagemaker/endpoint_configurations.go +++ b/resources/services/sagemaker/endpoint_configurations.go @@ -32,12 +32,6 @@ func EndpointConfigurations() *schema.Table { PrimaryKey: true, }, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveSagemakerEndpointConfigurationTags, - Description: `The tags associated with the model.`, - }, { Name: "creation_time", Type: schema.TypeTimestamp, @@ -94,9 +88,9 @@ func EndpointConfigurations() *schema.Table { Resolver: schema.PathResolver("VpcConfig"), }, { - Name: "result_metadata", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("ResultMetadata"), + Resolver: client.ResolveTags, }, }, } diff --git a/resources/services/sagemaker/endpoint_configurations_fetch.go b/resources/services/sagemaker/endpoint_configurations_fetch.go index 484c13ab..c223ef06 100644 --- a/resources/services/sagemaker/endpoint_configurations_fetch.go +++ b/resources/services/sagemaker/endpoint_configurations_fetch.go @@ -3,11 +3,14 @@ package sagemaker import ( "context" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/sagemaker" "github.com/aws/aws-sdk-go-v2/service/sagemaker/types" "github.com/cloudquery/plugin-sdk/schema" + "github.com/mitchellh/mapstructure" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/ohaws" ) func fetchSagemakerEndpointConfigurations(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -42,26 +45,27 @@ func getEndpointConfiguration(ctx context.Context, meta schema.ClientMeta, resou return err } - resource.Item = response - return nil -} - -func resolveSagemakerEndpointConfigurationTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, _ schema.Column) error { - r := resource.Item.(*sagemaker.DescribeEndpointConfigOutput) - c := meta.(*client.Client) - svc := c.Services().Sagemaker - config := sagemaker.ListTagsInput{ - ResourceArn: r.EndpointConfigArn, - } - response, err := svc.ListTags(ctx, &config) - if err != nil { + var ec ohaws.SagemakerEndpointConfig + if err := mapstructure.Decode(response, &ec); err != nil { return err } - tags := make(map[string]*string, len(response.Tags)) - for _, t := range response.Tags { - tags[*t.Key] = t.Value + listTagsInput := &sagemaker.ListTagsInput{ + ResourceArn: ec.EndpointConfigArn, + } + + tagsPaginator := sagemaker.NewListTagsPaginator(svc, listTagsInput) + for tagsPaginator.HasMorePages() { + p, err := tagsPaginator.NextPage(ctx, func(o *sagemaker.Options) { + o.Region = c.Region + }) + if err != nil { + return err + } + + ec.Tags = append(ec.Tags, p.Tags...) } - return resource.Set("tags", tags) + resource.Item = &ec + return nil } diff --git a/resources/services/sagemaker/endpoint_configurations_mock_test.go b/resources/services/sagemaker/endpoint_configurations_mock_test.go index de549b5b..39f572b6 100644 --- a/resources/services/sagemaker/endpoint_configurations_mock_test.go +++ b/resources/services/sagemaker/endpoint_configurations_mock_test.go @@ -3,12 +3,13 @@ package sagemaker import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/service/sagemaker" types "github.com/aws/aws-sdk-go-v2/service/sagemaker/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildSageMakerEndpointConfigs(t *testing.T, ctrl *gomock.Controller) client.Services { @@ -38,6 +39,7 @@ func buildSageMakerEndpointConfigs(t *testing.T, ctrl *gomock.Controller) client if err := faker.FakeObject(&tagsOut); err != nil { t.Fatal(err) } + tagsOut.NextToken = nil m.EXPECT().ListTags(gomock.Any(), gomock.Any(), gomock.Any()).Return( &tagsOut, nil, ) diff --git a/resources/services/wafv2/ipsets.go b/resources/services/wafv2/ipsets.go index ab4159b9..cc17e9ee 100644 --- a/resources/services/wafv2/ipsets.go +++ b/resources/services/wafv2/ipsets.go @@ -30,11 +30,6 @@ func Ipsets() *schema.Table { Type: schema.TypeInetArray, Resolver: resolveIpsetAddresses, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveIpsetTags, - }, { Name: "arn", Type: schema.TypeString, @@ -44,24 +39,14 @@ func Ipsets() *schema.Table { }, }, { - Name: "ip_address_version", - Type: schema.TypeString, - Resolver: schema.PathResolver("IPAddressVersion"), - }, - { - Name: "id", - Type: schema.TypeString, - Resolver: schema.PathResolver("Id"), - }, - { - Name: "name", - Type: schema.TypeString, - Resolver: schema.PathResolver("Name"), + Name: "ip_set", + Type: schema.TypeJSON, + Resolver: schema.PathResolver("IPSet"), }, { - Name: "description", - Type: schema.TypeString, - Resolver: schema.PathResolver("Description"), + Name: "tags", + Type: schema.TypeJSON, + Resolver: client.ResolveTags, }, }, } diff --git a/resources/services/wafv2/ipsets_fetch.go b/resources/services/wafv2/ipsets_fetch.go index 3e967753..25c33d93 100644 --- a/resources/services/wafv2/ipsets_fetch.go +++ b/resources/services/wafv2/ipsets_fetch.go @@ -4,11 +4,14 @@ import ( "context" "net" - "github.com/OpsHelmInc/cloudquery/client" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/wafv2" "github.com/aws/aws-sdk-go-v2/service/wafv2/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchWafv2Ipsets(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -54,12 +57,21 @@ func getIpset(ctx context.Context, meta schema.ClientMeta, resource *schema.Reso return err } - resource.Item = info.IPSet + tags, err := getIpsetTags(ctx, cl, svc, *info.IPSet.ARN) + if err != nil { + return err + } + + resource.Item = &ohaws.WAFv2IPSet{ + IPSet: *info.IPSet, + Tags: tags, + } + return nil } func resolveIpsetAddresses(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - s := resource.Item.(*types.IPSet) + s := resource.Item.(*ohaws.WAFv2IPSet) addrs := make([]*net.IPNet, 0, len(s.Addresses)) for _, a := range s.Addresses { _, n, err := net.ParseCIDR(a) @@ -71,28 +83,24 @@ func resolveIpsetAddresses(ctx context.Context, meta schema.ClientMeta, resource return resource.Set(c.Name, addrs) } -func resolveIpsetTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - cl := meta.(*client.Client) - svc := cl.Services().Wafv2 - s := resource.Item.(*types.IPSet) - tags := make(map[string]string) - params := wafv2.ListTagsForResourceInput{ResourceARN: s.ARN} +func getIpsetTags(ctx context.Context, c *client.Client, svc services.Wafv2Client, ipsetArn string) ([]types.Tag, error) { + var tags []types.Tag + params := wafv2.ListTagsForResourceInput{ResourceARN: aws.String(ipsetArn)} for { result, err := svc.ListTagsForResource(ctx, ¶ms, func(options *wafv2.Options) { - options.Region = cl.Region + options.Region = c.Region }) if err != nil { - return err + return nil, err } if result != nil || result.TagInfoForResource != nil { - for _, t := range result.TagInfoForResource.TagList { - tags[aws.ToString(t.Key)] = aws.ToString(t.Value) - } + tags = append(tags, result.TagInfoForResource.TagList...) } if aws.ToString(result.NextMarker) == "" { break } params.NextMarker = result.NextMarker } - return resource.Set(c.Name, tags) + + return tags, nil } diff --git a/resources/services/wafv2/ipsets_mock_test.go b/resources/services/wafv2/ipsets_mock_test.go index 98325471..7bb1982f 100644 --- a/resources/services/wafv2/ipsets_mock_test.go +++ b/resources/services/wafv2/ipsets_mock_test.go @@ -3,13 +3,14 @@ package wafv2 import ( "testing" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/client/mocks" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/wafv2" "github.com/aws/aws-sdk-go-v2/service/wafv2/types" "github.com/cloudquery/plugin-sdk/faker" "github.com/golang/mock/gomock" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/mocks" ) func buildIpsetsMock(t *testing.T, ctrl *gomock.Controller) client.Services { diff --git a/resources/services/wafv2/models/wafv2.go b/resources/services/wafv2/models/wafv2.go deleted file mode 100644 index 18bd4637..00000000 --- a/resources/services/wafv2/models/wafv2.go +++ /dev/null @@ -1,8 +0,0 @@ -package models - -import "github.com/aws/aws-sdk-go-v2/service/wafv2/types" - -type WebACLWrapper struct { - *types.WebACL - LoggingConfiguration *types.LoggingConfiguration -} diff --git a/resources/services/wafv2/web_acls.go b/resources/services/wafv2/web_acls.go index e122987c..1b933ea8 100644 --- a/resources/services/wafv2/web_acls.go +++ b/resources/services/wafv2/web_acls.go @@ -24,11 +24,6 @@ func WebAcls() *schema.Table { Type: schema.TypeString, Resolver: client.ResolveAWSRegion, }, - { - Name: "tags", - Type: schema.TypeJSON, - Resolver: resolveWebACLTags, - }, { Name: "resources_for_web_acl", Type: schema.TypeStringArray, @@ -43,94 +38,19 @@ func WebAcls() *schema.Table { }, }, { - Name: "default_action", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("DefaultAction"), - }, - { - Name: "id", - Type: schema.TypeString, - Resolver: schema.PathResolver("Id"), - }, - { - Name: "name", - Type: schema.TypeString, - Resolver: schema.PathResolver("Name"), - }, - { - Name: "visibility_config", + Name: "web_acl", Type: schema.TypeJSON, - Resolver: schema.PathResolver("VisibilityConfig"), + Resolver: schema.PathResolver("WebACL"), }, { - Name: "association_config", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("AssociationConfig"), - }, - { - Name: "capacity", - Type: schema.TypeInt, - Resolver: schema.PathResolver("Capacity"), - }, - { - Name: "captcha_config", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("CaptchaConfig"), - }, - { - Name: "challenge_config", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("ChallengeConfig"), - }, - { - Name: "custom_response_bodies", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("CustomResponseBodies"), - }, - { - Name: "description", - Type: schema.TypeString, - Resolver: schema.PathResolver("Description"), - }, - { - Name: "label_namespace", - Type: schema.TypeString, - Resolver: schema.PathResolver("LabelNamespace"), - }, - { - Name: "managed_by_firewall_manager", - Type: schema.TypeBool, - Resolver: schema.PathResolver("ManagedByFirewallManager"), - }, - { - Name: "post_process_firewall_manager_rule_groups", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("PostProcessFirewallManagerRuleGroups"), - }, - { - Name: "pre_process_firewall_manager_rule_groups", - Type: schema.TypeJSON, - Resolver: schema.PathResolver("PreProcessFirewallManagerRuleGroups"), - }, - { - Name: "retrofitted_by_firewall_manager", - Type: schema.TypeBool, - Resolver: schema.PathResolver("RetrofittedByFirewallManager"), - }, - { - Name: "rules", + Name: "logging_configuration", Type: schema.TypeJSON, - Resolver: schema.PathResolver("Rules"), - }, - { - Name: "token_domains", - Type: schema.TypeStringArray, - Resolver: schema.PathResolver("TokenDomains"), + Resolver: schema.PathResolver("LoggingConfiguration"), }, { - Name: "logging_configuration", + Name: "tags", Type: schema.TypeJSON, - Resolver: schema.PathResolver("LoggingConfiguration"), + Resolver: client.ResolveTags, }, }, } diff --git a/resources/services/wafv2/web_acls_fetch.go b/resources/services/wafv2/web_acls_fetch.go index ee3b6a10..35bf5f24 100644 --- a/resources/services/wafv2/web_acls_fetch.go +++ b/resources/services/wafv2/web_acls_fetch.go @@ -3,13 +3,15 @@ package wafv2 import ( "context" - "github.com/OpsHelmInc/cloudquery/client" - "github.com/OpsHelmInc/cloudquery/resources/services/wafv2/models" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/cloudfront" "github.com/aws/aws-sdk-go-v2/service/wafv2" "github.com/aws/aws-sdk-go-v2/service/wafv2/types" "github.com/cloudquery/plugin-sdk/schema" + + "github.com/OpsHelmInc/cloudquery/client" + "github.com/OpsHelmInc/cloudquery/client/services" + "github.com/OpsHelmInc/ohaws" ) func fetchWafv2WebAcls(ctx context.Context, meta schema.ClientMeta, parent *schema.Resource, res chan<- any) error { @@ -64,20 +66,26 @@ func getWebAcl(ctx context.Context, meta schema.ClientMeta, resource *schema.Res } } + tags, err := getWebACLTags(ctx, c, svc, *webAcl.ARN) + if err != nil { + return err + } + var webAclLoggingConfiguration *types.LoggingConfiguration if loggingConfigurationOutput != nil { webAclLoggingConfiguration = loggingConfigurationOutput.LoggingConfiguration } - resource.Item = &models.WebACLWrapper{ - WebACL: webAclOutput.WebACL, + resource.Item = &ohaws.WAFv2WebACL{ + WebACL: *webAclOutput.WebACL, LoggingConfiguration: webAclLoggingConfiguration, + Tags: tags, } return nil } func resolveWafv2webACLResourcesForWebACL(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - webACL := resource.Item.(*models.WebACLWrapper) + webACL := resource.Item.(*ohaws.WAFv2WebACL) cl := meta.(*client.Client) service := cl.Services().Wafv2 @@ -113,27 +121,25 @@ func resolveWafv2webACLResourcesForWebACL(ctx context.Context, meta schema.Clien } return resource.Set(c.Name, resourceArns) } -func resolveWebACLTags(ctx context.Context, meta schema.ClientMeta, resource *schema.Resource, c schema.Column) error { - webACL := resource.Item.(*models.WebACLWrapper) - - cl := meta.(*client.Client) - service := cl.Services().Wafv2 - // Resolve tags - outputTags := make(map[string]*string) - tagsConfig := wafv2.ListTagsForResourceInput{ResourceARN: webACL.ARN} +func getWebACLTags(ctx context.Context, c *client.Client, svc services.Wafv2Client, webACLArn string) ([]types.Tag, error) { + var tags []types.Tag + params := wafv2.ListTagsForResourceInput{ResourceARN: aws.String(webACLArn)} for { - tags, err := service.ListTagsForResource(ctx, &tagsConfig) + result, err := svc.ListTagsForResource(ctx, ¶ms, func(options *wafv2.Options) { + options.Region = c.Region + }) if err != nil { - return err + return nil, err } - for _, t := range tags.TagInfoForResource.TagList { - outputTags[*t.Key] = t.Value + if result != nil || result.TagInfoForResource != nil { + tags = append(tags, result.TagInfoForResource.TagList...) } - if aws.ToString(tags.NextMarker) == "" { + if aws.ToString(result.NextMarker) == "" { break } - tagsConfig.NextMarker = tags.NextMarker + params.NextMarker = result.NextMarker } - return resource.Set(c.Name, outputTags) + + return tags, nil } diff --git a/website/pages/docs/tables.md b/website/pages/docs/tables.md index b5f8891c..4acc4094 100644 --- a/website/pages/docs/tables.md +++ b/website/pages/docs/tables.md @@ -198,7 +198,6 @@ - [aws_elbv2_load_balancers](https://github.com/OpsHelmInc/cloudquery/blob/main/docs/tables/aws_elbv2_load_balancers.md) - [aws_elbv2_listeners](https://github.com/OpsHelmInc/cloudquery/blob/main/docs/tables/aws_elbv2_listeners.md) - [aws_elbv2_listener_certificates](https://github.com/OpsHelmInc/cloudquery/blob/main/docs/tables/aws_elbv2_listener_certificates.md) - - [aws_elbv2_load_balancer_attributes](https://github.com/OpsHelmInc/cloudquery/blob/main/docs/tables/aws_elbv2_load_balancer_attributes.md) - [aws_elbv2_target_groups](https://github.com/OpsHelmInc/cloudquery/blob/main/docs/tables/aws_elbv2_target_groups.md) - [aws_elbv2_target_group_target_health_descriptions](https://github.com/OpsHelmInc/cloudquery/blob/main/docs/tables/aws_elbv2_target_group_target_health_descriptions.md) - [aws_emr_block_public_access_configs](https://github.com/OpsHelmInc/cloudquery/blob/main/docs/tables/aws_emr_block_public_access_configs.md)