Service module outputting extra data.

The service module was printing stuff to stderr, returning two
JSON dicts, not using consistent 'failed' values, had dead code
and unused variables.  Added detection for the case when service
status returns 'xxx is dead and pid file exists' and made the
code a bit easier to read.
This commit is contained in:
John Kleint 2012-07-19 13:15:09 -04:00
parent 72aefdb609
commit 7933c3faed

33
service
View file

@ -75,7 +75,6 @@ def _find_binaries():
def _get_service_status(name): def _get_service_status(name):
rc, status_stdout, status_stderr = _run("%s %s status" % (SERVICE, name)) rc, status_stdout, status_stderr = _run("%s %s status" % (SERVICE, name))
status = status_stdout + status_stderr
# set the running state to None because we don't know it yet # set the running state to None because we don't know it yet
running = None running = None
@ -99,16 +98,18 @@ def _get_service_status(name):
# if the job status is still not known check it by status output keywords # if the job status is still not known check it by status output keywords
if running == None: if running == None:
# first tranform the status output that could irritate keyword matching # first tranform the status output that could irritate keyword matching
cleaned_status_stdout = status_stdout.lower().replace(name.lower(),'') cleanout = status_stdout.lower().replace(name.lower(), '')
if cleaned_status_stdout.find("stop") != -1: if "stop" in cleanout:
running = False running = False
elif cleaned_status_stdout.find("run") != -1 and cleaned_status_stdout.find("not") != -1: elif "run" in cleanout and "not" in cleanout:
running = False running = False
elif cleaned_status_stdout.find("run") != -1 and cleaned_status_stdout.find("not") == -1: elif "run" in cleanout and "not" not in cleanout:
running = True running = True
elif cleaned_status_stdout.find("start") != -1 and cleaned_status_stdout.find("not") == -1: elif "start" in cleanout and "not" not in cleanout:
running = True running = True
elif 'could not access pid file' in cleaned_status_stdout: elif 'could not access pid file' in cleanout:
running = False
elif 'is dead and pid file exists' in cleanout:
running = False running = False
# if the job status is still not known check it by special conditions # if the job status is still not known check it by special conditions
@ -205,8 +206,9 @@ if state or enable:
print json.dumps({ print json.dumps({
"failed" : True, "failed" : True,
"msg" : "failed determining the current service state => state stays unchanged", "msg" : "failed determining the current service state => state stays unchanged",
"changed": False
}) })
print >> sys.stderr, out + err sys.exit(1)
elif state: elif state:
# a state change command has been requested # a state change command has been requested
@ -244,10 +246,9 @@ if state or enable:
if rc != 0: if rc != 0:
print json.dumps({ print json.dumps({
"failed" : 1, "failed" : True,
"rc" : rc, "rc" : rc,
}) })
print >> sys.stderr, out + err
sys.exit(1) sys.exit(1)
@ -261,19 +262,7 @@ if state or enable:
result['status'] = stdout result['status'] = stdout
print json.dumps(result) print json.dumps(result)
elif list_items is not None:
# solo list=status mode, don't change anything, just return
# suitable for /usr/bin/ansible usage or API, playbooks
# not so much
print json.dumps({
"status" : status
})
else: else:
print json.dumps(dict(failed=True, msg="expected state or list parameters")) print json.dumps(dict(failed=True, msg="expected state or list parameters"))