Merge branch 'upstream_devel' into devel
Conflicts: system/lvol.py
This commit is contained in:
commit
d11e36589a
11 changed files with 75 additions and 38 deletions
|
@ -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
|
||||||
===============
|
===============
|
||||||
|
@ -18,4 +18,4 @@ Ansible [module development guide](http://docs.ansible.com/developing_modules.ht
|
||||||
License
|
License
|
||||||
=======
|
=======
|
||||||
|
|
||||||
As with Ansible, modules distributed with Ansible are GPLv3 licensed. User generated modules not part of this project can be of any license.
|
As with Ansible, modules distributed with Ansible are GPLv3 licensed. User generated modules not part of this project can be of any license.
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -162,7 +162,11 @@ class RabbitMqUser(object):
|
||||||
return dict()
|
return dict()
|
||||||
|
|
||||||
def add(self):
|
def add(self):
|
||||||
self._exec(['add_user', self.username, self.password])
|
if self.password is not None:
|
||||||
|
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])
|
||||||
|
|
|
@ -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 ''
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
#
|
#
|
||||||
|
@ -51,13 +52,20 @@ options:
|
||||||
- A description of the repository
|
- A description of the repository
|
||||||
disable_gpg_check:
|
disable_gpg_check:
|
||||||
description:
|
description:
|
||||||
- Whether to disable GPG signature checking of
|
- Whether to disable GPG signature checking of
|
||||||
all packages. Has an effect only if state is
|
all packages. Has an effect only if state is
|
||||||
I(present).
|
I(present).
|
||||||
required: false
|
required: false
|
||||||
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()
|
||||||
|
|
|
@ -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 = ""
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
||||||
|
@ -34,7 +35,7 @@ options:
|
||||||
choices: [ 'present', 'absent', 'started', 'stopped' ]
|
choices: [ 'present', 'absent', 'started', 'stopped' ]
|
||||||
description:
|
description:
|
||||||
- Use present/absent ensure if a volume exists or not,
|
- Use present/absent ensure if a volume exists or not,
|
||||||
use started/stopped to control it's availability.
|
use started/stopped to control it's availability.
|
||||||
cluster:
|
cluster:
|
||||||
required: false
|
required: false
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -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"""
|
||||||
|
|
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue