Implement ListSecrets

This commit is contained in:
Chris K 2019-04-05 13:33:28 +01:00
parent 120874e408
commit 89e4ab93ee
4 changed files with 64 additions and 6 deletions

View File

@ -3659,7 +3659,7 @@
- [X] get_random_password - [X] get_random_password
- [X] get_secret_value - [X] get_secret_value
- [ ] list_secret_version_ids - [ ] list_secret_version_ids
- [ ] list_secrets - [x] list_secrets
- [ ] put_secret_value - [ ] put_secret_value
- [ ] restore_secret - [ ] restore_secret
- [X] rotate_secret - [X] rotate_secret

View File

@ -189,7 +189,28 @@ class SecretsManagerBackend(BaseBackend):
return response return response
def list_secrets(self, max_results, next_token): def list_secrets(self, max_results, next_token):
# implement here # TODO implement pagination
secret_list = [{
"ARN": secret_arn(self.region, secret['secret_id']),
"DeletedDate": None,
"Description": "",
"KmsKeyId": "",
"LastAccessedDate": None,
"LastChangedDate": None,
"LastRotatedDate": None,
"Name": secret['name'],
"RotationEnabled": secret['rotation_enabled'],
"RotationLambdaARN": secret['rotation_lambda_arn'],
"RotationRules": {
"AutomaticallyAfterDays": secret['auto_rotate_after_days']
},
"SecretVersionsToStages": {
secret['version_id']: ["AWSCURRENT"]
},
"Tags": secret['tags']
} for secret in self.secrets.values()]
return secret_list, next_token return secret_list, next_token

View File

@ -4,6 +4,8 @@ from moto.core.responses import BaseResponse
from .models import secretsmanager_backends from .models import secretsmanager_backends
import json
class SecretsManagerResponse(BaseResponse): class SecretsManagerResponse(BaseResponse):
@ -68,9 +70,8 @@ class SecretsManagerResponse(BaseResponse):
def list_secrets(self): def list_secrets(self):
max_results = self._get_int_param("MaxResults") max_results = self._get_int_param("MaxResults")
next_token = self._get_param("NextToken") next_token = self._get_param("NextToken")
secret_list, next_token = self.secretsmanager_backend.list_secrets( secret_list, next_token = secretsmanager_backends[self.region].list_secrets(
max_results=max_results, max_results=max_results,
next_token=next_token, next_token=next_token,
) )
# TODO: adjust response return json.dumps(dict(SecretList=secret_list, NextToken=next_token))
return json.dumps(dict(secretList=secret_list, nextToken=next_token))

View File

@ -203,6 +203,42 @@ def test_describe_secret_that_does_not_match():
with assert_raises(ClientError): with assert_raises(ClientError):
result = conn.get_secret_value(SecretId='i-dont-match') result = conn.get_secret_value(SecretId='i-dont-match')
@mock_secretsmanager
def test_list_secrets_empty():
conn = boto3.client('secretsmanager', region_name='us-west-2')
secrets = conn.list_secrets()
assert secrets['SecretList'] == []
@mock_secretsmanager
def test_list_secrets():
conn = boto3.client('secretsmanager', region_name='us-west-2')
conn.create_secret(Name='test-secret',
SecretString='foosecret')
conn.create_secret(Name='test-secret-2',
SecretString='barsecret',
Tags=[{
'Key': 'a',
'Value': '1'
}])
secrets = conn.list_secrets()
assert secrets['SecretList'][0]['ARN'] is not None
assert secrets['SecretList'][0]['Name'] == 'test-secret'
assert secrets['SecretList'][1]['ARN'] is not None
assert secrets['SecretList'][1]['Name'] == 'test-secret-2'
assert secrets['SecretList'][1]['Tags'] == [{
'Key': 'a',
'Value': '1'
}]
@mock_secretsmanager @mock_secretsmanager
def test_rotate_secret(): def test_rotate_secret():
secret_name = 'test-secret' secret_name = 'test-secret'