Add add, remove, list endpoints for SSM tags

This commit is contained in:
James Brennan 2017-07-26 11:38:12 +00:00
parent 57c5c6df26
commit a5089c3d69
3 changed files with 71 additions and 0 deletions

View File

@ -1,5 +1,7 @@
from __future__ import unicode_literals
from collections import defaultdict
from moto.core import BaseBackend, BaseModel
from moto.ec2 import ec2_backends
@ -42,6 +44,7 @@ class SimpleSystemManagerBackend(BaseBackend):
def __init__(self):
self._parameters = {}
self._resource_tags = defaultdict(lambda: defaultdict(dict))
def delete_parameter(self, name):
try:
@ -68,6 +71,19 @@ class SimpleSystemManagerBackend(BaseBackend):
self._parameters[name] = Parameter(
name, value, type, description, keyid)
def add_tags_to_resource(self, resource_type, resource_id, tags):
for key, value in tags.items():
self._resource_tags[resource_type][resource_id][key] = value
def remove_tags_from_resource(self, resource_type, resource_id, keys):
tags = self._resource_tags[resource_type][resource_id]
for key in keys:
if key in tags:
del tags[key]
def list_tags_for_resource(self, resource_type, resource_id):
return self._resource_tags[resource_type][resource_id]
ssm_backends = {}
for region, ec2_backend in ec2_backends.items():

View File

@ -108,3 +108,28 @@ class SimpleSystemManagerResponse(BaseResponse):
self.ssm_backend.put_parameter(
name, description, value, type_, keyid, overwrite)
return json.dumps({})
def add_tags_to_resource(self):
resource_id = self._get_param('ResourceId')
resource_type = self._get_param('ResourceType')
tags = {t['Key']: t['Value'] for t in self._get_param('Tags')}
self.ssm_backend.add_tags_to_resource(
resource_id, resource_type, tags)
return json.dumps({})
def remove_tags_from_resource(self):
resource_id = self._get_param('ResourceId')
resource_type = self._get_param('ResourceType')
keys = self._get_param('TagKeys')
self.ssm_backend.remove_tags_from_resource(
resource_id, resource_type, keys)
return json.dumps({})
def list_tags_for_resource(self):
resource_id = self._get_param('ResourceId')
resource_type = self._get_param('ResourceType')
tags = self.ssm_backend.list_tags_for_resource(
resource_id, resource_type)
tag_list = [{'Key': k, 'Value': v} for (k, v) in tags.items()]
response = {'TagList': tag_list}
return json.dumps(response)

View File

@ -247,3 +247,33 @@ def test_put_parameter_secure_custom_kms():
response['Parameters'][0]['Name'].should.equal('test')
response['Parameters'][0]['Value'].should.equal('value')
response['Parameters'][0]['Type'].should.equal('SecureString')
@mock_ssm
def test_add_remove_list_tags_for_resource():
client = boto3.client('ssm', region_name='us-east-1')
client.add_tags_to_resource(
ResourceId='test',
ResourceType='Parameter',
Tags=[{'Key': 'test-key', 'Value': 'test-value'}]
)
response = client.list_tags_for_resource(
ResourceId='test',
ResourceType='Parameter'
)
len(response['TagList']).should.equal(1)
response['TagList'][0]['Key'].should.equal('test-key')
response['TagList'][0]['Value'].should.equal('test-value')
client.remove_tags_from_resource(
ResourceId='test',
ResourceType='Parameter',
TagKeys=['test-key']
)
response = client.list_tags_for_resource(
ResourceId='test',
ResourceType='Parameter'
)
len(response['TagList']).should.equal(0)