Merge pull request #3442 from neomantra/supervisorctl

supervisorctl: add command-line options as module parameters
reviewable/pr18780/r1
Michael DeHaan 12 years ago
commit 2cd5e23a51

@ -32,6 +32,26 @@ options:
- The name of the I(supervisord) program/process to manage - The name of the I(supervisord) program/process to manage
required: true required: true
default: null default: null
config:
description:
- configuration file path, passed as -c to supervisorctl
required: false
default: null
server_url:
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: state:
description: description:
- The state of service - The state of service
@ -45,11 +65,22 @@ author: Matt Wright
EXAMPLES = ''' EXAMPLES = '''
# Manage the state of program to be in 'started' state. # Manage the state of program to be in 'started' state.
- supervisorctl: name=my_app state=started - supervisorctl: name=my_app state=started
# Restart my_app, reading supervisorctl configuration from a specified file.
- supervisorctl: name=my_app state=restart config=/var/opt/my_project/supervisord.conf
# Restart my_app, connecting to supervisord with credentials and server URL.
- supervisorctl: name=my_app state=restart username=test password=testpass server_url=http://localhost:9001
''' '''
def main(): def main():
arg_spec = dict( arg_spec = dict(
name=dict(required=True), name=dict(required=True),
config=dict(required=False),
server_url=dict(required=False),
username=dict(required=False),
password=dict(required=False),
state=dict(required=True, choices=['present', 'started', 'restarted', 'stopped']) state=dict(required=True, choices=['present', 'started', 'restarted', 'stopped'])
) )
@ -57,18 +88,33 @@ def main():
name = module.params['name'] name = module.params['name']
state = module.params['state'] state = module.params['state']
config = module.params.get('config')
SUPERVISORCTL = module.get_bin_path('supervisorctl', True) server_url = module.params.get('server_url')
username = module.params.get('username')
rc, out, err = module.run_command('%s status' % SUPERVISORCTL) password = module.params.get('password')
supervisorctl_args = [ module.get_bin_path('supervisorctl', True) ]
if config: supervisorctl_args.extend(['-c', config])
if server_url: supervisorctl_args.extend(['-s', server_url])
if username: supervisorctl_args.extend(['-u', username])
if password: supervisorctl_args.extend(['-p', password])
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 present = name in out
if state == 'present': if state == 'present':
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 reread' % SUPERVISORCTL, check_rc=True) run_supervisorctl('reread', check_rc=True)
rc, out, err = module.run_command('%s add %s' % (SUPERVISORCTL, name)) rc, out, err = run_supervisorctl('add', name)
if '%s: added process group' % name in out: if '%s: added process group' % name in out:
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
@ -77,7 +123,7 @@ def main():
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 status %s' % (SUPERVISORCTL, name)) rc, out, err = run_supervisorctl('status', name)
running = 'RUNNING' in out running = 'RUNNING' in out
if running and state == 'started': if running and state == 'started':
@ -86,7 +132,7 @@ def main():
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)
rc, out, err = module.run_command('%s stop %s' % (SUPERVISORCTL, name)) rc, out, err = run_supervisorctl('stop', name)
if '%s: stopped' % name in out: if '%s: stopped' % name in out:
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
@ -96,8 +142,8 @@ def main():
elif state == 'restarted': elif state == 'restarted':
if module.check_mode: if module.check_mode:
module.exit_json(changed=True) module.exit_json(changed=True)
rc, out, err = module.run_command('%s update %s' % (SUPERVISORCTL, name)) rc, out, err = run_supervisorctl('update', name)
rc, out, err = module.run_command('%s restart %s' % (SUPERVISORCTL, name)) rc, out, err = run_supervisorctl('restart', name)
if '%s: started' % name in out: if '%s: started' % name in out:
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)
@ -107,7 +153,7 @@ def main():
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)
rc, out, err = module.run_command('%s start %s' % (SUPERVISORCTL, name)) rc, out, err = run_supervisorctl('start',name)
if '%s: started' % name in out: if '%s: started' % name in out:
module.exit_json(changed=True, name=name, state=state) module.exit_json(changed=True, name=name, state=state)

Loading…
Cancel
Save