From cbeb6a63e59ed6974262a7f5db6be9cc75d8ac73 Mon Sep 17 00:00:00 2001 From: Evan Wies Date: Thu, 4 Jul 2013 12:23:16 -0400 Subject: [PATCH] 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. --- library/web_infrastructure/supervisorctl | 65 ++++++++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/library/web_infrastructure/supervisorctl b/library/web_infrastructure/supervisorctl index 0185af5648e..d9f30be4c5a 100644 --- a/library/web_infrastructure/supervisorctl +++ b/library/web_infrastructure/supervisorctl @@ -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'] - - SUPERVISORCTL = module.get_bin_path('supervisorctl', True) - - rc, out, err = module.run_command('%s status' % SUPERVISORCTL) + config = module.params.get('config') + serverurl = module.params.get('serverurl') + 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 serverurl: supervisorctl_args.extend(['-s', serverurl]) + 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) @@ -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)