Added filtering
This commit is contained in:
parent
c118d12e6f
commit
db20dfcd82
@ -28,11 +28,14 @@ class Parameter(BaseModel):
|
|||||||
return value[len(prefix):]
|
return value[len(prefix):]
|
||||||
|
|
||||||
def response_object(self, decrypt=False):
|
def response_object(self, decrypt=False):
|
||||||
return {
|
r = {
|
||||||
'Name': self.name,
|
'Name': self.name,
|
||||||
'Type': self.type,
|
'Type': self.type,
|
||||||
'Value': self.decrypt(self.value) if decrypt else self.value
|
'Value': self.decrypt(self.value) if decrypt else self.value
|
||||||
}
|
}
|
||||||
|
if self.keyid:
|
||||||
|
r['KeyId'] = self.keyid
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
class SimpleSystemManagerBackend(BaseBackend):
|
class SimpleSystemManagerBackend(BaseBackend):
|
||||||
|
@ -44,16 +44,61 @@ class SimpleSystemManagerResponse(BaseResponse):
|
|||||||
return json.dumps(response)
|
return json.dumps(response)
|
||||||
|
|
||||||
def describe_parameters(self):
|
def describe_parameters(self):
|
||||||
# filters = self._get_param('Filters')
|
page_size = 10
|
||||||
|
filters = self._get_param('Filters')
|
||||||
|
token = self._get_param('NextToken')
|
||||||
|
if hasattr(token, 'strip'):
|
||||||
|
token = token.strip()
|
||||||
|
if not token:
|
||||||
|
token = '0'
|
||||||
|
|
||||||
|
token = int(token)
|
||||||
|
|
||||||
|
|
||||||
result = self.ssm_backend.get_all_parameters()
|
result = self.ssm_backend.get_all_parameters()
|
||||||
|
|
||||||
response = {
|
response = {
|
||||||
'Parameters': [],
|
'Parameters': [],
|
||||||
}
|
}
|
||||||
|
|
||||||
for parameter in result:
|
end = token + page_size
|
||||||
|
for parameter in result[token:]:
|
||||||
param_data = parameter.response_object(False)
|
param_data = parameter.response_object(False)
|
||||||
response['Parameters'].append(param_data)
|
add = False
|
||||||
|
|
||||||
|
if filters:
|
||||||
|
for filter in filters:
|
||||||
|
if filter['Key'] == 'Name':
|
||||||
|
k = param_data['Name']
|
||||||
|
for v in filter['Values']:
|
||||||
|
if k.startswith(v):
|
||||||
|
add = True
|
||||||
|
break
|
||||||
|
elif filter['Key'] == 'Type':
|
||||||
|
k = param_data['Type']
|
||||||
|
for v in filter['Values']:
|
||||||
|
if k == v:
|
||||||
|
add = True
|
||||||
|
break
|
||||||
|
elif filter['Key'] == 'KeyId':
|
||||||
|
k = param_data.get('KeyId')
|
||||||
|
if k:
|
||||||
|
for v in filter['Values']:
|
||||||
|
if k == v:
|
||||||
|
add = True
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
add = True
|
||||||
|
|
||||||
|
if add:
|
||||||
|
response['Parameters'].append(param_data)
|
||||||
|
|
||||||
|
token = token + 1
|
||||||
|
if len(response['Parameters']) == page_size:
|
||||||
|
response['NextToken'] = str(end)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return json.dumps(response)
|
return json.dumps(response)
|
||||||
|
|
||||||
|
2
setup.py
2
setup.py
@ -24,7 +24,7 @@ extras_require = {
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='moto',
|
name='moto',
|
||||||
version='1.0.1.1',
|
version='1.0.1.2',
|
||||||
description='A library that allows your python tests to easily'
|
description='A library that allows your python tests to easily'
|
||||||
' mock out the boto library',
|
' mock out the boto library',
|
||||||
author='Steve Pulec',
|
author='Steve Pulec',
|
||||||
|
@ -47,6 +47,143 @@ def test_put_parameter():
|
|||||||
response['Parameters'][0]['Type'].should.equal('String')
|
response['Parameters'][0]['Type'].should.equal('String')
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ssm
|
||||||
|
def test_describe_parameters():
|
||||||
|
client = boto3.client('ssm', region_name='us-east-1')
|
||||||
|
|
||||||
|
client.put_parameter(
|
||||||
|
Name='test',
|
||||||
|
Description='A test parameter',
|
||||||
|
Value='value',
|
||||||
|
Type='String')
|
||||||
|
|
||||||
|
response = client.describe_parameters()
|
||||||
|
|
||||||
|
len(response['Parameters']).should.equal(1)
|
||||||
|
response['Parameters'][0]['Name'].should.equal('test')
|
||||||
|
response['Parameters'][0]['Type'].should.equal('String')
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ssm
|
||||||
|
def test_describe_parameters_paging():
|
||||||
|
client = boto3.client('ssm', region_name='us-east-1')
|
||||||
|
|
||||||
|
for i in range(50):
|
||||||
|
client.put_parameter(
|
||||||
|
Name="param-%d" % i,
|
||||||
|
Value="value-%d" % i,
|
||||||
|
Type="String"
|
||||||
|
)
|
||||||
|
|
||||||
|
response = client.describe_parameters()
|
||||||
|
len(response['Parameters']).should.equal(10)
|
||||||
|
response['NextToken'].should.equal('10')
|
||||||
|
|
||||||
|
response = client.describe_parameters(NextToken=response['NextToken'])
|
||||||
|
len(response['Parameters']).should.equal(10)
|
||||||
|
response['NextToken'].should.equal('20')
|
||||||
|
|
||||||
|
response = client.describe_parameters(NextToken=response['NextToken'])
|
||||||
|
len(response['Parameters']).should.equal(10)
|
||||||
|
response['NextToken'].should.equal('30')
|
||||||
|
|
||||||
|
response = client.describe_parameters(NextToken=response['NextToken'])
|
||||||
|
len(response['Parameters']).should.equal(10)
|
||||||
|
response['NextToken'].should.equal('40')
|
||||||
|
|
||||||
|
response = client.describe_parameters(NextToken=response['NextToken'])
|
||||||
|
len(response['Parameters']).should.equal(10)
|
||||||
|
response['NextToken'].should.equal('50')
|
||||||
|
|
||||||
|
response = client.describe_parameters(NextToken=response['NextToken'])
|
||||||
|
len(response['Parameters']).should.equal(0)
|
||||||
|
''.should.equal(response.get('NextToken', ''))
|
||||||
|
|
||||||
|
@mock_ssm
|
||||||
|
def test_describe_parameters_filter_names():
|
||||||
|
client = boto3.client('ssm', region_name='us-east-1')
|
||||||
|
|
||||||
|
for i in range(50):
|
||||||
|
p = {
|
||||||
|
'Name': "param-%d" % i,
|
||||||
|
'Value': "value-%d" % i,
|
||||||
|
'Type': "String"
|
||||||
|
}
|
||||||
|
if i % 5 == 0:
|
||||||
|
p['Type'] = 'SecureString'
|
||||||
|
p['KeyId'] = 'a key'
|
||||||
|
client.put_parameter(**p)
|
||||||
|
|
||||||
|
|
||||||
|
response = client.describe_parameters(Filters=[
|
||||||
|
{
|
||||||
|
'Key': 'Name',
|
||||||
|
'Values': ['param-45', 'param-22']
|
||||||
|
},
|
||||||
|
])
|
||||||
|
len(response['Parameters']).should.equal(2)
|
||||||
|
response['Parameters'][0]['Name'].should.equal('param-22')
|
||||||
|
response['Parameters'][0]['Type'].should.equal('String')
|
||||||
|
response['Parameters'][1]['Name'].should.equal('param-45')
|
||||||
|
response['Parameters'][1]['Type'].should.equal('SecureString')
|
||||||
|
''.should.equal(response.get('NextToken', ''))
|
||||||
|
|
||||||
|
@mock_ssm
|
||||||
|
def test_describe_parameters_filter_type():
|
||||||
|
client = boto3.client('ssm', region_name='us-east-1')
|
||||||
|
|
||||||
|
for i in range(50):
|
||||||
|
p = {
|
||||||
|
'Name': "param-%d" % i,
|
||||||
|
'Value': "value-%d" % i,
|
||||||
|
'Type': "String"
|
||||||
|
}
|
||||||
|
if i % 5 == 0:
|
||||||
|
p['Type'] = 'SecureString'
|
||||||
|
p['KeyId'] = 'a key'
|
||||||
|
client.put_parameter(**p)
|
||||||
|
|
||||||
|
|
||||||
|
response = client.describe_parameters(Filters=[
|
||||||
|
{
|
||||||
|
'Key': 'Type',
|
||||||
|
'Values': ['SecureString']
|
||||||
|
},
|
||||||
|
])
|
||||||
|
len(response['Parameters']).should.equal(10)
|
||||||
|
response['Parameters'][0]['Name'].should.equal('param-35')
|
||||||
|
response['Parameters'][0]['Type'].should.equal('SecureString')
|
||||||
|
'10'.should.equal(response.get('NextToken', ''))
|
||||||
|
|
||||||
|
@mock_ssm
|
||||||
|
def test_describe_parameters_filter_keyid():
|
||||||
|
client = boto3.client('ssm', region_name='us-east-1')
|
||||||
|
|
||||||
|
for i in range(50):
|
||||||
|
p = {
|
||||||
|
'Name': "param-%d" % i,
|
||||||
|
'Value': "value-%d" % i,
|
||||||
|
'Type': "String"
|
||||||
|
}
|
||||||
|
if i % 5 == 0:
|
||||||
|
p['Type'] = 'SecureString'
|
||||||
|
p['KeyId'] = "key:%d" % i
|
||||||
|
client.put_parameter(**p)
|
||||||
|
|
||||||
|
|
||||||
|
response = client.describe_parameters(Filters=[
|
||||||
|
{
|
||||||
|
'Key': 'KeyId',
|
||||||
|
'Values': ['key:5','key:10']
|
||||||
|
},
|
||||||
|
])
|
||||||
|
len(response['Parameters']).should.equal(2)
|
||||||
|
response['Parameters'][0]['Name'].should.equal('param-10')
|
||||||
|
response['Parameters'][0]['Type'].should.equal('SecureString')
|
||||||
|
response['Parameters'][1]['Name'].should.equal('param-5')
|
||||||
|
response['Parameters'][1]['Type'].should.equal('SecureString')
|
||||||
|
''.should.equal(response.get('NextToken', ''))
|
||||||
|
|
||||||
@mock_ssm
|
@mock_ssm
|
||||||
def test_put_parameter_secure_default_kms():
|
def test_put_parameter_secure_default_kms():
|
||||||
client = boto3.client('ssm', region_name='us-east-1')
|
client = boto3.client('ssm', region_name='us-east-1')
|
||||||
|
Loading…
Reference in New Issue
Block a user