Support SSM Parameter tags (#3739)

This commit is contained in:
Joakim Saario 2021-03-02 10:00:26 +01:00 committed by GitHub
parent 3c810ad152
commit 457402fbe2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 2 deletions

View File

@ -46,6 +46,7 @@ class Parameter(BaseModel):
keyid, keyid,
last_modified_date, last_modified_date,
version, version,
tags=None,
): ):
self.name = name self.name = name
self.type = type self.type = type
@ -54,6 +55,7 @@ class Parameter(BaseModel):
self.keyid = keyid self.keyid = keyid
self.last_modified_date = last_modified_date self.last_modified_date = last_modified_date
self.version = version self.version = version
self.tags = tags or []
self.labels = [] self.labels = []
if self.type == "SecureString": if self.type == "SecureString":
@ -1151,6 +1153,12 @@ class SimpleSystemManagerBackend(BaseBackend):
values = ["/" + value.strip("/") for value in values] values = ["/" + value.strip("/") for value in values]
elif key == "Type": elif key == "Type":
what = parameter.type what = parameter.type
elif key.startswith("tag:"):
what = key[4:] or None
for tag in parameter.tags:
if tag["Key"] == what and tag["Value"] in values:
return True
return False
if what is None: if what is None:
return False return False
@ -1274,7 +1282,7 @@ class SimpleSystemManagerBackend(BaseBackend):
return [invalid_labels, version] return [invalid_labels, version]
def put_parameter( def put_parameter(
self, name, description, value, type, allowed_pattern, keyid, overwrite self, name, description, value, type, allowed_pattern, keyid, overwrite, tags,
): ):
if name.lower().lstrip("/").startswith("aws") or name.lower().lstrip( if name.lower().lstrip("/").startswith("aws") or name.lower().lstrip(
"/" "/"
@ -1315,6 +1323,7 @@ class SimpleSystemManagerBackend(BaseBackend):
keyid, keyid,
last_modified_date, last_modified_date,
version, version,
tags or [],
) )
) )
return version return version

View File

@ -247,9 +247,10 @@ class SimpleSystemManagerResponse(BaseResponse):
allowed_pattern = self._get_param("AllowedPattern") allowed_pattern = self._get_param("AllowedPattern")
keyid = self._get_param("KeyId") keyid = self._get_param("KeyId")
overwrite = self._get_param("Overwrite", False) overwrite = self._get_param("Overwrite", False)
tags = self._get_param("Tags", [])
result = self.ssm_backend.put_parameter( result = self.ssm_backend.put_parameter(
name, description, value, type_, allowed_pattern, keyid, overwrite name, description, value, type_, allowed_pattern, keyid, overwrite, tags
) )
if result is None: if result is None:

View File

@ -962,6 +962,28 @@ def test_describe_parameters_attributes():
parameters[1]["Version"].should.equal(1) parameters[1]["Version"].should.equal(1)
@mock_ssm
def test_describe_parameters_tags():
client = boto3.client("ssm", region_name="us-east-1")
client.put_parameter(Name="/foo/bar", Value="spam", Type="String")
client.put_parameter(
Name="/spam/eggs",
Value="eggs",
Type="String",
Tags=[{"Key": "spam", "Value": "eggs"}],
)
response = client.describe_parameters(
ParameterFilters=[{"Key": "tag:spam", "Values": ["eggs"]}]
)
parameters = response["Parameters"]
parameters.should.have.length_of(1)
parameters[0]["Name"].should.equal("/spam/eggs")
@mock_ssm @mock_ssm
def test_get_parameter_invalid(): def test_get_parameter_invalid():
client = client = boto3.client("ssm", region_name="us-east-1") client = client = boto3.client("ssm", region_name="us-east-1")