Ignore failure of stop command if start succeeds with state=restarted

In some cases (see issue #1067) with state=restarted, a failure to stop
the service (which wasn't running) would appear to the module to be a
failure to restart the service even though it successfully started the
service.  This changes the behavior of the service module to focus
on the return code of the start command.  If the rc of stop is not
0 and the rc of start does equal 0, it considers the service
successfully restarted.  It then ignores the rc, stdout, and stderr
from the unsuccessful stop command.
This commit is contained in:
Stephen Fromm 2012-09-25 22:51:13 -07:00
parent f8a9541405
commit 19c0202aaf

View file

@ -225,6 +225,7 @@ def main():
# =========================================== # ===========================================
# run change commands if we need to # run change commands if we need to
if changed: if changed:
if state in ['started', 'running']: if state in ['started', 'running']:
rc_state, stdout, stderr = _run("%s %s start" % (SERVICE, name)) rc_state, stdout, stderr = _run("%s %s start" % (SERVICE, name))
elif state == 'stopped': elif state == 'stopped':
@ -234,6 +235,11 @@ def main():
elif state == 'restarted': elif state == 'restarted':
rc1, stdout1, stderr1 = _run("%s %s stop" % (SERVICE, name)) rc1, stdout1, stderr1 = _run("%s %s stop" % (SERVICE, name))
rc2, stdout2, stderr2 = _run("%s %s start" % (SERVICE, name)) rc2, stdout2, stderr2 = _run("%s %s start" % (SERVICE, name))
if rc1 != 0 and rc2 == 0:
rc_state = rc + rc2
stdout = stdout2
stderr = stderr2
else:
rc_state = rc + rc1 + rc2 rc_state = rc + rc1 + rc2
stdout = stdout1 + stdout2 stdout = stdout1 + stdout2
stderr = stderr1 + stderr2 stderr = stderr1 + stderr2