adding the ability to change redis configuration
This commit is contained in:
parent
ea138cc1fb
commit
07a388e567
1 changed files with 49 additions and 3 deletions
|
@ -24,6 +24,7 @@ description:
|
|||
- Unified utility to interact with redis instances.
|
||||
'slave' Sets a redis instance in slave or master mode.
|
||||
'flush' Flushes all the instance or a specified db.
|
||||
'config' Ensures a configuration setting on an instance.
|
||||
version_added: "1.3"
|
||||
options:
|
||||
command:
|
||||
|
@ -31,7 +32,7 @@ options:
|
|||
- The selected redis command
|
||||
required: true
|
||||
default: null
|
||||
choices: [ "slave", "flush" ]
|
||||
choices: [ "slave", "flush", "config" ]
|
||||
login_password:
|
||||
description:
|
||||
- The password used to authenticate with (usually not used)
|
||||
|
@ -75,6 +76,16 @@ options:
|
|||
required: false
|
||||
default: all
|
||||
choices: [ "all", "db" ]
|
||||
name:
|
||||
description:
|
||||
- A redis config key.
|
||||
required: false
|
||||
default: null
|
||||
value:
|
||||
description:
|
||||
- A redis config value.
|
||||
required: false
|
||||
default: null
|
||||
|
||||
|
||||
notes:
|
||||
|
@ -100,6 +111,12 @@ EXAMPLES = '''
|
|||
|
||||
# Flush only one db in a redis instance
|
||||
- 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:
|
||||
|
@ -146,7 +163,7 @@ def flush(client, db=None):
|
|||
def main():
|
||||
module = AnsibleModule(
|
||||
argument_spec = dict(
|
||||
command=dict(default=None, choices=['slave', 'flush']),
|
||||
command=dict(default=None, choices=['slave', 'flush', 'config']),
|
||||
login_password=dict(default=None),
|
||||
login_host=dict(default='localhost'),
|
||||
login_port=dict(default='6379'),
|
||||
|
@ -155,6 +172,8 @@ def main():
|
|||
slave_mode=dict(default='slave', choices=['master', 'slave']),
|
||||
db=dict(default=None),
|
||||
flush_mode=dict(default='all', choices=['all', 'db']),
|
||||
name=dict(default=None),
|
||||
value=dict(default=None)
|
||||
),
|
||||
supports_check_mode = True
|
||||
)
|
||||
|
@ -272,7 +291,34 @@ def main():
|
|||
module.exit_json(changed=True, flushed=True, db=db)
|
||||
else: # Flush never fails :)
|
||||
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:
|
||||
module.fail_json(msg='A valid command must be provided')
|
||||
|
||||
|
|
Loading…
Reference in a new issue