Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

redis: PEP8 compliancy and doc fixes #30920

Merged
merged 1 commit into from
Sep 27, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
158 changes: 58 additions & 100 deletions lib/ansible/modules/database/misc/redis.py
Original file line number Diff line number Diff line change
@@ -1,90 +1,72 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
#

# Copyright: Ansible Project
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

from __future__ import absolute_import, division, print_function
__metaclass__ = type


ANSIBLE_METADATA = {'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'}


DOCUMENTATION = '''
---
module: redis
short_description: Various redis commands, slave and flush
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' (new in 1.6), ensures a configuration setting on an instance.
version_added: "1.3"
options:
command:
description:
- The selected redis command
- C(config) (new in 1.6), ensures a configuration setting on an instance.
- C(flush) flushes all the instance or a specified db.
- C(slave) sets a redis instance in slave or master mode.
required: true
default: null
choices: [ "slave", "flush", "config" ]
choices: [ config, flush, slave ]
login_password:
description:
- The password used to authenticate with (usually not used)
required: false
default: null
login_host:
description:
- The host running the database
required: false
default: localhost
login_port:
description:
- The port to connect to
required: false
default: 6379
master_host:
description:
- The host of the master instance [slave command]
required: false
default: null
master_port:
description:
- The port of the master instance [slave command]
required: false
default: null
slave_mode:
description:
- the mode of the redis instance [slave command]
required: false
default: slave
choices: [ "master", "slave" ]
choices: [ master, slave ]
db:
description:
- The database to flush (used in db mode) [flush command]
required: false
default: null
flush_mode:
description:
- Type of flush (all the dbs in a redis instance or a specific one)
[flush command]
required: false
default: all
choices: [ "all", "db" ]
choices: [ all, db ]
name:
version_added: 1.6
description:
- A redis config key.
required: false
default: null
value:
version_added: 1.6
value:
description:
- A redis config value.
required: false
default: null
version_added: 1.6


notes:
Expand All @@ -99,40 +81,41 @@
'''

EXAMPLES = '''
# Set local redis instance to be slave of melee.island on port 6377
- redis:
- name: Set local redis instance to be slave of melee.island on port 6377
redis:
command: slave
master_host: melee.island
master_port: 6377

# Deactivate slave mode
- redis:
- name: Deactivate slave mode
redis:
command: slave
slave_mode: master

# Flush all the redis db
- redis:
- name: Flush all the redis db
redis:
command: flush
flush_mode: all

# Flush only one db in a redis instance
- redis:
- name: 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:
- name: 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:
- name: Configure local redis to have lua time limit of 100 ms
redis:
command: config
name: lua-time-limit
value: 100
'''

import traceback

try:
Expand All @@ -146,10 +129,7 @@
from ansible.module_utils._text import to_native


# ===========================================
# Redis module specific support methods.
#

def set_slave_mode(client, master_host, master_port):
try:
return client.slaveof(master_host, master_port)
Expand All @@ -175,26 +155,23 @@ def flush(client, db=None):
return False


# ===========================================
# Module execution.
#

def main():
module = AnsibleModule(
argument_spec = dict(
command=dict(default=None, choices=['slave', 'flush', 'config']),
login_password=dict(default=None, no_log=True),
login_host=dict(default='localhost'),
login_port=dict(default=6379, type='int'),
master_host=dict(default=None),
master_port=dict(default=None, type='int'),
slave_mode=dict(default='slave', choices=['master', 'slave']),
db=dict(default=None, type='int'),
flush_mode=dict(default='all', choices=['all', 'db']),
name=dict(default=None),
value=dict(default=None)
argument_spec=dict(
command=dict(type='str', choices=['config', 'flush', 'slave']),
login_password=dict(type='str', no_log=True),
login_host=dict(type='str', default='localhost'),
login_port=dict(type='int', default=6379),
master_host=dict(type='str'),
master_port=dict(type='int'),
slave_mode=dict(type='str', default='slave', choices=['master', 'slave']),
db=dict(type='int'),
flush_mode=dict(type='str', default='all', choices=['all', 'db']),
name=dict(type='str'),
value=dict(type='str')
),
supports_check_mode = True
supports_check_mode=True,
)

if not redis_found:
Expand All @@ -211,40 +188,32 @@ def main():
master_port = module.params['master_port']
mode = module.params['slave_mode']

#Check if we have all the data
# Check if we have all the data
if mode == "slave": # Only need data if we want to be slave
if not master_host:
module.fail_json(
msg='In slave mode master host must be provided')
module.fail_json(msg='In slave mode master host must be provided')

if not master_port:
module.fail_json(
msg='In slave mode master port must be provided')
module.fail_json(msg='In slave mode master port must be provided')

#Connect and check
r = redis.StrictRedis(host=login_host,
port=login_port,
password=login_password)
# Connect and check
r = redis.StrictRedis(host=login_host, port=login_port, password=login_password)
try:
r.ping()
except Exception as e:
module.fail_json(msg="unable to connect to database: %s" % to_native(e),
exception=traceback.format_exc())
module.fail_json(msg="unable to connect to database: %s" % to_native(e), exception=traceback.format_exc())

#Check if we are already in the mode that we want
# Check if we are already in the mode that we want
info = r.info()
if mode == "master" and info["role"] == "master":
module.exit_json(changed=False, mode=mode)

elif mode == "slave" and\
info["role"] == "slave" and\
info["master_host"] == master_host and\
info["master_port"] == master_port:
status = {
'status': mode,
'master_host': master_host,
'master_port': master_port,
}
elif mode == "slave" and info["role"] == "slave" and info["master_host"] == master_host and info["master_port"] == master_port:
status = dict(
status=mode,
master_host=master_host,
master_port=master_port,
)
module.exit_json(changed=False, mode=status)
else:
# Do the stuff
Expand Down Expand Up @@ -274,22 +243,17 @@ def main():
db = module.params['db']
mode = module.params['flush_mode']

#Check if we have all the data
# Check if we have all the data
if mode == "db":
if db is None:
module.fail_json(
msg="In db mode the db number must be provided")

#Connect and check
r = redis.StrictRedis(host=login_host,
port=login_port,
password=login_password,
db=db)
module.fail_json(msg="In db mode the db number must be provided")

# Connect and check
r = redis.StrictRedis(host=login_host, port=login_port, password=login_password, db=db)
try:
r.ping()
except Exception as e:
module.fail_json(msg="unable to connect to database: %s" % to_native(e),
exception=traceback.format_exc())
module.fail_json(msg="unable to connect to database: %s" % to_native(e), exception=traceback.format_exc())

# Do the stuff
# (Check Check_mode before commands so the commands aren't evaluated
Expand All @@ -309,22 +273,17 @@ def main():
name = module.params['name']
value = module.params['value']

r = redis.StrictRedis(host=login_host,
port=login_port,
password=login_password)
r = redis.StrictRedis(host=login_host, port=login_port, password=login_password)

try:
r.ping()
except Exception as e:
module.fail_json(msg="unable to connect to database: %s" % to_native(e),
exception=traceback.format_exc())

module.fail_json(msg="unable to connect to database: %s" % to_native(e), exception=traceback.format_exc())

try:
old_value = r.config_get(name)[name]
except Exception as e:
module.fail_json(msg="unable to read config: %s" % to_native(e),
exception=traceback.format_exc())
module.fail_json(msg="unable to read config: %s" % to_native(e), exception=traceback.format_exc())
changed = old_value != value

if module.check_mode or not changed:
Expand All @@ -333,8 +292,7 @@ def main():
try:
r.config_set(name, value)
except Exception as e:
module.fail_json(msg="unable to write config: %s" % to_native(e),
exception=traceback.format_exc())
module.fail_json(msg="unable to write config: %s" % to_native(e), exception=traceback.format_exc())
module.exit_json(changed=changed, name=name, value=value)
else:
module.fail_json(msg='A valid command must be provided')
Expand Down
1 change: 0 additions & 1 deletion test/sanity/pep8/legacy-files.txt
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,6 @@ lib/ansible/modules/clustering/consul_session.py
lib/ansible/modules/clustering/kubernetes.py
lib/ansible/modules/clustering/pacemaker_cluster.py
lib/ansible/modules/database/misc/kibana_plugin.py
lib/ansible/modules/database/misc/redis.py
lib/ansible/modules/database/misc/riak.py
lib/ansible/modules/database/mongodb/mongodb_parameter.py
lib/ansible/modules/database/mongodb/mongodb_user.py
Expand Down