From 6718cfb3e4250b3d4490933e3554d46da0be0cb8 Mon Sep 17 00:00:00 2001 From: sundowndev Date: Wed, 20 Oct 2021 10:34:33 +0200 Subject: [PATCH] fix: aws_rds_cluster deep mode --- pkg/remote/aws/rds_cluster_enumerator.go | 7 + pkg/remote/rds_scanner_test.go | 8 +- ...o-2-aurora-cluster-demo-2-.res.golden.json | 5 + ...-aurora-cluster-demo-mydb.res.golden.json} | 0 .../results.golden.json | 165 ++++++++++++------ pkg/resource/aws/aws_rds_cluster.go | 5 + 6 files changed, 134 insertions(+), 56 deletions(-) create mode 100755 pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-2-aurora-cluster-demo-2-.res.golden.json rename pkg/remote/test/aws_rds_clusters_results/{aws_rds_cluster-aurora-cluster-demo-aurora-cluster-demo.res.golden.json => aws_rds_cluster-aurora-cluster-demo-aurora-cluster-demo-mydb.res.golden.json} (100%) diff --git a/pkg/remote/aws/rds_cluster_enumerator.go b/pkg/remote/aws/rds_cluster_enumerator.go index 00844c4b..929a8c55 100644 --- a/pkg/remote/aws/rds_cluster_enumerator.go +++ b/pkg/remote/aws/rds_cluster_enumerator.go @@ -32,6 +32,12 @@ func (e *RDSClusterEnumerator) Enumerate() ([]*resource.Resource, error) { results := make([]*resource.Resource, len(clusters)) for _, cluster := range clusters { + var databaseName string + + if v := cluster.DatabaseName; v != nil { + databaseName = *cluster.DatabaseName + } + results = append( results, e.factory.CreateAbstractResource( @@ -39,6 +45,7 @@ func (e *RDSClusterEnumerator) Enumerate() ([]*resource.Resource, error) { *cluster.DBClusterIdentifier, map[string]interface{}{ "cluster_identifier": *cluster.DBClusterIdentifier, + "database_name": databaseName, }, ), ) diff --git a/pkg/remote/rds_scanner_test.go b/pkg/remote/rds_scanner_test.go index 23dfa86f..227c1f3d 100644 --- a/pkg/remote/rds_scanner_test.go +++ b/pkg/remote/rds_scanner_test.go @@ -249,7 +249,13 @@ func TestRDSCluster(t *testing.T) { dirName: "aws_rds_clusters_results", mocks: func(repository *repository.MockRDSRepository, alerter *mocks.AlerterInterface) { repository.On("ListAllDBClusters").Return([]*rds.DBCluster{ - {DBClusterIdentifier: awssdk.String("aurora-cluster-demo")}, + { + DBClusterIdentifier: awssdk.String("aurora-cluster-demo"), + DatabaseName: awssdk.String("mydb"), + }, + { + DBClusterIdentifier: awssdk.String("aurora-cluster-demo-2"), + }, }, nil) }, }, diff --git a/pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-2-aurora-cluster-demo-2-.res.golden.json b/pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-2-aurora-cluster-demo-2-.res.golden.json new file mode 100755 index 00000000..6e53b8cc --- /dev/null +++ b/pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-2-aurora-cluster-demo-2-.res.golden.json @@ -0,0 +1,5 @@ +{ + "Typ": "WyJvYmplY3QiLHsiYWxsb3dfbWFqb3JfdmVyc2lvbl91cGdyYWRlIjoiYm9vbCIsImFwcGx5X2ltbWVkaWF0ZWx5IjoiYm9vbCIsImFybiI6InN0cmluZyIsImF2YWlsYWJpbGl0eV96b25lcyI6WyJzZXQiLCJzdHJpbmciXSwiYmFja3RyYWNrX3dpbmRvdyI6Im51bWJlciIsImJhY2t1cF9yZXRlbnRpb25fcGVyaW9kIjoibnVtYmVyIiwiY2x1c3Rlcl9pZGVudGlmaWVyIjoic3RyaW5nIiwiY2x1c3Rlcl9pZGVudGlmaWVyX3ByZWZpeCI6InN0cmluZyIsImNsdXN0ZXJfbWVtYmVycyI6WyJzZXQiLCJzdHJpbmciXSwiY2x1c3Rlcl9yZXNvdXJjZV9pZCI6InN0cmluZyIsImNvcHlfdGFnc190b19zbmFwc2hvdCI6ImJvb2wiLCJkYXRhYmFzZV9uYW1lIjoic3RyaW5nIiwiZGJfY2x1c3Rlcl9wYXJhbWV0ZXJfZ3JvdXBfbmFtZSI6InN0cmluZyIsImRiX3N1Ym5ldF9ncm91cF9uYW1lIjoic3RyaW5nIiwiZGVsZXRpb25fcHJvdGVjdGlvbiI6ImJvb2wiLCJlbmFibGVfaHR0cF9lbmRwb2ludCI6ImJvb2wiLCJlbmFibGVkX2Nsb3Vkd2F0Y2hfbG9nc19leHBvcnRzIjpbInNldCIsInN0cmluZyJdLCJlbmRwb2ludCI6InN0cmluZyIsImVuZ2luZSI6InN0cmluZyIsImVuZ2luZV9tb2RlIjoic3RyaW5nIiwiZW5naW5lX3ZlcnNpb24iOiJzdHJpbmciLCJmaW5hbF9zbmFwc2hvdF9pZGVudGlmaWVyIjoic3RyaW5nIiwiZ2xvYmFsX2NsdXN0ZXJfaWRlbnRpZmllciI6InN0cmluZyIsImhvc3RlZF96b25lX2lkIjoic3RyaW5nIiwiaWFtX2RhdGFiYXNlX2F1dGhlbnRpY2F0aW9uX2VuYWJsZWQiOiJib29sIiwiaWFtX3JvbGVzIjpbInNldCIsInN0cmluZyJdLCJpZCI6InN0cmluZyIsImttc19rZXlfaWQiOiJzdHJpbmciLCJtYXN0ZXJfcGFzc3dvcmQiOiJzdHJpbmciLCJtYXN0ZXJfdXNlcm5hbWUiOiJzdHJpbmciLCJwb3J0IjoibnVtYmVyIiwicHJlZmVycmVkX2JhY2t1cF93aW5kb3ciOiJzdHJpbmciLCJwcmVmZXJyZWRfbWFpbnRlbmFuY2Vfd2luZG93Ijoic3RyaW5nIiwicmVhZGVyX2VuZHBvaW50Ijoic3RyaW5nIiwicmVwbGljYXRpb25fc291cmNlX2lkZW50aWZpZXIiOiJzdHJpbmciLCJyZXN0b3JlX3RvX3BvaW50X2luX3RpbWUiOlsibGlzdCIsWyJvYmplY3QiLHsicmVzdG9yZV90b190aW1lIjoic3RyaW5nIiwicmVzdG9yZV90eXBlIjoic3RyaW5nIiwic291cmNlX2NsdXN0ZXJfaWRlbnRpZmllciI6InN0cmluZyIsInVzZV9sYXRlc3RfcmVzdG9yYWJsZV90aW1lIjoiYm9vbCJ9XV0sInMzX2ltcG9ydCI6WyJsaXN0IixbIm9iamVjdCIseyJidWNrZXRfbmFtZSI6InN0cmluZyIsImJ1Y2tldF9wcmVmaXgiOiJzdHJpbmciLCJpbmdlc3Rpb25fcm9sZSI6InN0cmluZyIsInNvdXJjZV9lbmdpbmUiOiJzdHJpbmciLCJzb3VyY2VfZW5naW5lX3ZlcnNpb24iOiJzdHJpbmcifV1dLCJzY2FsaW5nX2NvbmZpZ3VyYXRpb24iOlsibGlzdCIsWyJvYmplY3QiLHsiYXV0b19wYXVzZSI6ImJvb2wiLCJtYXhfY2FwYWNpdHkiOiJudW1iZXIiLCJtaW5fY2FwYWNpdHkiOiJudW1iZXIiLCJzZWNvbmRzX3VudGlsX2F1dG9fcGF1c2UiOiJudW1iZXIiLCJ0aW1lb3V0X2FjdGlvbiI6InN0cmluZyJ9XV0sInNraXBfZmluYWxfc25hcHNob3QiOiJib29sIiwic25hcHNob3RfaWRlbnRpZmllciI6InN0cmluZyIsInNvdXJjZV9yZWdpb24iOiJzdHJpbmciLCJzdG9yYWdlX2VuY3J5cHRlZCI6ImJvb2wiLCJ0YWdzIjpbIm1hcCIsInN0cmluZyJdLCJ0aW1lb3V0cyI6WyJvYmplY3QiLHsiY3JlYXRlIjoic3RyaW5nIiwiZGVsZXRlIjoic3RyaW5nIiwidXBkYXRlIjoic3RyaW5nIn1dLCJ2cGNfc2VjdXJpdHlfZ3JvdXBfaWRzIjpbInNldCIsInN0cmluZyJdfV0=", + "Val": "eyJhbGxvd19tYWpvcl92ZXJzaW9uX3VwZ3JhZGUiOm51bGwsImFwcGx5X2ltbWVkaWF0ZWx5IjpudWxsLCJhcm4iOiJhcm46YXdzOnJkczp1cy1lYXN0LTE6NTMzOTQ4MTI0ODc5OmNsdXN0ZXI6YXVyb3JhLWNsdXN0ZXItZGVtbyIsImF2YWlsYWJpbGl0eV96b25lcyI6WyJ1cy1lYXN0LTFhIiwidXMtZWFzdC0xYiIsInVzLWVhc3QtMWQiXSwiYmFja3RyYWNrX3dpbmRvdyI6MCwiYmFja3VwX3JldGVudGlvbl9wZXJpb2QiOjUsImNsdXN0ZXJfaWRlbnRpZmllciI6ImF1cm9yYS1jbHVzdGVyLWRlbW8tMiIsImNsdXN0ZXJfaWRlbnRpZmllcl9wcmVmaXgiOm51bGwsImNsdXN0ZXJfbWVtYmVycyI6WyJhdXJvcmEtY2x1c3Rlci1kZW1vLTAiXSwiY2x1c3Rlcl9yZXNvdXJjZV9pZCI6ImNsdXN0ZXItVElTWURTU1g0SjVSNlpHVVRWNkxMSlc3M0UiLCJjb3B5X3RhZ3NfdG9fc25hcHNob3QiOmZhbHNlLCJkYXRhYmFzZV9uYW1lIjoiIiwiZGJfY2x1c3Rlcl9wYXJhbWV0ZXJfZ3JvdXBfbmFtZSI6ImRlZmF1bHQuYXVyb3JhLXBvc3RncmVzcWwxMSIsImRiX3N1Ym5ldF9ncm91cF9uYW1lIjoiZGVmYXVsdCIsImRlbGV0aW9uX3Byb3RlY3Rpb24iOmZhbHNlLCJlbmFibGVfaHR0cF9lbmRwb2ludCI6ZmFsc2UsImVuYWJsZWRfY2xvdWR3YXRjaF9sb2dzX2V4cG9ydHMiOltdLCJlbmRwb2ludCI6ImF1cm9yYS1jbHVzdGVyLWRlbW8uY2x1c3Rlci1jZDUzOXI2cXVpdXgudXMtZWFzdC0xLnJkcy5hbWF6b25hd3MuY29tIiwiZW5naW5lIjoiYXVyb3JhLXBvc3RncmVzcWwiLCJlbmdpbmVfbW9kZSI6InByb3Zpc2lvbmVkIiwiZW5naW5lX3ZlcnNpb24iOiIxMS45IiwiZmluYWxfc25hcHNob3RfaWRlbnRpZmllciI6bnVsbCwiZ2xvYmFsX2NsdXN0ZXJfaWRlbnRpZmllciI6IiIsImhvc3RlZF96b25lX2lkIjoiWjJSMklUVUdQTTYxQU0iLCJpYW1fZGF0YWJhc2VfYXV0aGVudGljYXRpb25fZW5hYmxlZCI6ZmFsc2UsImlhbV9yb2xlcyI6W10sImlkIjoiYXVyb3JhLWNsdXN0ZXItZGVtbyIsImttc19rZXlfaWQiOiIiLCJtYXN0ZXJfcGFzc3dvcmQiOm51bGwsIm1hc3Rlcl91c2VybmFtZSI6ImZvbyIsInBvcnQiOjU0MzIsInByZWZlcnJlZF9iYWNrdXBfd2luZG93IjoiMDc6MDAtMDk6MDAiLCJwcmVmZXJyZWRfbWFpbnRlbmFuY2Vfd2luZG93IjoiZnJpOjAzOjAzLWZyaTowMzozMyIsInJlYWRlcl9lbmRwb2ludCI6ImF1cm9yYS1jbHVzdGVyLWRlbW8uY2x1c3Rlci1yby1jZDUzOXI2cXVpdXgudXMtZWFzdC0xLnJkcy5hbWF6b25hd3MuY29tIiwicmVwbGljYXRpb25fc291cmNlX2lkZW50aWZpZXIiOiIiLCJyZXN0b3JlX3RvX3BvaW50X2luX3RpbWUiOm51bGwsInMzX2ltcG9ydCI6bnVsbCwic2NhbGluZ19jb25maWd1cmF0aW9uIjpbXSwic2tpcF9maW5hbF9zbmFwc2hvdCI6bnVsbCwic25hcHNob3RfaWRlbnRpZmllciI6bnVsbCwic291cmNlX3JlZ2lvbiI6bnVsbCwic3RvcmFnZV9lbmNyeXB0ZWQiOmZhbHNlLCJ0YWdzIjp7fSwidGltZW91dHMiOnsiY3JlYXRlIjpudWxsLCJkZWxldGUiOm51bGwsInVwZGF0ZSI6bnVsbH0sInZwY19zZWN1cml0eV9ncm91cF9pZHMiOlsic2ctNDllMzg2NDYiXX0=", + "Err": null +} \ No newline at end of file diff --git a/pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-aurora-cluster-demo.res.golden.json b/pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-aurora-cluster-demo-mydb.res.golden.json similarity index 100% rename from pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-aurora-cluster-demo.res.golden.json rename to pkg/remote/test/aws_rds_clusters_results/aws_rds_cluster-aurora-cluster-demo-aurora-cluster-demo-mydb.res.golden.json diff --git a/pkg/remote/test/aws_rds_clusters_results/results.golden.json b/pkg/remote/test/aws_rds_clusters_results/results.golden.json index 41ece884..7bcabcf8 100755 --- a/pkg/remote/test/aws_rds_clusters_results/results.golden.json +++ b/pkg/remote/test/aws_rds_clusters_results/results.golden.json @@ -1,57 +1,112 @@ [ - { - "allow_major_version_upgrade": null, - "apply_immediately": null, - "arn": "arn:aws:rds:us-east-1:533948124879:cluster:aurora-cluster-demo", - "availability_zones": [ - "us-east-1a", - "us-east-1b", - "us-east-1d" - ], - "backtrack_window": 0, - "backup_retention_period": 5, - "cluster_identifier": "aurora-cluster-demo", - "cluster_identifier_prefix": null, - "cluster_members": [ - "aurora-cluster-demo-0" - ], - "cluster_resource_id": "cluster-TISYDSSX4J5R6ZGUTV6LLJW73E", - "copy_tags_to_snapshot": false, - "database_name": "mydb", - "db_cluster_parameter_group_name": "default.aurora-postgresql11", - "db_subnet_group_name": "default", - "deletion_protection": false, - "enable_http_endpoint": false, - "enabled_cloudwatch_logs_exports": null, - "endpoint": "aurora-cluster-demo.cluster-cd539r6quiux.us-east-1.rds.amazonaws.com", - "engine": "aurora-postgresql", - "engine_mode": "provisioned", - "engine_version": "11.9", - "final_snapshot_identifier": null, - "global_cluster_identifier": "", - "hosted_zone_id": "Z2R2ITUGPM61AM", - "iam_database_authentication_enabled": false, - "iam_roles": null, - "id": "aurora-cluster-demo", - "kms_key_id": "", - "master_password": null, - "master_username": "foo", - "port": 5432, - "preferred_backup_window": "07:00-09:00", - "preferred_maintenance_window": "fri:03:03-fri:03:33", - "reader_endpoint": "aurora-cluster-demo.cluster-ro-cd539r6quiux.us-east-1.rds.amazonaws.com", - "replication_source_identifier": "", - "restore_to_point_in_time": null, - "s3_import": null, - "scaling_configuration": null, - "skip_final_snapshot": false, - "snapshot_identifier": null, - "source_region": null, - "storage_encrypted": false, - "tags": null, - "timeouts": null, - "vpc_security_group_ids": [ - "sg-49e38646" - ] - } + { + "allow_major_version_upgrade": null, + "apply_immediately": null, + "arn": "arn:aws:rds:us-east-1:533948124879:cluster:aurora-cluster-demo", + "availability_zones": [ + "us-east-1a", + "us-east-1b", + "us-east-1d" + ], + "backtrack_window": 0, + "backup_retention_period": 5, + "cluster_identifier": "aurora-cluster-demo", + "cluster_identifier_prefix": null, + "cluster_members": [ + "aurora-cluster-demo-0" + ], + "cluster_resource_id": "cluster-TISYDSSX4J5R6ZGUTV6LLJW73E", + "copy_tags_to_snapshot": false, + "database_name": "mydb", + "db_cluster_parameter_group_name": "default.aurora-postgresql11", + "db_subnet_group_name": "default", + "deletion_protection": false, + "enable_http_endpoint": false, + "enabled_cloudwatch_logs_exports": null, + "endpoint": "aurora-cluster-demo.cluster-cd539r6quiux.us-east-1.rds.amazonaws.com", + "engine": "aurora-postgresql", + "engine_mode": "provisioned", + "engine_version": "11.9", + "final_snapshot_identifier": null, + "global_cluster_identifier": "", + "hosted_zone_id": "Z2R2ITUGPM61AM", + "iam_database_authentication_enabled": false, + "iam_roles": null, + "id": "aurora-cluster-demo", + "kms_key_id": "", + "master_password": null, + "master_username": "foo", + "port": 5432, + "preferred_backup_window": "07:00-09:00", + "preferred_maintenance_window": "fri:03:03-fri:03:33", + "reader_endpoint": "aurora-cluster-demo.cluster-ro-cd539r6quiux.us-east-1.rds.amazonaws.com", + "replication_source_identifier": "", + "restore_to_point_in_time": null, + "s3_import": null, + "scaling_configuration": null, + "skip_final_snapshot": false, + "snapshot_identifier": null, + "source_region": null, + "storage_encrypted": false, + "tags": null, + "timeouts": null, + "vpc_security_group_ids": [ + "sg-49e38646" + ] + }, + { + "allow_major_version_upgrade": null, + "apply_immediately": null, + "arn": "arn:aws:rds:us-east-1:533948124879:cluster:aurora-cluster-demo", + "availability_zones": [ + "us-east-1a", + "us-east-1b", + "us-east-1d" + ], + "backtrack_window": 0, + "backup_retention_period": 5, + "cluster_identifier": "aurora-cluster-demo-2", + "cluster_identifier_prefix": null, + "cluster_members": [ + "aurora-cluster-demo-0" + ], + "cluster_resource_id": "cluster-TISYDSSX4J5R6ZGUTV6LLJW73E", + "copy_tags_to_snapshot": false, + "database_name": "", + "db_cluster_parameter_group_name": "default.aurora-postgresql11", + "db_subnet_group_name": "default", + "deletion_protection": false, + "enable_http_endpoint": false, + "enabled_cloudwatch_logs_exports": null, + "endpoint": "aurora-cluster-demo.cluster-cd539r6quiux.us-east-1.rds.amazonaws.com", + "engine": "aurora-postgresql", + "engine_mode": "provisioned", + "engine_version": "11.9", + "final_snapshot_identifier": null, + "global_cluster_identifier": "", + "hosted_zone_id": "Z2R2ITUGPM61AM", + "iam_database_authentication_enabled": false, + "iam_roles": null, + "id": "aurora-cluster-demo", + "kms_key_id": "", + "master_password": null, + "master_username": "foo", + "port": 5432, + "preferred_backup_window": "07:00-09:00", + "preferred_maintenance_window": "fri:03:03-fri:03:33", + "reader_endpoint": "aurora-cluster-demo.cluster-ro-cd539r6quiux.us-east-1.rds.amazonaws.com", + "replication_source_identifier": "", + "restore_to_point_in_time": null, + "s3_import": null, + "scaling_configuration": null, + "skip_final_snapshot": false, + "snapshot_identifier": null, + "source_region": null, + "storage_encrypted": false, + "tags": null, + "timeouts": null, + "vpc_security_group_ids": [ + "sg-49e38646" + ] + } ] \ No newline at end of file diff --git a/pkg/resource/aws/aws_rds_cluster.go b/pkg/resource/aws/aws_rds_cluster.go index e89dad15..31e20893 100644 --- a/pkg/resource/aws/aws_rds_cluster.go +++ b/pkg/resource/aws/aws_rds_cluster.go @@ -10,6 +10,7 @@ func initAwsRDSClusterMetaData(resourceSchemaRepository resource.SchemaRepositor resourceSchemaRepository.SetResolveReadAttributesFunc(AwsRDSClusterResourceType, func(res *resource.Resource) map[string]string { return map[string]string{ "cluster_identifier": *res.Attributes().GetString("cluster_identifier"), + "database_name": *res.Attributes().GetString("database_name"), } }) resourceSchemaRepository.SetNormalizeFunc(AwsRDSClusterResourceType, func(res *resource.Resource) { @@ -18,6 +19,10 @@ func initAwsRDSClusterMetaData(resourceSchemaRepository resource.SchemaRepositor val.SafeDelete([]string{"master_password"}) val.SafeDelete([]string{"cluster_members"}) val.SafeDelete([]string{"skip_final_snapshot"}) + val.SafeDelete([]string{"allow_major_version_upgrade"}) + val.SafeDelete([]string{"apply_immediately"}) + val.SafeDelete([]string{"final_snapshot_identifier"}) + val.SafeDelete([]string{"source_region"}) }) resourceSchemaRepository.SetFlags(AwsRDSClusterResourceType, resource.FlagDeepMode) }