ResourceTaggingAPI: Add support for AWS::RDS::DBCluster resource (#5999)

This commit is contained in:
Brian Pandola 2023-02-28 03:22:42 -08:00 committed by GitHub
parent 8eaa9fa370
commit 98c8cd3b5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 0 deletions

View File

@ -326,6 +326,21 @@ class ResourceGroupsTaggingAPIBackend(BaseBackend):
yield {"ResourceARN": f"{kms_key.arn}", "Tags": tags} yield {"ResourceARN": f"{kms_key.arn}", "Tags": tags}
# RDS Cluster
if (
not resource_type_filters
or "rds" in resource_type_filters
or "rds:cluster" in resource_type_filters
):
for cluster in self.rds_backend.clusters.values():
tags = cluster.get_tags()
if not tags or not tag_filter(tags):
continue
yield {
"ResourceARN": cluster.db_cluster_arn,
"Tags": tags,
}
# RDS Instance # RDS Instance
if ( if (
not resource_type_filters not resource_type_filters

View File

@ -422,6 +422,50 @@ def test_get_resources_rds():
assert_response(resp, 2) assert_response(resp, 2)
@mock_rds
@mock_resourcegroupstaggingapi
def test_get_resources_rds_clusters():
client = boto3.client("rds", region_name="us-west-2")
resources_tagged = []
resources_untagged = []
for i in range(3):
cluster = client.create_db_cluster(
DBClusterIdentifier=f"db-cluster-{i}",
Engine="postgres",
MasterUsername="admin",
MasterUserPassword="P@ssw0rd!",
CopyTagsToSnapshot=True if i else False,
Tags=[{"Key": "test", "Value": f"value-{i}"}] if i else [],
).get("DBCluster")
snapshot = client.create_db_cluster_snapshot(
DBClusterIdentifier=cluster["DBClusterIdentifier"],
DBClusterSnapshotIdentifier=f"snapshot-{i}",
).get("DBClusterSnapshot")
group = resources_tagged if i else resources_untagged
group.append(cluster["DBClusterArn"])
group.append(snapshot["DBClusterSnapshotArn"])
def assert_response(response, expected_count, resource_type=None):
results = response.get("ResourceTagMappingList", [])
results.should.have.length_of(expected_count)
for item in results:
arn = item["ResourceARN"]
arn.should.be.within(resources_tagged)
arn.should_not.be.within(resources_untagged)
if resource_type:
sure.this(f":{resource_type}:").should.be.within(arn)
rtapi = boto3.client("resourcegroupstaggingapi", region_name="us-west-2")
resp = rtapi.get_resources(ResourceTypeFilters=["rds"])
assert_response(resp, 4)
resp = rtapi.get_resources(ResourceTypeFilters=["rds:cluster"])
assert_response(resp, 2, resource_type="cluster")
resp = rtapi.get_resources(ResourceTypeFilters=["rds:cluster-snapshot"])
assert_response(resp, 2, resource_type="cluster-snapshot")
resp = rtapi.get_resources(TagFilters=[{"Key": "test", "Values": ["value-1"]}])
assert_response(resp, 2)
@mock_lambda @mock_lambda
@mock_resourcegroupstaggingapi @mock_resourcegroupstaggingapi
@mock_iam @mock_iam