Allow adding additional arguments to service module
Some services allow additional arguments to be provided on the command line. This patch makes it possible.
This commit is contained in:
parent
0ab3bd0034
commit
3852b9918a
1 changed files with 28 additions and 20 deletions
|
@ -52,17 +52,23 @@ options:
|
|||
choices: [ "yes", "no" ]
|
||||
description:
|
||||
- Whether the service should start on boot.
|
||||
arguments:
|
||||
description:
|
||||
- Additional arguments provided on the command line
|
||||
aliases: [ 'args' ]
|
||||
examples:
|
||||
- code: "service: name=httpd state=started"
|
||||
description: Example action from Ansible Playbooks
|
||||
- code: "service: name=httpd state=stopped"
|
||||
description: Example action from Ansible Playbooks
|
||||
- code: "service: name=httpd state=restarted"
|
||||
description: Example action from Ansible Playbooks
|
||||
- code: "service: name=httpd state=reloaded"
|
||||
description: Example action from Ansible Playbooks
|
||||
- code: "service: name=foo pattern=/usr/bin/foo state=started"
|
||||
description: Example action from Ansible Playbooks
|
||||
- description: Example action to start service httpd, if not running
|
||||
code: "service: name=httpd state=started"
|
||||
- description: Example action to stop service httpd, if running
|
||||
code: "service: name=httpd state=stopped"
|
||||
- description: Example action to restart service httpd, in all cases
|
||||
code: "service: name=httpd state=restarted"
|
||||
- description: Example action to reload service httpd, in all cases
|
||||
code: "service: name=httpd state=reloaded"
|
||||
- description: Example action to start service foo, based on running process /usr/bin/foo
|
||||
code: "service: name=foo pattern=/usr/bin/foo state=started"
|
||||
- description: Example action to restart network service for interface eth0
|
||||
code: "service: name=network state=restarted args=eth0"
|
||||
'''
|
||||
|
||||
import platform
|
||||
|
@ -123,8 +129,8 @@ def _find_binaries(m,name):
|
|||
else:
|
||||
INITCTL = None
|
||||
|
||||
def _get_service_status(name, pattern):
|
||||
rc, status_stdout, status_stderr = _run("%s %s status" % (SERVICE, name))
|
||||
def _get_service_status(name, pattern, arguments):
|
||||
rc, status_stdout, status_stderr = _run("%s %s status %s" % (SERVICE, name, arguments))
|
||||
|
||||
# set the running state to None because we don't know it yet
|
||||
running = None
|
||||
|
@ -258,7 +264,8 @@ def main():
|
|||
name = dict(required=True),
|
||||
state = dict(choices=['running', 'started', 'stopped', 'restarted', 'reloaded']),
|
||||
pattern = dict(required=False, default=None),
|
||||
enabled = dict(choices=BOOLEANS)
|
||||
enabled = dict(choices=BOOLEANS),
|
||||
arguments = dict(aliases=['args']),
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -266,6 +273,7 @@ def main():
|
|||
state = module.params['state']
|
||||
pattern = module.params['pattern']
|
||||
enable = module.boolean(module.params.get('enabled', None))
|
||||
arguments = module.params.get('arguments', '')
|
||||
|
||||
# Set PS options here if 'ps auxww' will not work on
|
||||
# target platform
|
||||
|
@ -279,7 +287,7 @@ def main():
|
|||
|
||||
# ===========================================
|
||||
# get service status
|
||||
running = _get_service_status(name, pattern)
|
||||
running = _get_service_status(name, pattern, arguments)
|
||||
|
||||
# ===========================================
|
||||
# Some common variables
|
||||
|
@ -329,14 +337,14 @@ def main():
|
|||
reload = "reload"
|
||||
|
||||
if state in ['started', 'running']:
|
||||
rc_state, stdout, stderr = _run("%s %s" % (svc_cmd,start))
|
||||
rc_state, stdout, stderr = _run("%s %s %s" % (svc_cmd, start, arguments))
|
||||
elif state == 'stopped':
|
||||
rc_state, stdout, stderr = _run("%s %s" % (svc_cmd,stop))
|
||||
rc_state, stdout, stderr = _run("%s %s %s" % (svc_cmd, stop, arguments))
|
||||
elif state == 'reloaded':
|
||||
rc_state, stdout, stderr = _run("%s %s" % (svc_cmd,reload))
|
||||
rc_state, stdout, stderr = _run("%s %s %s" % (svc_cmd, reload, arguments))
|
||||
elif state == 'restarted':
|
||||
rc1, stdout1, stderr1 = _run("%s %s" % (svc_cmd,stop))
|
||||
rc2, stdout2, stderr2 = _run("%s %s" % (svc_cmd,start))
|
||||
rc1, stdout1, stderr1 = _run("%s %s %s" % (svc_cmd, stop, arguments))
|
||||
rc2, stdout2, stderr2 = _run("%s %s %s" % (svc_cmd, start, arguments))
|
||||
if rc1 != 0 and rc2 == 0:
|
||||
rc_state = rc + rc2
|
||||
stdout = stdout2
|
||||
|
@ -359,7 +367,7 @@ def main():
|
|||
if state:
|
||||
result['state'] = state
|
||||
|
||||
rc, stdout, stderr = _run("%s status" % (svc_cmd))
|
||||
rc, stdout, stderr = _run("%s status %s" % (svc_cmd, arguments))
|
||||
module.exit_json(**result)
|
||||
|
||||
# this is magic, see lib/ansible/module_common.py
|
||||
|
|
Loading…
Reference in a new issue