Support systemd in the service module.

Most of it worked already, except for the enable parameter, because it
tried to use chkconfig which only sees SysV services. First look for
systemctl and use that if it exists.
This commit is contained in:
Florian Diebold 2012-08-25 22:26:34 +02:00
parent 801afc4a6b
commit fa2a65588d

21
service
View file

@ -32,7 +32,7 @@ def _find_binaries(m):
global CHKCONFIG
global INITCTL
paths = ['/sbin', '/usr/sbin', '/bin', '/usr/bin']
binaries = [ 'service', 'chkconfig', 'update-rc.d', 'initctl']
binaries = [ 'service', 'chkconfig', 'update-rc.d', 'initctl', 'systemctl']
location = dict()
for binary in binaries:
@ -44,7 +44,9 @@ def _find_binaries(m):
location[binary] = path + '/' + binary
break
if location.get('chkconfig', None):
if location.get('systemctl', None):
CHKCONFIG = location['systemctl']
elif location.get('chkconfig', None):
CHKCONFIG = location['chkconfig']
elif location.get('update-rc.d', None):
CHKCONFIG = location['update-rc.d']
@ -142,17 +144,16 @@ def _do_enable(name, enable):
# we change argument depending on real binary used
# update-rc.d wants enable/disable while
# chkconfig wants on/off
valid_argument = dict({'on' : 'on', 'off' : 'off'})
# also, systemctl needs the arguments reversed
if CHKCONFIG.endswith("update-rc.d"):
valid_argument['on'] = "enable"
valid_argument['off'] = "disable"
args = (CHKCONFIG, name, "enable" if enable else "disable")
elif CHKCONFIG.endswith("systemctl"):
args = (CHKCONFIG, "enable" if enable else "disable", name + ".service")
else:
args = (CHKCONFIG, name, "on" if enable else "off")
if enable is not None:
if enable:
rc, stdout, stderr = _run("%s %s %s" % (CHKCONFIG, name, valid_argument['on']))
else:
rc, stdout, stderr = _run("%s %s %s" % (CHKCONFIG, name, valid_argument['off']))
rc, stdout, stderr = _run("%s %s %s" % args)
return rc, stdout, stderr