Merge branch 'upstream_devel' into devel

Conflicts:
	system/lvol.py
This commit is contained in:
Misho Krastev 2015-01-24 22:13:53 -08:00
commit d11e36589a
11 changed files with 75 additions and 38 deletions

View file

@ -8,7 +8,7 @@ All new modules should be submitted here, and have a chance to be promoted to co
Reporting bugs Reporting bugs
============== ==============
Take care to submit tickets to the appropriate repo where modules are contained. The repo is mentioned at the bottom of modlue documentation page at [docs.ansible.com](http://docs.ansible.com/). Take care to submit tickets to the appropriate repo where modules are contained. The repo is mentioned at the bottom of module documentation page at [docs.ansible.com](http://docs.ansible.com/).
Testing modules Testing modules
=============== ===============

View file

@ -235,12 +235,12 @@ def main():
master_host=dict(default=None), master_host=dict(default=None),
master_user=dict(default=None), master_user=dict(default=None),
master_password=dict(default=None), master_password=dict(default=None),
master_port=dict(default=None), master_port=dict(default=None, type='int'),
master_connect_retry=dict(default=None), master_connect_retry=dict(default=None, type='int'),
master_log_file=dict(default=None), master_log_file=dict(default=None),
master_log_pos=dict(default=None), master_log_pos=dict(default=None, type='int'),
relay_log_file=dict(default=None), relay_log_file=dict(default=None),
relay_log_pos=dict(default=None), relay_log_pos=dict(default=None, type='int'),
master_ssl=dict(default=False, type='bool'), master_ssl=dict(default=False, type='bool'),
master_ssl_ca=dict(default=None), master_ssl_ca=dict(default=None),
master_ssl_capath=dict(default=None), master_ssl_capath=dict(default=None),
@ -317,7 +317,6 @@ def main():
module.fail_json(msg="Server is not configured as mysql slave") module.fail_json(msg="Server is not configured as mysql slave")
elif mode in "changemaster": elif mode in "changemaster":
print "Change master"
chm=[] chm=[]
chm_params = {} chm_params = {}
if master_host: if master_host:
@ -329,22 +328,22 @@ def main():
if master_password: if master_password:
chm.append("MASTER_PASSWORD=%(master_password)s") chm.append("MASTER_PASSWORD=%(master_password)s")
chm_params['master_password'] = master_password chm_params['master_password'] = master_password
if master_port: if master_port is not None:
chm.append("MASTER_PORT=%(master_port)s") chm.append("MASTER_PORT=%(master_port)s")
chm_params['master_port'] = master_port chm_params['master_port'] = master_port
if master_connect_retry: if master_connect_retry is not None:
chm.append("MASTER_CONNECT_RETRY=%(master_connect_retry)s") chm.append("MASTER_CONNECT_RETRY=%(master_connect_retry)s")
chm_params['master_connect_retry'] = master_connect_retry chm_params['master_connect_retry'] = master_connect_retry
if master_log_file: if master_log_file:
chm.append("MASTER_LOG_FILE=%(master_log_file)s") chm.append("MASTER_LOG_FILE=%(master_log_file)s")
chm_params['master_log_file'] = master_log_file chm_params['master_log_file'] = master_log_file
if master_log_pos: if master_log_pos is not None:
chm.append("MASTER_LOG_POS=%(master_log_pos)s") chm.append("MASTER_LOG_POS=%(master_log_pos)s")
chm_params['master_log_pos'] = master_log_pos chm_params['master_log_pos'] = master_log_pos
if relay_log_file: if relay_log_file:
chm.append("RELAY_LOG_FILE=%(relay_log_file)s") chm.append("RELAY_LOG_FILE=%(relay_log_file)s")
chm_params['relay_log_file'] = relay_log_file chm_params['relay_log_file'] = relay_log_file
if relay_log_pos: if relay_log_pos is not None:
chm.append("RELAY_LOG_POS=%(relay_log_pos)s") chm.append("RELAY_LOG_POS=%(relay_log_pos)s")
chm_params['relay_log_pos'] = relay_log_pos chm_params['relay_log_pos'] = relay_log_pos
if master_ssl: if master_ssl:

View file

@ -162,7 +162,11 @@ class RabbitMqUser(object):
return dict() return dict()
def add(self): def add(self):
if self.password is not None:
self._exec(['add_user', self.username, self.password]) self._exec(['add_user', self.username, self.password])
else:
self._exec(['add_user', self.username, ''])
self._exec(['clear_password', self.username])
def delete(self): def delete(self):
self._exec(['delete_user', self.username]) self._exec(['delete_user', self.username])

View file

@ -75,8 +75,8 @@ def main():
# Sample output lines: # Sample output lines:
# Process 'name' Running # Process 'name' Running
# Process 'name' Running - restart pending # Process 'name' Running - restart pending
parts = line.lower().split() parts = line.split()
if len(parts) > 2 and parts[0] == 'process' and parts[1] == "'%s'" % name: if len(parts) > 2 and parts[0].lower() == 'process' and parts[1] == "'%s'" % name:
return ' '.join(parts[2:]) return ' '.join(parts[2:])
else: else:
return '' return ''

View file

@ -364,7 +364,7 @@ class Nagios(object):
return notif_str return notif_str
def schedule_svc_downtime(self, host, services=[], minutes=30): def schedule_svc_downtime(self, host, services=None, minutes=30):
""" """
This command is used to schedule downtime for a particular This command is used to schedule downtime for a particular
service. service.
@ -378,6 +378,10 @@ class Nagios(object):
""" """
cmd = "SCHEDULE_SVC_DOWNTIME" cmd = "SCHEDULE_SVC_DOWNTIME"
if services is None:
services = []
for service in services: for service in services:
dt_cmd_str = self._fmt_dt_str(cmd, host, minutes, svc=service) dt_cmd_str = self._fmt_dt_str(cmd, host, minutes, svc=service)
self._write_command(dt_cmd_str) self._write_command(dt_cmd_str)
@ -518,7 +522,7 @@ class Nagios(object):
notif_str = self._fmt_notif_str(cmd, host) notif_str = self._fmt_notif_str(cmd, host)
self._write_command(notif_str) self._write_command(notif_str)
def disable_svc_notifications(self, host, services=[]): def disable_svc_notifications(self, host, services=None):
""" """
This command is used to prevent notifications from being sent This command is used to prevent notifications from being sent
out for the specified service. out for the specified service.
@ -530,6 +534,10 @@ class Nagios(object):
""" """
cmd = "DISABLE_SVC_NOTIFICATIONS" cmd = "DISABLE_SVC_NOTIFICATIONS"
if services is None:
services = []
for service in services: for service in services:
notif_str = self._fmt_notif_str(cmd, host, svc=service) notif_str = self._fmt_notif_str(cmd, host, svc=service)
self._write_command(notif_str) self._write_command(notif_str)
@ -628,7 +636,7 @@ class Nagios(object):
else: else:
return "Fail: could not write to the command file" return "Fail: could not write to the command file"
def enable_svc_notifications(self, host, services=[]): def enable_svc_notifications(self, host, services=None):
""" """
Enables notifications for a particular service. Enables notifications for a particular service.
@ -638,6 +646,10 @@ class Nagios(object):
""" """
cmd = "ENABLE_SVC_NOTIFICATIONS" cmd = "ENABLE_SVC_NOTIFICATIONS"
if services is None:
services = []
nagios_return = True nagios_return = True
return_str_list = [] return_str_list = []
for service in services: for service in services:

View file

@ -2,6 +2,7 @@
# encoding: utf-8 # encoding: utf-8
# (c) 2013, Matthias Vogelgesang <matthias.vogelgesang@gmail.com> # (c) 2013, Matthias Vogelgesang <matthias.vogelgesang@gmail.com>
# (c) 2014, Justin Lecher <jlec@gentoo.org>
# #
# This file is part of Ansible # This file is part of Ansible
# #
@ -58,6 +59,13 @@ options:
default: "no" default: "no"
choices: [ "yes", "no" ] choices: [ "yes", "no" ]
aliases: [] aliases: []
refresh:
description:
- Enable autorefresh of the repository.
required: false
default: "yes"
choices: [ "yes", "no" ]
aliases: []
notes: [] notes: []
requirements: [ zypper ] requirements: [ zypper ]
''' '''
@ -145,11 +153,11 @@ def repo_exists(module, old_zypper, **kwargs):
return False return False
def add_repo(module, repo, alias, description, disable_gpg_check, old_zypper): def add_repo(module, repo, alias, description, disable_gpg_check, old_zypper, refresh):
if old_zypper: if old_zypper:
cmd = ['/usr/bin/zypper', 'sa'] cmd = ['/usr/bin/zypper', 'sa']
else: else:
cmd = ['/usr/bin/zypper', 'ar', '--check', '--refresh'] cmd = ['/usr/bin/zypper', 'ar', '--check']
if repo.startswith("file:/") and old_zypper: if repo.startswith("file:/") and old_zypper:
cmd.extend(['-t', 'Plaindir']) cmd.extend(['-t', 'Plaindir'])
@ -162,6 +170,9 @@ def add_repo(module, repo, alias, description, disable_gpg_check, old_zypper):
if disable_gpg_check and not old_zypper: if disable_gpg_check and not old_zypper:
cmd.append('--no-gpgcheck') cmd.append('--no-gpgcheck')
if refresh:
cmd.append('--refresh')
cmd.append(repo) cmd.append(repo)
if not repo.endswith('.repo'): if not repo.endswith('.repo'):
@ -216,6 +227,7 @@ def main():
state=dict(choices=['present', 'absent'], default='present'), state=dict(choices=['present', 'absent'], default='present'),
description=dict(required=False), description=dict(required=False),
disable_gpg_check = dict(required=False, default='no', type='bool'), disable_gpg_check = dict(required=False, default='no', type='bool'),
refresh = dict(required=False, default='yes', type='bool'),
), ),
supports_check_mode=False, supports_check_mode=False,
) )
@ -225,6 +237,7 @@ def main():
name = module.params['name'] name = module.params['name']
description = module.params['description'] description = module.params['description']
disable_gpg_check = module.params['disable_gpg_check'] disable_gpg_check = module.params['disable_gpg_check']
refresh = module.params['refresh']
def exit_unchanged(): def exit_unchanged():
module.exit_json(changed=False, repo=repo, state=state, name=name) module.exit_json(changed=False, repo=repo, state=state, name=name)
@ -260,7 +273,7 @@ def main():
if exists: if exists:
exit_unchanged() exit_unchanged()
changed = add_repo(module, repo, name, description, disable_gpg_check, old_zypper) changed = add_repo(module, repo, name, description, disable_gpg_check, old_zypper, refresh)
elif state == 'absent': elif state == 'absent':
if not exists: if not exists:
exit_unchanged() exit_unchanged()

View file

@ -86,8 +86,6 @@ debconf: name='oracle-java7-installer' question='shared/accepted-oracle-license-
debconf: name='tzdata' debconf: name='tzdata'
''' '''
import pipes
def get_selections(module, pkg): def get_selections(module, pkg):
cmd = [module.get_bin_path('debconf-show', True), pkg] cmd = [module.get_bin_path('debconf-show', True), pkg]
rc, out, err = module.run_command(' '.join(cmd)) rc, out, err = module.run_command(' '.join(cmd))
@ -106,14 +104,14 @@ def get_selections(module, pkg):
def set_selection(module, pkg, question, vtype, value, unseen): def set_selection(module, pkg, question, vtype, value, unseen):
data = ' '.join([ question, vtype, value ])
setsel = module.get_bin_path('debconf-set-selections', True) setsel = module.get_bin_path('debconf-set-selections', True)
cmd = ["echo %s %s |" % (pipes.quote(pkg), pipes.quote(data)), setsel] cmd = [setsel]
if unseen: if unseen:
cmd.append('-u') cmd.append('-u')
return module.run_command(' '.join(cmd), use_unsafe_shell=True) data = ' '.join([pkg, question, vtype, value])
return module.run_command(cmd, data=data)
def main(): def main():
@ -137,7 +135,6 @@ def main():
unseen = module.params["unseen"] unseen = module.params["unseen"]
prev = get_selections(module, pkg) prev = get_selections(module, pkg)
diff = ''
changed = False changed = False
msg = "" msg = ""

View file

@ -86,7 +86,7 @@ def main():
database = dict(required=True), database = dict(required=True),
key = dict(required=False, default=None), key = dict(required=False, default=None),
split = dict(required=False, default=None), split = dict(required=False, default=None),
fail_key = dict(required=False, default=True), fail_key = dict(required=False, type='bool', default=True),
), ),
supports_check_mode = True, supports_check_mode = True,
) )

View file

@ -24,6 +24,7 @@ module: gluster_volume
short_description: Manage GlusterFS volumes short_description: Manage GlusterFS volumes
description: description:
- Create, remove, start, stop and tune GlusterFS volumes - Create, remove, start, stop and tune GlusterFS volumes
version_added: "1.9"
options: options:
name: name:
required: true required: true

View file

@ -32,6 +32,11 @@ EXAMPLES = '''
- locale_gen: name=de_CH.UTF-8 state=present - locale_gen: name=de_CH.UTF-8 state=present
''' '''
LOCALE_NORMALIZATION = {
".utf8": ".UTF-8",
".eucjp": ".EUC-JP",
}
# =========================================== # ===========================================
# location module specific support methods. # location module specific support methods.
# #
@ -44,7 +49,9 @@ def is_present(name):
def fix_case(name): def fix_case(name):
"""locale -a might return the encoding in either lower or upper case. """locale -a might return the encoding in either lower or upper case.
Passing through this function makes them uniform for comparisons.""" Passing through this function makes them uniform for comparisons."""
return name.replace(".utf8", ".UTF-8") for s, r in LOCALE_NORMALIZATION.iteritems():
name = name.replace(s, r)
return name
def replace_line(existing_line, new_line): def replace_line(existing_line, new_line):
"""Replaces lines in /etc/locale.gen""" """Replaces lines in /etc/locale.gen"""

View file

@ -152,8 +152,9 @@ def main():
else: else:
unit = size_unit unit = size_unit
lvs_cmd = module.get_bin_path("lvs", required=True)
rc, current_lvs, err = module.run_command( rc, current_lvs, err = module.run_command(
"lvs --noheadings --nosuffix -o lv_name,size --units %s --separator ';' %s" % (unit, vg)) "%s --noheadings --nosuffix -o lv_name,size --units %s --separator ';' %s" % (lvs_cmd, unit, vg))
if rc != 0: if rc != 0:
if state == 'absent': if state == 'absent':
@ -185,7 +186,8 @@ def main():
if module.check_mode: if module.check_mode:
changed = True changed = True
else: else:
rc, _, err = module.run_command("lvcreate -n %s -%s %s%s %s" % (lv, size_opt, size, size_unit, vg)) lvcreate_cmd = module.get_bin_path("lvcreate", required=True)
rc, _, err = module.run_command("%s -n %s -%s %s%s %s" % (lvcreate_cmd, lv, size_opt, size, size_unit, vg))
if rc == 0: if rc == 0:
changed = True changed = True
else: else:
@ -197,7 +199,8 @@ def main():
module.exit_json(changed=True) module.exit_json(changed=True)
if not force: if not force:
module.fail_json(msg="Sorry, no removal of logical volume %s without force=yes." % (this_lv['name'])) module.fail_json(msg="Sorry, no removal of logical volume %s without force=yes." % (this_lv['name']))
rc, _, err = module.run_command("lvremove --force %s/%s" % (vg, this_lv['name'])) lvremove_cmd = module.get_bin_path("lvremove", required=True)
rc, _, err = module.run_command("%s --force %s/%s" % (lvremove_cmd, vg, this_lv['name']))
if rc == 0: if rc == 0:
module.exit_json(changed=True) module.exit_json(changed=True)
else: else:
@ -209,11 +212,12 @@ def main():
### resize LV ### resize LV
tool = None tool = None
if size > this_lv['size']: if size > this_lv['size']:
tool = 'lvextend' tool = module.get_bin_path("lvextend", required=True)
elif size < this_lv['size']: elif size < this_lv['size']:
if not force: if not force:
module.fail_json(msg="Sorry, no shrinking of %s without force=yes." % (this_lv['name'])) module.fail_json(msg="Sorry, no shrinking of %s without force=yes." % (this_lv['name']))
tool = 'lvreduce --force' tool = module.get_bin_path("lvextend", required=True)
tool.append("--force")
if tool: if tool:
if module.check_mode: if module.check_mode: