Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

supervisorctl: add command-line options as module parameters #3442

Merged
merged 2 commits into from
Jul 20, 2013
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
68 changes: 57 additions & 11 deletions library/web_infrastructure/supervisorctl
Original file line number Diff line number Diff line change
Expand Up @@ -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
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:
description:
- The state of service
Expand All @@ -45,30 +65,56 @@ author: Matt Wright
EXAMPLES = '''
# Manage the state of program to be in 'started' state.
- 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():
arg_spec = dict(
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'])
)

module = AnsibleModule(argument_spec=arg_spec, supports_check_mode=True)

name = module.params['name']
state = module.params['state']

SUPERVISORCTL = module.get_bin_path('supervisorctl', True)

rc, out, err = module.run_command('%s status' % SUPERVISORCTL)
config = module.params.get('config')
server_url = module.params.get('server_url')
username = module.params.get('username')
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

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)
Expand All @@ -77,7 +123,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':
Expand All @@ -86,7 +132,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)
Expand All @@ -96,8 +142,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)
Expand All @@ -107,7 +153,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)
Expand Down