Merge pull request #458 from bcoca/service_simplified

vastly simplified systemd detection, made enable/disable errors clearer
reviewable/pr18780/r1
Brian Coca 10 years ago
commit 9f37c87600

@ -399,7 +399,7 @@ class LinuxService(Service):
if os.path.isfile(initscript): if os.path.isfile(initscript):
self.svc_initscript = initscript self.svc_initscript = initscript
def check_systemd(name, initscript): def check_systemd():
# verify systemd is installed (by finding systemctl) # verify systemd is installed (by finding systemctl)
if not location.get('systemctl', False): if not location.get('systemctl', False):
return False return False
@ -414,51 +414,18 @@ class LinuxService(Service):
for line in f: for line in f:
if 'systemd' in line: if 'systemd' in line:
systemd_enabled = True
break
if not systemd_enabled:
return False
originalname = name
# default to .service if the unit type is not specified
if name.find('.') > 0:
unit_name, unit_type = name.rsplit('.', 1)
if unit_type not in ("service", "socket", "device", "mount", "automount",
"swap", "target", "path", "timer", "snapshot"):
name = "%s.service" % name
else:
name = "%s.service" % name
rc, out, err = self.execute_command("%s list-unit-files" % (location['systemctl']))
# adjust the service name to account for template service unit files
index = name.find('@')
if index != -1:
template_name = name[:index+1]
else:
template_name = name
self.__systemd_unit = None
for line in out.splitlines():
if line.startswith(template_name):
self.__systemd_unit = name
return True return True
# systemd also handles init scripts (and is enabled at this point)
if initscript:
self.__systemd_unit = originalname
return True
return False return False
# Locate a tool to enable/disable a service # Locate a tool to enable/disable a service
if check_systemd(self.name, self.svc_initscript): if location.get('systemctl',False) and check_systemd():
# service is managed by systemd # service is managed by systemd
self.enable_cmd = location['systemctl'] self.__systemd_unit = self.name
self.svc_cmd = location['systemctl'] self.svc_cmd = location['systemctl']
self.enable_cmd = location['systemctl']
elif location['initctl'] and os.path.exists("/etc/init/%s.conf" % self.name): elif location.get('initctl', False) and os.path.exists("/etc/init/%s.conf" % self.name):
# service is managed by upstart # service is managed by upstart
self.enable_cmd = location['initctl'] self.enable_cmd = location['initctl']
# set the upstart version based on the output of 'initctl version' # set the upstart version based on the output of 'initctl version'
@ -628,10 +595,6 @@ class LinuxService(Service):
self.changed = True self.changed = True
action = None action = None
# FIXME: we use chkconfig or systemctl
# to decide whether to run the command here but need something
# similar for upstart
# #
# Upstart's initctl # Upstart's initctl
# #
@ -831,9 +794,9 @@ class LinuxService(Service):
(rc, out, err) = self.execute_command("%s %s %s" % args) (rc, out, err) = self.execute_command("%s %s %s" % args)
if rc != 0: if rc != 0:
if err: if err:
self.module.fail_json(msg=err) self.module.fail_json(msg="Error when trying to %s %s: rc=%s %s" % (action, self.name, rc, err))
else: else:
self.module.fail_json(msg=out) self.module.fail_json(msg="Failure for %s %s: rc=%s %s" % (action, self.name, rc, out))
return (rc, out, err) return (rc, out, err)

Loading…
Cancel
Save