Merge pull request #2491 from tones111/to-upstream
Support systemd template service unit files
This commit is contained in:
commit
b5f3881e01
1 changed files with 24 additions and 9 deletions
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue