mirror of
https://github.com/valitydev/salt.git
synced 2024-11-08 09:23:56 +00:00
Several fixes for RDS DB parameter group management
In particular: - it is now possible to manage all the parameters in a group, without limiting to MaxRecords=100 (thanks to pagination); - update_parameter_group() now composes valid JSON payload, automatically substitutes boolean values to 'on' / 'off' strings; - parameter_present() now shows actual error message produced by ModifyDBParameterGroup API call.
This commit is contained in:
parent
81c0c138d7
commit
56cd88dfa5
@ -505,10 +505,17 @@ def update_parameter_group(name, parameters, apply_method="pending-reboot",
|
||||
|
||||
param_list = []
|
||||
for key, value in six.iteritems(parameters):
|
||||
item = (key, value, apply_method)
|
||||
item = odict.OrderedDict()
|
||||
item.update({'ParameterName': key})
|
||||
item.update({'ApplyMethod': apply_method})
|
||||
if type(value) is bool:
|
||||
item.update({'ParameterValue': 'on' if value else 'off'})
|
||||
else:
|
||||
item.update({'ParameterValue': str(value)})
|
||||
param_list.append(item)
|
||||
if not len(param_list):
|
||||
return {'results': False}
|
||||
|
||||
if not len(param_list):
|
||||
return {'results': False}
|
||||
|
||||
try:
|
||||
conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile)
|
||||
@ -843,6 +850,7 @@ def describe_parameters(name, Source=None, MaxRecords=None, Marker=None,
|
||||
'message': 'Could not establish a connection to RDS'}
|
||||
|
||||
kwargs = {}
|
||||
kwargs.update({'DBParameterGroupName': name})
|
||||
for key in ('Marker', 'Source'):
|
||||
if locals()[key] is not None:
|
||||
kwargs[key] = str(locals()[key])
|
||||
@ -850,26 +858,23 @@ def describe_parameters(name, Source=None, MaxRecords=None, Marker=None,
|
||||
if locals()['MaxRecords'] is not None:
|
||||
kwargs['MaxRecords'] = int(locals()['MaxRecords'])
|
||||
|
||||
r = conn.describe_db_parameters(DBParameterGroupName=name, **kwargs)
|
||||
pag = conn.get_paginator('describe_db_parameters')
|
||||
pit = pag.paginate(**kwargs)
|
||||
|
||||
if not r:
|
||||
return {'result': False,
|
||||
'message': 'Failed to get RDS parameters for group {0}.'
|
||||
.format(name)}
|
||||
|
||||
results = r['Parameters']
|
||||
keys = ['ParameterName', 'ParameterValue', 'Description',
|
||||
'Source', 'ApplyType', 'DataType', 'AllowedValues',
|
||||
'IsModifieable', 'MinimumEngineVersion', 'ApplyMethod']
|
||||
|
||||
parameters = odict.OrderedDict()
|
||||
ret = {'result': True}
|
||||
for result in results:
|
||||
data = odict.OrderedDict()
|
||||
for k in keys:
|
||||
data[k] = result.get(k)
|
||||
|
||||
parameters[result.get('ParameterName')] = data
|
||||
for p in pit:
|
||||
for result in p['Parameters']:
|
||||
data = odict.OrderedDict()
|
||||
for k in keys:
|
||||
data[k] = result.get(k)
|
||||
|
||||
parameters[result.get('ParameterName')] = data
|
||||
|
||||
ret['parameters'] = parameters
|
||||
return ret
|
||||
|
@ -697,7 +697,10 @@ def parameter_present(name, db_parameter_group_family, description, parameters=N
|
||||
changed = {}
|
||||
for items in parameters:
|
||||
for k, value in items.items():
|
||||
params[k] = value
|
||||
if type(value) is bool:
|
||||
params[k] = 'on' if value else 'off'
|
||||
else:
|
||||
params[k] = str(value)
|
||||
logging.debug('Parameters from user are : {0}.'.format(params))
|
||||
options = __salt__['boto_rds.describe_parameters'](name=name, region=region, key=key, keyid=keyid, profile=profile)
|
||||
if not options.get('result'):
|
||||
@ -705,8 +708,8 @@ def parameter_present(name, db_parameter_group_family, description, parameters=N
|
||||
ret['comment'] = os.linesep.join([ret['comment'], 'Faled to get parameters for group {0}.'.format(name)])
|
||||
return ret
|
||||
for parameter in options['parameters'].values():
|
||||
if parameter['ParameterName'] in params and str(params.get(parameter['ParameterName'])) != str(parameter['ParameterValue']):
|
||||
logging.debug('Values that are being compared are {0}:{1} .'.format(params.get(parameter['ParameterName']), parameter['ParameterValue']))
|
||||
if parameter['ParameterName'] in params and params.get(parameter['ParameterName']) != str(parameter['ParameterValue']):
|
||||
logging.debug('Values that are being compared for {0} are {1}:{2} .'.format(parameter['ParameterName'], params.get(parameter['ParameterName']), parameter['ParameterValue']))
|
||||
changed[parameter['ParameterName']] = params.get(parameter['ParameterName'])
|
||||
if len(changed) > 0:
|
||||
if __opts__['test']:
|
||||
@ -715,9 +718,9 @@ def parameter_present(name, db_parameter_group_family, description, parameters=N
|
||||
return ret
|
||||
update = __salt__['boto_rds.update_parameter_group'](name, parameters=changed, apply_method=apply_method, tags=tags, region=region,
|
||||
key=key, keyid=keyid, profile=profile)
|
||||
if not update:
|
||||
if 'error' in update:
|
||||
ret['result'] = False
|
||||
ret['comment'] = os.linesep.join([ret['comment'], 'Failed to change parameters {0} for group {1}.'.format(changed, name)])
|
||||
ret['comment'] = os.linesep.join([ret['comment'], 'Failed to change parameters {0} for group {1}:'.format(changed, name), update['error']['message']])
|
||||
return ret
|
||||
ret['changes']['Parameters'] = changed
|
||||
ret['comment'] = os.linesep.join([ret['comment'], 'Parameters {0} for group {1} are changed.'.format(changed, name)])
|
||||
|
Loading…
Reference in New Issue
Block a user