adding the ability to change redis configuration

This commit is contained in:
Matthew Leventi 2014-01-25 22:20:39 -08:00
parent ea138cc1fb
commit 07a388e567

View file

@ -22,8 +22,9 @@ module: redis
short_description: Various redis commands, slave and flush short_description: Various redis commands, slave and flush
description: description:
- Unified utility to interact with redis instances. - Unified utility to interact with redis instances.
'slave' Sets a redis instance in slave or master mode. 'slave' Sets a redis instance in slave or master mode.
'flush' Flushes all the instance or a specified db. 'flush' Flushes all the instance or a specified db.
'config' Ensures a configuration setting on an instance.
version_added: "1.3" version_added: "1.3"
options: options:
command: command:
@ -31,7 +32,7 @@ options:
- The selected redis command - The selected redis command
required: true required: true
default: null default: null
choices: [ "slave", "flush" ] choices: [ "slave", "flush", "config" ]
login_password: login_password:
description: description:
- The password used to authenticate with (usually not used) - The password used to authenticate with (usually not used)
@ -75,6 +76,16 @@ options:
required: false required: false
default: all default: all
choices: [ "all", "db" ] choices: [ "all", "db" ]
name:
description:
- A redis config key.
required: false
default: null
value:
description:
- A redis config value.
required: false
default: null
notes: notes:
@ -100,6 +111,12 @@ EXAMPLES = '''
# Flush only one db in a redis instance # Flush only one db in a redis instance
- redis: command=flush db=1 flush_mode=db - redis: command=flush db=1 flush_mode=db
# Configure local redis to have 10000 max clients
- redis: command=config name=maxclients value=10000
# Configure local redis to have lua time limit of 100 ms
- redis: command=config name=lua-time-limit value=100
''' '''
try: try:
@ -146,7 +163,7 @@ def flush(client, db=None):
def main(): def main():
module = AnsibleModule( module = AnsibleModule(
argument_spec = dict( argument_spec = dict(
command=dict(default=None, choices=['slave', 'flush']), command=dict(default=None, choices=['slave', 'flush', 'config']),
login_password=dict(default=None), login_password=dict(default=None),
login_host=dict(default='localhost'), login_host=dict(default='localhost'),
login_port=dict(default='6379'), login_port=dict(default='6379'),
@ -155,6 +172,8 @@ def main():
slave_mode=dict(default='slave', choices=['master', 'slave']), slave_mode=dict(default='slave', choices=['master', 'slave']),
db=dict(default=None), db=dict(default=None),
flush_mode=dict(default='all', choices=['all', 'db']), flush_mode=dict(default='all', choices=['all', 'db']),
name=dict(default=None),
value=dict(default=None)
), ),
supports_check_mode = True supports_check_mode = True
) )
@ -272,7 +291,34 @@ def main():
module.exit_json(changed=True, flushed=True, db=db) module.exit_json(changed=True, flushed=True, db=db)
else: # Flush never fails :) else: # Flush never fails :)
module.fail_json(msg="Unable to flush '%d' database" % db) module.fail_json(msg="Unable to flush '%d' database" % db)
elif command == 'config':
name = module.params['name']
value = module.params['value']
r = redis.StrictRedis(host=login_host,
port=login_port,
password=login_password)
try:
r.ping()
except Exception, e:
module.fail_json(msg="unable to connect to database: %s" % e)
try:
old_value = r.config_get(name)[name]
except Exception, e:
module.fail_json(msg="unable to read config: %s" % e)
changed = old_value != value
if module.check_mode or not changed:
module.exit_json(changed=changed, name=name, value=value)
else:
try:
r.config_set(name, value)
except Exception, e:
module.fail_json(msg="unable to write config: %s" % e)
module.exit_json(changed=changed, name=name, value=value)
else: else:
module.fail_json(msg='A valid command must be provided') module.fail_json(msg='A valid command must be provided')