Merge branch 'brian-brazil-devel' into devel

This commit is contained in:
James Cammarata 2014-05-08 16:47:21 -05:00
commit 4358c846a0

View file

@ -47,8 +47,6 @@ EXAMPLES = '''
- monit: name=httpd state=started - monit: name=httpd state=started
''' '''
import pipes
def main(): def main():
arg_spec = dict( arg_spec = dict(
name=dict(required=True), name=dict(required=True),
@ -70,8 +68,25 @@ def main():
module.fail_json(msg='monit reload failed', stdout=out, stderr=err) module.fail_json(msg='monit reload failed', stdout=out, stderr=err)
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
rc, out, err = module.run_command('%s summary | grep "Process \'%s\'"' % (MONIT, pipes.quote(name)), use_unsafe_shell=True) def status():
present = name in out """Return the status of the process in monit, or the empty string if not present."""
rc, out, err = module.run_command('%s summary' % MONIT, check_rc=True)
for line in out.split('\n'):
# Sample output lines:
# Process 'name' Running
# Process 'name' Running - restart pending
parts = line.lower().split()
if len(parts) > 2 and parts[0] == 'process' and parts[1] == "'%s'" % name:
return ' '.join(parts[2:])
else:
return ''
def run_command(command):
"""Runs a monit command, and returns the new status."""
module.run_command('%s %s %s' % (MONIT, command, name), check_rc=True)
return status()
present = status() != ''
if not present and not state == 'present': if not present and not state == 'present':
module.fail_json(msg='%s process not presently configured with monit' % name, name=name, state=state) module.fail_json(msg='%s process not presently configured with monit' % name, name=name, state=state)
@ -80,69 +95,57 @@ def main():
if not present: if not present:
if module.check_mode: if module.check_mode:
module.exit_json(changed=True) module.exit_json(changed=True)
module.run_command('%s reload' % MONIT, check_rc=True) status = run_command('reload')
rc, out, err = module.run_command('%s summary | grep %s' % (MONIT, pipes.quote(name)), use_unsafe_shell=True) if status == '':
if name in out: module.fail_json(msg='%s process not configured with monit' % name, name=name, state=state)
module.exit_json(changed=True, name=name, state=state)
else: else:
module.fail_json(msg=out, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
module.exit_json(changed=False, name=name, state=state) module.exit_json(changed=False, name=name, state=state)
rc, out, err = module.run_command('%s summary | grep %s' % (MONIT, pipes.quote(name)), use_unsafe_shell=True) running = 'running' in status()
running = 'running' in out.lower()
if running and (state == 'started' or state == 'monitored'): if running and state in ['started', 'monitored']:
module.exit_json(changed=False, name=name, state=state)
if running and state == 'monitored':
module.exit_json(changed=False, name=name, state=state) module.exit_json(changed=False, name=name, state=state)
if running and state == 'stopped': if running and state == 'stopped':
if module.check_mode: if module.check_mode:
module.exit_json(changed=True) module.exit_json(changed=True)
module.run_command('%s stop %s' % (MONIT, name)) status = run_command('stop')
rc, out, err = module.run_command('%s summary | grep %s' % (MONIT, pipes.quote(name)), use_unsafe_shell=True) if status in ['not monitored'] or 'stop pending' in status:
if 'not monitored' in out.lower() or 'stop pending' in out.lower():
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
module.fail_json(msg=out) module.fail_json(msg='%s process not stopped' % name, status=status)
if running and state == 'unmonitored': if running and state == 'unmonitored':
if module.check_mode: if module.check_mode:
module.exit_json(changed=True) module.exit_json(changed=True)
module.run_command('%s unmonitor %s' % (MONIT, name)) status = run_command('unmonitor')
# FIXME: DRY FOLKS! if status in ['not monitored']:
rc, out, err = module.run_command('%s summary | grep %s' % (MONIT, pipes.quote(name)), use_unsafe_shell=True)
if 'not monitored' in out.lower():
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
module.fail_json(msg=out) module.fail_json(msg='%s process not unmonitored' % name, status=status)
elif state == 'restarted': elif state == 'restarted':
if module.check_mode: if module.check_mode:
module.exit_json(changed=True) module.exit_json(changed=True)
module.run_command('%s restart %s' % (MONIT, name)) status = run_command('restart')
rc, out, err = module.run_command('%s summary | grep %s' % (MONIT, name)) if status in ['initializing', 'running'] or 'restart pending' in status:
if 'initializing' in out.lower() or 'restart pending' in out.lower():
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
module.fail_json(msg=out) module.fail_json(msg='%s process not restarted' % name, status=status)
elif not running and state == 'started': elif not running and state == 'started':
if module.check_mode: if module.check_mode:
module.exit_json(changed=True) module.exit_json(changed=True)
module.run_command('%s start %s' % (MONIT, name)) status = run_command('start')
rc, out, err = module.run_command('%s summary | grep %s' % (MONIT, name)) if status in ['initializing', 'running'] or 'start pending' in status:
if 'initializing' in out.lower() or 'start pending' in out.lower():
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
module.fail_json(msg=out) module.fail_json(msg='%s process not started' % name, status=status)
elif not running and state == 'monitored': elif not running and state == 'monitored':
if module.check_mode: if module.check_mode:
module.exit_json(changed=True) module.exit_json(changed=True)
module.run_command('%s monitor %s' % (MONIT, name)) status = run_command('monitor')
rc, out, err = module.run_command('%s summary | grep %s' % (MONIT, name)) if status not in ['not monitored']:
if 'initializing' in out.lower() or 'start pending' in out.lower():
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
module.fail_json(msg=out) module.fail_json(msg='%s process not monitored' % name, status=status)
module.exit_json(changed=False, name=name, state=state) module.exit_json(changed=False, name=name, state=state)