Make putparameter behave more like the real endpoint does, respond with Version or ParameterAlreadyExists (#1464)

This commit is contained in:
ramox- 2018-03-21 16:56:57 +01:00 committed by Jack Danger
parent 5d51329c34
commit 508b392697
3 changed files with 28 additions and 9 deletions

View File

@ -126,6 +126,7 @@ class SimpleSystemManagerBackend(BaseBackend):
last_modified_date = time.time() last_modified_date = time.time()
self._parameters[name] = Parameter( self._parameters[name] = Parameter(
name, value, type, description, keyid, last_modified_date, version) name, value, type, description, keyid, last_modified_date, version)
return version
def add_tags_to_resource(self, resource_type, resource_id, tags): def add_tags_to_resource(self, resource_type, resource_id, tags):
for key, value in tags.items(): for key, value in tags.items():

View File

@ -162,9 +162,18 @@ class SimpleSystemManagerResponse(BaseResponse):
keyid = self._get_param('KeyId') keyid = self._get_param('KeyId')
overwrite = self._get_param('Overwrite', False) overwrite = self._get_param('Overwrite', False)
self.ssm_backend.put_parameter( result = self.ssm_backend.put_parameter(
name, description, value, type_, keyid, overwrite) name, description, value, type_, keyid, overwrite)
return json.dumps({})
if result is None:
error = {
'__type': 'ParameterAlreadyExists',
'message': 'Parameter {0} already exists.'.format(name)
}
return json.dumps(error), dict(status=400)
response = {'Version': result}
return json.dumps(response)
def add_tags_to_resource(self): def add_tags_to_resource(self):
resource_id = self._get_param('ResourceId') resource_id = self._get_param('ResourceId')

View File

@ -97,12 +97,14 @@ def test_get_parameters_by_path():
def test_put_parameter(): def test_put_parameter():
client = boto3.client('ssm', region_name='us-east-1') client = boto3.client('ssm', region_name='us-east-1')
client.put_parameter( response = client.put_parameter(
Name='test', Name='test',
Description='A test parameter', Description='A test parameter',
Value='value', Value='value',
Type='String') Type='String')
response['Version'].should.equal(1)
response = client.get_parameters( response = client.get_parameters(
Names=[ Names=[
'test' 'test'
@ -115,11 +117,16 @@ def test_put_parameter():
response['Parameters'][0]['Type'].should.equal('String') response['Parameters'][0]['Type'].should.equal('String')
response['Parameters'][0]['Version'].should.equal(1) response['Parameters'][0]['Version'].should.equal(1)
try:
client.put_parameter( client.put_parameter(
Name='test', Name='test',
Description='desc 2', Description='desc 2',
Value='value 2', Value='value 2',
Type='String') Type='String')
raise RuntimeError('Should fail')
except botocore.exceptions.ClientError as err:
err.operation_name.should.equal('PutParameter')
err.response['Error']['Message'].should.equal('Parameter test already exists.')
response = client.get_parameters( response = client.get_parameters(
Names=[ Names=[
@ -134,13 +141,15 @@ def test_put_parameter():
response['Parameters'][0]['Type'].should.equal('String') response['Parameters'][0]['Type'].should.equal('String')
response['Parameters'][0]['Version'].should.equal(1) response['Parameters'][0]['Version'].should.equal(1)
client.put_parameter( response = client.put_parameter(
Name='test', Name='test',
Description='desc 3', Description='desc 3',
Value='value 3', Value='value 3',
Type='String', Type='String',
Overwrite=True) Overwrite=True)
response['Version'].should.equal(2)
response = client.get_parameters( response = client.get_parameters(
Names=[ Names=[
'test' 'test'