@ -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 )