Store all parameter versions, not just the latest version

This commit is contained in:
William Richard 2019-11-04 12:43:37 -05:00
parent e00af2f73c
commit b4fb4b3b5d
No known key found for this signature in database
GPG Key ID: ACD9DA4E735E6D14

View File

@ -259,7 +259,10 @@ class Command(BaseModel):
class SimpleSystemManagerBackend(BaseBackend): class SimpleSystemManagerBackend(BaseBackend):
def __init__(self): def __init__(self):
self._parameters = {} # each value is a list of all of the versions for a parameter
# to get the current value, grab the last item of the list
self._parameters = defaultdict(list)
self._resource_tags = defaultdict(lambda: defaultdict(dict)) self._resource_tags = defaultdict(lambda: defaultdict(dict))
self._commands = [] self._commands = []
self._errors = [] self._errors = []
@ -294,8 +297,8 @@ class SimpleSystemManagerBackend(BaseBackend):
self._validate_parameter_filters(parameter_filters, by_path=False) self._validate_parameter_filters(parameter_filters, by_path=False)
result = [] result = []
for param in self._parameters: for param_name in self._parameters:
ssm_parameter = self._parameters[param] ssm_parameter = self.get_parameter(param_name, False)
if not self._match_filters(ssm_parameter, parameter_filters): if not self._match_filters(ssm_parameter, parameter_filters):
continue continue
@ -504,7 +507,7 @@ class SimpleSystemManagerBackend(BaseBackend):
result = [] result = []
for name in names: for name in names:
if name in self._parameters: if name in self._parameters:
result.append(self._parameters[name]) result.append(self.get_parameter(name, with_decryption))
return result return result
def get_parameters_by_path(self, path, with_decryption, recursive, filters=None): def get_parameters_by_path(self, path, with_decryption, recursive, filters=None):
@ -513,14 +516,16 @@ class SimpleSystemManagerBackend(BaseBackend):
# path could be with or without a trailing /. we handle this # path could be with or without a trailing /. we handle this
# difference here. # difference here.
path = path.rstrip("/") + "/" path = path.rstrip("/") + "/"
for param in self._parameters: for param_name in self._parameters:
if path != "/" and not param.startswith(path): if path != "/" and not param_name.startswith(path):
continue continue
if "/" in param[len(path) + 1 :] and not recursive: if "/" in param_name[len(path) + 1 :] and not recursive:
continue continue
if not self._match_filters(self._parameters[param], filters): if not self._match_filters(self.get_parameter(param_name, with_decryption), filters):
continue continue
result.append(self._parameters[param]) result.append(self.get_parameter(param_name, with_decryption))
return result
return result return result
@ -579,23 +584,25 @@ class SimpleSystemManagerBackend(BaseBackend):
def get_parameter(self, name, with_decryption): def get_parameter(self, name, with_decryption):
if name in self._parameters: if name in self._parameters:
return self._parameters[name] return self._parameters[name][-1]
return None return None
def put_parameter( def put_parameter(
self, name, description, value, type, allowed_pattern, keyid, overwrite self, name, description, value, type, allowed_pattern, keyid, overwrite
): ):
previous_parameter = self._parameters.get(name) previous_parameter_versions = self._parameters[name]
version = 1 if len(previous_parameter_versions) == 0:
previous_parameter = None
if previous_parameter: version = 1
else:
previous_parameter = previous_parameter_versions[-1]
version = previous_parameter.version + 1 version = previous_parameter.version + 1
if not overwrite: if not overwrite:
return return
last_modified_date = time.time() last_modified_date = time.time()
self._parameters[name] = Parameter( self._parameters[name].append(Parameter(
name, name,
value, value,
type, type,
@ -604,7 +611,7 @@ class SimpleSystemManagerBackend(BaseBackend):
keyid, keyid,
last_modified_date, last_modified_date,
version, version,
) ))
return 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):