Merge pull request #2491 from tones111/to-upstream

Support systemd template service unit files
This commit is contained in:
Michael DeHaan 2013-03-24 13:35:36 -07:00
commit b5f3881e01

View file

@ -369,10 +369,20 @@ class LinuxService(Service):
elif location.get('systemctl', None): elif location.get('systemctl', None):
# verify service is managed by systemd # verify service is managed by systemd
rc, out, err = self.execute_command("%s --all" % (location['systemctl'])) rc, out, err = self.execute_command("%s list-unit-files" % (location['systemctl']))
look_for = "%s.service" % self.name
if look_for in out: # adjust the service name to account for template service unit files
index = self.name.find('@')
if index == -1:
name = self.name
else:
name = self.name[:index+1]
look_for = "%s.service" % name
for line in out.splitlines():
if line.startswith(look_for):
self.enable_cmd = location['systemctl'] self.enable_cmd = location['systemctl']
break
# Locate a tool for runtime service management (start, stop etc.) # Locate a tool for runtime service management (start, stop etc.)
self.svc_cmd = '' self.svc_cmd = ''
@ -473,10 +483,15 @@ class LinuxService(Service):
return return
if self.enable_cmd.endswith("systemctl"): if self.enable_cmd.endswith("systemctl"):
(rc, out, err) = self.execute_command("%s is-enabled %s.service" % (self.enable_cmd, self.name)) (rc, out, err) = self.execute_command("%s show %s.service" % (self.enable_cmd, self.name))
if self.enable and rc == 0:
d = dict(line.split('=', 1) for line in out.splitlines())
if "UnitFileState" in d:
if self.enable and d["UnitFileState"] == "enabled":
return return
elif not self.enable and rc == 1: elif not self.enable and d["UnitFileState"] == "disabled":
return
elif not self.enable:
return return
# we change argument depending on real binary used # we change argument depending on real binary used
@ -499,7 +514,7 @@ class LinuxService(Service):
self.changed = True self.changed = True
if self.module.check_mode and changed: if self.module.check_mode and self.changed:
self.module.exit_json(changed=True) self.module.exit_json(changed=True)
return self.execute_command("%s %s %s" % args) return self.execute_command("%s %s %s" % args)