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 __future__ import unicode_literals
|
||||||
|
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
from moto.core import BaseBackend, BaseModel
|
from moto.core import BaseBackend, BaseModel
|
||||||
from moto.ec2 import ec2_backends
|
from moto.ec2 import ec2_backends
|
||||||
|
|
||||||
@ -42,6 +44,7 @@ class SimpleSystemManagerBackend(BaseBackend):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._parameters = {}
|
self._parameters = {}
|
||||||
|
self._resource_tags = defaultdict(lambda: defaultdict(dict))
|
||||||
|
|
||||||
def delete_parameter(self, name):
|
def delete_parameter(self, name):
|
||||||
try:
|
try:
|
||||||
@ -68,6 +71,19 @@ class SimpleSystemManagerBackend(BaseBackend):
|
|||||||
self._parameters[name] = Parameter(
|
self._parameters[name] = Parameter(
|
||||||
name, value, type, description, keyid)
|
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 = {}
|
ssm_backends = {}
|
||||||
for region, ec2_backend in ec2_backends.items():
|
for region, ec2_backend in ec2_backends.items():
|
||||||
|
@ -108,3 +108,28 @@ class SimpleSystemManagerResponse(BaseResponse):
|
|||||||
self.ssm_backend.put_parameter(
|
self.ssm_backend.put_parameter(
|
||||||
name, description, value, type_, keyid, overwrite)
|
name, description, value, type_, keyid, overwrite)
|
||||||
return json.dumps({})
|
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]['Name'].should.equal('test')
|
||||||
response['Parameters'][0]['Value'].should.equal('value')
|
response['Parameters'][0]['Value'].should.equal('value')
|
||||||
response['Parameters'][0]['Type'].should.equal('SecureString')
|
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