From 14980371d796ef849b1ea401ce2c028911b537d1 Mon Sep 17 00:00:00 2001 From: usmangani1 Date: Thu, 22 Oct 2020 15:44:32 +0530 Subject: [PATCH] FIX:Add secrets Manager Tag resource Funtionality (#3392) * FIX:Add secrets Manager Tag resoruce Funtionality * Fixed review comments Co-authored-by: usmankb --- moto/secretsmanager/models.py | 13 ++++++++ moto/secretsmanager/responses.py | 5 ++++ .../test_secretsmanager.py | 30 +++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/moto/secretsmanager/models.py b/moto/secretsmanager/models.py index f39b91eaa..46c1d1f05 100644 --- a/moto/secretsmanager/models.py +++ b/moto/secretsmanager/models.py @@ -565,6 +565,19 @@ class SecretsManagerBackend(BaseBackend): return secret.arn, secret.name + def tag_resource(self, secret_id, tags): + + if secret_id not in self.secrets.keys(): + raise SecretNotFoundException() + + secret = self.secrets[secret_id] + old_tags = secret.tags + + for tag in tags: + old_tags.append(tag) + + return secret_id + @staticmethod def get_resource_policy(secret_id): resource_policy = { diff --git a/moto/secretsmanager/responses.py b/moto/secretsmanager/responses.py index fcf991ea2..e1c0517db 100644 --- a/moto/secretsmanager/responses.py +++ b/moto/secretsmanager/responses.py @@ -157,3 +157,8 @@ class SecretsManagerResponse(BaseResponse): return secretsmanager_backends[self.region].get_resource_policy( secret_id=secret_id ) + + def tag_resource(self): + secret_id = self._get_param("SecretId") + tags = self._get_param("Tags", if_none=[]) + return secretsmanager_backends[self.region].tag_resource(secret_id, tags) diff --git a/tests/test_secretsmanager/test_secretsmanager.py b/tests/test_secretsmanager/test_secretsmanager.py index dcb3b9b0c..cbcee7499 100644 --- a/tests/test_secretsmanager/test_secretsmanager.py +++ b/tests/test_secretsmanager/test_secretsmanager.py @@ -912,3 +912,33 @@ def test_update_secret_marked_as_deleted_after_restoring(): assert updated_secret["ARN"] assert updated_secret["Name"] == "test-secret" assert updated_secret["VersionId"] != "" + + +@mock_secretsmanager +def test_tag_resource(): + conn = boto3.client("secretsmanager", region_name="us-west-2") + conn.create_secret(Name="test-secret", SecretString="foosecret") + conn.tag_resource( + SecretId="test-secret", Tags=[{"Key": "FirstTag", "Value": "SomeValue"},], + ) + + conn.tag_resource( + SecretId="test-secret", Tags=[{"Key": "SecondTag", "Value": "AnotherValue"},], + ) + + secrets = conn.list_secrets() + assert secrets["SecretList"][0].get("Tags") == [ + {"Key": "FirstTag", "Value": "SomeValue"}, + {"Key": "SecondTag", "Value": "AnotherValue"}, + ] + + with assert_raises(ClientError) as cm: + conn.tag_resource( + SecretId="dummy-test-secret", + Tags=[{"Key": "FirstTag", "Value": "SomeValue"},], + ) + + assert_equal( + "Secrets Manager can't find the specified secret.", + cm.exception.response["Error"]["Message"], + )