class Chef::Platform::ServiceHelpers
Public Class Methods
config_for_service(service_name)
click to toggle source
# File lib/chef/platform/service_helpers.rb, line 68 def config_for_service(service_name) configs = [] if ::File.exist?(Chef.path_to("/etc/init.d/#{service_name}")) configs += [ :initd, :systemd ] end if ::File.exist?(Chef.path_to("/etc/init/#{service_name}.conf")) configs << :upstart end if ::File.exist?(Chef.path_to("/etc/xinetd.d/#{service_name}")) configs << :xinetd end if ::File.exist?(Chef.path_to("/etc/rc.d/#{service_name}")) configs << :etc_rcd end if ::File.exist?(Chef.path_to("/usr/local/etc/rc.d/#{service_name}")) configs << :usr_local_etc_rcd end if has_systemd_service_unit?(service_name) || has_systemd_unit?(service_name) configs << :systemd end configs end
service_resource_providers()
click to toggle source
This helper is mostly used to sort out the mess of different linux mechanisms that can be used to start services. It does not necessarily need to linux-specific, but currently all our other service providers are narrowly platform-specific with no alternatives.
NOTE: if a system has (for example) chkconfig installed then we should report that chkconfig is installed. The fact that a system may also have systemd installed does not mean that we do not report that systemd is also installed. This module is purely for discovery of all the alternatives, handling the priority of the different services is NOT a design concern of this module.
# File lib/chef/platform/service_helpers.rb, line 38 def service_resource_providers providers = [] if ::File.exist?(Chef.path_to("/usr/sbin/update-rc.d")) providers << :debian end if ::File.exist?(Chef.path_to("/usr/sbin/invoke-rc.d")) providers << :invokercd end if ::File.exist?(Chef.path_to("/sbin/initctl")) providers << :upstart end if ::File.exist?(Chef.path_to("/sbin/insserv")) providers << :insserv end if systemd_is_init? providers << :systemd end if ::File.exist?(Chef.path_to("/sbin/chkconfig")) providers << :redhat end providers end
Private Class Methods
has_systemd_service_unit?(svc_name)
click to toggle source
# File lib/chef/platform/service_helpers.rb, line 105 def has_systemd_service_unit?(svc_name) %w{ /etc /usr/lib /lib /run }.any? do |load_path| ::File.exist?( Chef.path_to("#{load_path}/systemd/system/#{svc_name.gsub(/@.*$/, '@')}.service") ) end end
has_systemd_unit?(svc_name)
click to toggle source
# File lib/chef/platform/service_helpers.rb, line 113 def has_systemd_unit?(svc_name) # TODO: stop supporting non-service units with service resource %w{ /etc /usr/lib /lib /run }.any? do |load_path| ::File.exist?(Chef.path_to("#{load_path}/systemd/system/#{svc_name}")) end end
systemd_is_init?()
click to toggle source
# File lib/chef/platform/service_helpers.rb, line 100 def systemd_is_init? ::File.exist?(Chef.path_to("/proc/1/comm")) && ::File.open(Chef.path_to("/proc/1/comm")).gets.chomp == "systemd" end