#6341: use shared function for parsing systemd status; check rc code

This commit is contained in:
Charles Duffy 2014-03-10 01:05:48 -05:00
parent fd5083fe71
commit 532cda524f

View file

@ -473,18 +473,25 @@ class LinuxService(Service):
if location.get('initctl', None): if location.get('initctl', None):
self.svc_initctl = location['initctl'] self.svc_initctl = location['initctl']
def get_systemd_status_dict(self):
(rc, out, err) = self.execute_command("%s show %s" % (self.enable_cmd, self.__systemd_unit,))
if rc != 0:
self.module.fail_json('failure %d running systemctl show for %r: %s' % (self.__systemd_unit, rc, err))
return dict(line.split('=', 1) for line in out.splitlines())
def get_systemd_service_status(self): def get_systemd_service_status(self):
(rc, out, err) = self.execute_command("%s show %s" % (self.enable_cmd, self.__systemd_unit)) d = self.get_systemd_status_dict()
d = dict(line.split('=', 1) for line in out.splitlines()) if d.get('ActiveState') == 'active':
if d['ActiveState'] == 'active':
# run-once services (for which a single successful exit indicates # run-once services (for which a single successful exit indicates
# that they are running as designed) should not be restarted here. # that they are running as designed) should not be restarted here.
# Thus, we are not checking d['SubState']. # Thus, we are not checking d['SubState'].
self.running = True self.running = True
self.crashed = False self.crashed = False
elif d['ActiveState'] == 'failed': elif d.get('ActiveState') == 'failed':
self.running = False self.running = False
self.crashed = True self.crashed = True
elif d.get('ActiveState') is None:
self.module.fail_json(msg='No ActiveState value in systemctl show output for %r' % (self.__systemd_unit,))
else: else:
self.running = False self.running = False
self.crashed = False self.crashed = False
@ -605,9 +612,7 @@ class LinuxService(Service):
return return
if self.enable_cmd.endswith("systemctl"): if self.enable_cmd.endswith("systemctl"):
(rc, out, err) = self.execute_command("%s show %s" % (self.enable_cmd, self.__systemd_unit)) d = self.get_systemd_status_dict()
d = dict(line.split('=', 1) for line in out.splitlines())
if "UnitFileState" in d: if "UnitFileState" in d:
if self.enable and d["UnitFileState"] == "enabled": if self.enable and d["UnitFileState"] == "enabled":
return return