@ -32,8 +32,9 @@ options:
group_family :
description :
- The name of the cache parameter group family that the cache parameter group can be used with .
Required when creating a cache parameter group .
choices : [ ' memcached1.4 ' , ' redis2.6 ' , ' redis2.8 ' , ' redis3.2 ' ]
required : yes
required : no
name :
description :
- A user - specified name for the cache parameter group .
@ -48,7 +49,7 @@ options:
required : true
values :
description :
- A user - specified list of parameters to reset or modify for the cache parameter group .
- A user - specified dictionary of parameters to reset or modify for the cache parameter group .
required : no
default : None
"""
@ -70,8 +71,8 @@ EXAMPLES = """
elasticache_parameter_group :
name : ' test-param-group '
values :
- [ ' activerehashing ' , ' yes ' ]
- [ ' client-output-buffer-limit-normal-hard-limit ' , 4 ]
activerehashing : yes
client - output - buffer - limit - normal - hard - limit : 4
state : ' present '
- name : ' Reset all modifiable parameters for the test parameter group '
elasticache_parameter_group :
@ -123,25 +124,28 @@ try:
except ImportError :
HAS_BOTO3 = False
def create ( module , conn , name , group_family , description ) :
""" Create ElastiCache parameter group. """
try :
response = conn . create_cache_parameter_group ( CacheParameterGroupName = name , CacheParameterGroupFamily = group_family , Description = description )
changed = True
except boto . exception . BotoServer Error as e :
module . fail_json ( msg = " Unable to create cache parameter group. " , exception = traceback . format_exc ( ) )
except boto core. exceptions . Client Error as e :
module . fail_json ( msg = " Unable to create cache parameter group. " , exception = traceback . format_exc ( ) , * * camel_dict_to_snake_dict ( e . response ) )
return response , changed
def delete ( module , conn , name ) :
""" Delete ElastiCache parameter group. """
try :
conn . delete_cache_parameter_group ( CacheParameterGroupName = name )
response = { }
changed = True
except boto . exception . BotoServer Error as e :
module . fail_json ( msg = " Unable to delete cache parameter group. " , exception = traceback . format_exc ( ) )
except boto core. exceptions . Client Error as e :
module . fail_json ( msg = " Unable to delete cache parameter group. " , exception = traceback . format_exc ( ) , * * camel_dict_to_snake_dict ( e . response ) )
return response , changed
def make_current_modifiable_param_dict ( module , conn , name ) :
""" Gets the current state of the cache parameter group and creates a dict with the format: { ParameterName: [Allowed_Values, DataType, ParameterValue]} """
current_info = get_info ( conn , name )
@ -156,6 +160,7 @@ def make_current_modifiable_param_dict(module, conn, name):
modifiable_params [ param [ " ParameterName " ] ] = [ param [ " AllowedValues " ] , param [ " DataType " ] , param [ " ParameterValue " ] ]
return modifiable_params
def check_valid_modification ( module , values , modifiable_params ) :
""" Check if the parameters and values in values are valid. """
changed_with_update = False
@ -184,6 +189,7 @@ def check_valid_modification(module, values, modifiable_params):
return changed_with_update
def check_changed_parameter_values ( values , old_parameters , new_parameters ) :
""" Checking if the new values are different than the old values. """
changed_with_update = False
@ -203,6 +209,7 @@ def check_changed_parameter_values(values, old_parameters, new_parameters):
return changed_with_update
def modify ( module , conn , name , values ) :
""" Modify ElastiCache parameter group to reflect the new information if it differs from the current. """
# compares current group parameters with the parameters we've specified to to a value to see if this will change the group
@ -212,10 +219,11 @@ def modify(module, conn, name, values):
format_parameters . append ( { ' ParameterName ' : key , ' ParameterValue ' : value } )
try :
response = conn . modify_cache_parameter_group ( CacheParameterGroupName = name , ParameterNameValues = format_parameters )
except boto . exception . BotoServer Error as e :
module . fail_json ( msg = " Unable to modify cache parameter group. " , exception = traceback . format_exc ( ) )
except boto core. exceptions . Client Error as e :
module . fail_json ( msg = " Unable to modify cache parameter group. " , exception = traceback . format_exc ( ) , * * camel_dict_to_snake_dict ( e . response ) )
return response
def reset ( module , conn , name , values ) :
""" Reset ElastiCache parameter group if the current information is different from the new information. """
# used to compare with the reset parameters' dict to see if there have been changes
@ -235,8 +243,8 @@ def reset(module, conn, name, values):
try :
response = conn . reset_cache_parameter_group ( CacheParameterGroupName = name , ParameterNameValues = format_parameters , ResetAllParameters = all_parameters )
except boto . exception . BotoServer Error as e :
module . fail_json ( msg = " Unable to reset cache parameter group. " , exception = traceback . format_exc ( ) )
except boto core. exceptions . Client Error as e :
module . fail_json ( msg = " Unable to reset cache parameter group. " , exception = traceback . format_exc ( ) , * * camel_dict_to_snake_dict ( e . response ) )
# determine changed
new_parameters_dict = make_current_modifiable_param_dict ( module , conn , name )
@ -244,6 +252,7 @@ def reset(module, conn, name, values):
return response , changed
def get_info ( conn , name ) :
""" Gets info about the ElastiCache parameter group. Returns false if it doesn ' t exist or we don ' t have access. """
try :
@ -287,7 +296,7 @@ def main():
exists = get_info ( connection , parameter_group_name )
# check that the needed requirements are available
if state == ' present ' and not exists and not ( parameter_group_family or group_description ) :
if state == ' present ' and not ( exists and parameter_group_family and group_description ) :
module . fail_json ( msg = " Creating a group requires a family group and a description. " )
elif state == ' reset ' and not exists :
module . fail_json ( msg = " No group %s to reset. Please create the group before using the state ' reset ' . " % parameter_group_name )