From 2433d64fe264f41481f6266a06d2ead2bef3dbab Mon Sep 17 00:00:00 2001 From: usmangani1 Date: Fri, 29 May 2020 17:01:41 +0530 Subject: [PATCH] Fix: SecretsManager Added VersionIdsToStages key in describe_secret function (#3029) * Fix: SecretsManager Added VersionIdsToStages key in describe_secret function * Added more assertions * Linting Co-authored-by: usmankb Co-authored-by: Bert Blommers --- moto/secretsmanager/models.py | 10 ++++++++++ tests/test_secretsmanager/test_secretsmanager.py | 12 ++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/moto/secretsmanager/models.py b/moto/secretsmanager/models.py index 29bd6c96..01acf2db 100644 --- a/moto/secretsmanager/models.py +++ b/moto/secretsmanager/models.py @@ -274,6 +274,7 @@ class SecretsManagerBackend(BaseBackend): raise SecretNotFoundException() secret = self.secrets[secret_id] + version_id_to_stages = self.form_version_ids_to_stages(secret["versions"]) response = json.dumps( { @@ -291,6 +292,7 @@ class SecretsManagerBackend(BaseBackend): "LastAccessedDate": None, "DeletedDate": secret.get("deleted_date", None), "Tags": secret["tags"], + "VersionIdsToStages": version_id_to_stages, } ) @@ -552,6 +554,14 @@ class SecretsManagerBackend(BaseBackend): } ) + @staticmethod + def form_version_ids_to_stages(secret): + version_id_to_stages = {} + for key, value in secret.items(): + version_id_to_stages[key] = value["version_stages"] + + return version_id_to_stages + secretsmanager_backends = {} for region in Session().get_available_regions("secretsmanager"): diff --git a/tests/test_secretsmanager/test_secretsmanager.py b/tests/test_secretsmanager/test_secretsmanager.py index 6ec53460..0fe23fd7 100644 --- a/tests/test_secretsmanager/test_secretsmanager.py +++ b/tests/test_secretsmanager/test_secretsmanager.py @@ -733,25 +733,33 @@ def test_put_secret_value_versions_differ_if_same_secret_put_twice(): def test_put_secret_value_maintains_description_and_tags(): conn = boto3.client("secretsmanager", region_name="us-west-2") - conn.create_secret( + previous_response = conn.create_secret( Name=DEFAULT_SECRET_NAME, SecretString="foosecret", Description="desc", Tags=[{"Key": "Foo", "Value": "Bar"}, {"Key": "Mykey", "Value": "Myvalue"}], ) + previous_version_id = previous_response["VersionId"] conn = boto3.client("secretsmanager", region_name="us-west-2") - conn.put_secret_value( + current_response = conn.put_secret_value( SecretId=DEFAULT_SECRET_NAME, SecretString="dupe_secret", VersionStages=["AWSCURRENT"], ) + current_version_id = current_response["VersionId"] + secret_details = conn.describe_secret(SecretId=DEFAULT_SECRET_NAME) assert secret_details["Tags"] == [ {"Key": "Foo", "Value": "Bar"}, {"Key": "Mykey", "Value": "Myvalue"}, ] assert secret_details["Description"] == "desc" + assert secret_details["VersionIdsToStages"] is not None + assert previous_version_id in secret_details["VersionIdsToStages"] + assert current_version_id in secret_details["VersionIdsToStages"] + assert secret_details["VersionIdsToStages"][previous_version_id] == ["AWSPREVIOUS"] + assert secret_details["VersionIdsToStages"][current_version_id] == ["AWSCURRENT"] @mock_secretsmanager