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,
last_modified_date,
version,
tags=None,
):
self.name = name
self.type = type
@ -54,6 +55,7 @@ class Parameter(BaseModel):
self.keyid = keyid
self.last_modified_date = last_modified_date
self.version = version
self.tags = tags or []
self.labels = []
if self.type == "SecureString":
@ -1151,6 +1153,12 @@ class SimpleSystemManagerBackend(BaseBackend):
values = ["/" + value.strip("/") for value in values]
elif key == "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:
return False
@ -1274,7 +1282,7 @@ class SimpleSystemManagerBackend(BaseBackend):
return [invalid_labels, version]
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(
"/"
@ -1315,6 +1323,7 @@ class SimpleSystemManagerBackend(BaseBackend):
keyid,
last_modified_date,
version,
tags or [],
)
)
return version

View File

@ -247,9 +247,10 @@ class SimpleSystemManagerResponse(BaseResponse):
allowed_pattern = self._get_param("AllowedPattern")
keyid = self._get_param("KeyId")
overwrite = self._get_param("Overwrite", False)
tags = self._get_param("Tags", [])
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:

View File

@ -962,6 +962,28 @@ def test_describe_parameters_attributes():
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
def test_get_parameter_invalid():
client = client = boto3.client("ssm", region_name="us-east-1")