supervisorctl: add command-line options as module parameters

Adds more parameters which may be passed to supervisorctl:  config,
serverurl, username, password

Also refactored the various `module.run_command(build_a_string)` calls
into a single `run_supervisorctl` function.
This commit is contained in:
Evan Wies 2013-07-04 12:23:16 -04:00
parent 25aaee4c38
commit cbeb6a63e5

View file

@ -32,6 +32,26 @@ options:
- The name of the I(supervisord) program/process to manage
required: true
default: null
config:
description:
- configuration file path, passed as -c to supervisorctl
required: false
default: null
serverurl:
description:
- URL on which supervisord server is listening, passed as -s to supervisorctl
required: false
default: null
username:
description:
- username to use for authentication with server, passed as -u to supervisorctl
required: false
default: null
password:
description:
- password to use for authentication with server, passed as -p to supervisorctl
required: false
default: null
state:
description:
- The state of service
@ -45,11 +65,19 @@ author: Matt Wright
EXAMPLES = '''
# Manage the state of program to be in 'started' state.
- supervisorctl: name=my_app state=started
# Restart another_app using an alternate config file
- supervisorctl: name=another_app state=restart config=/var/opt/my_project/supervisord.conf
'''
def main():
arg_spec = dict(
name=dict(required=True),
config=dict(required=False),
serverurl=dict(required=False),
username=dict(required=False),
password=dict(required=False),
state=dict(required=True, choices=['present', 'started', 'restarted', 'stopped'])
)
@ -57,18 +85,33 @@ def main():
name = module.params['name']
state = module.params['state']
config = module.params.get('config')
serverurl = module.params.get('serverurl')
username = module.params.get('username')
password = module.params.get('password')
SUPERVISORCTL = module.get_bin_path('supervisorctl', True)
supervisorctl_args = [ module.get_bin_path('supervisorctl', True) ]
if config: supervisorctl_args.extend(['-c', config])
if serverurl: supervisorctl_args.extend(['-s', serverurl])
if username: supervisorctl_args.extend(['-u', username])
if password: supervisorctl_args.extend(['-p', password])
rc, out, err = module.run_command('%s status' % SUPERVISORCTL)
def run_supervisorctl(cmd, name=None, **kwargs):
args = list(supervisorctl_args) # copy the master args
args.append(cmd)
if name:
args.append(name)
return module.run_command(args, **kwargs)
rc, out, err = run_supervisorctl('status')
present = name in out
if state == 'present':
if not present:
if module.check_mode:
module.exit_json(changed=True)
module.run_command('%s reread' % SUPERVISORCTL, check_rc=True)
rc, out, err = module.run_command('%s add %s' % (SUPERVISORCTL, name))
run_supervisorctl('reread', check_rc=True)
rc, out, err = run_supervisorctl('add', name)
if '%s: added process group' % name in out:
module.exit_json(changed=True, name=name, state=state)
@ -77,7 +120,7 @@ def main():
module.exit_json(changed=False, name=name, state=state)
rc, out, err = module.run_command('%s status %s' % (SUPERVISORCTL, name))
rc, out, err = run_supervisorctl('status', name)
running = 'RUNNING' in out
if running and state == 'started':
@ -86,7 +129,7 @@ def main():
if running and state == 'stopped':
if module.check_mode:
module.exit_json(changed=True)
rc, out, err = module.run_command('%s stop %s' % (SUPERVISORCTL, name))
rc, out, err = run_supervisorctl('stop', name)
if '%s: stopped' % name in out:
module.exit_json(changed=True, name=name, state=state)
@ -96,8 +139,8 @@ def main():
elif state == 'restarted':
if module.check_mode:
module.exit_json(changed=True)
rc, out, err = module.run_command('%s update %s' % (SUPERVISORCTL, name))
rc, out, err = module.run_command('%s restart %s' % (SUPERVISORCTL, name))
rc, out, err = run_supervisorctl('update', name)
rc, out, err = run_supervisorctl('restart', name)
if '%s: started' % name in out:
module.exit_json(changed=True, name=name, state=state)
@ -107,7 +150,7 @@ def main():
elif not running and state == 'started':
if module.check_mode:
module.exit_json(changed=True)
rc, out, err = module.run_command('%s start %s' % (SUPERVISORCTL, name))
rc, out, err = run_supervisorctl('start',name)
if '%s: started' % name in out:
module.exit_json(changed=True, name=name, state=state)