Merge pull request #1024 from jpb/ssm-tags
Add add, remove, list endpoints for SSM tags
This commit is contained in:
commit
c350562c35
@ -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():
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user