class Inspec::Resources::Service
TODO: extend the logic to detect the running init system, independently of OS
Ubuntu < 15.04 : upstart
Ubuntu 15.04 : systemd
RedHat 7 : systemd
Fedora 15 : systemd
system.
We detect the init system for each operating system, based on the operating
def description
def description return nil if info.nil? info[:description] end
def enabled?(_level = nil)
def enabled?(_level = nil) return false if info.nil? info[:enabled] end
def info
def info return nil if @service_mgmt.nil? @cache ||= @service_mgmt.info(@service_name) end
def initialize(service_name, service_ctl = nil)
def initialize(service_name, service_ctl = nil) @service_name = service_name @service_mgmt = nil @service_ctl ||= service_ctl @cache = nil @service_mgmt = select_service_mgmt return skip_resource 'The `service` resource is not supported on your OS yet.' if @service_mgmt.nil? end
def installed?(_name = nil, _version = nil)
def installed?(_name = nil, _version = nil) return false if info.nil? info[:installed] end
def name
def name return @service_name if info.nil? info[:name] end
def params
def params return {} if info.nil? Hashie::Mash.new(info[:params] || {}) end
def runlevels(*args)
def runlevels(*args) return Runlevels.new(self) if info.nil? or info[:runlevels].nil? Runlevels.from_hash(self, info[:runlevels], args) end
def running?(_under = nil)
def running?(_under = nil) return false if info.nil? info[:running] end
def select_service_mgmt # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength
def select_service_mgmt # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength os = inspec.os platform = os[:name] # Ubuntu # @see: https://wiki.ubuntu.com/SystemdForUpstartUsers # Ubuntu 15.04 : Systemd # Systemd runs with PID 1 as /sbin/init. # Upstart runs with PID 1 as /sbin/upstart. # Ubuntu < 15.04 : Upstart # Upstart runs with PID 1 as /sbin/init. # Systemd runs with PID 1 as /lib/systemd/systemd. if %w{ubuntu}.include?(platform) version = os[:release].to_f if version < 15.04 Upstart.new(inspec, service_ctl) else Systemd.new(inspec, service_ctl) end elsif %w{linuxmint}.include?(platform) version = os[:release].to_f if version < 18 Upstart.new(inspec, service_ctl) else Systemd.new(inspec, service_ctl) end elsif %w{debian}.include?(platform) version = os[:release].to_i if version > 7 Systemd.new(inspec, service_ctl) else SysV.new(inspec, service_ctl || '/usr/sbin/service') end elsif %w{redhat fedora centos oracle}.include?(platform) version = os[:release].to_i if (%w{redhat centos oracle}.include?(platform) && version >= 7) || (platform == 'fedora' && version >= 15) Systemd.new(inspec, service_ctl) else SysV.new(inspec, service_ctl || '/sbin/service') end elsif %w{wrlinux}.include?(platform) SysV.new(inspec, service_ctl) elsif %w{mac_os_x}.include?(platform) LaunchCtl.new(inspec, service_ctl) elsif os.windows? WindowsSrv.new(inspec) elsif %w{freebsd}.include?(platform) BSDInit.new(inspec, service_ctl) elsif %w{arch}.include?(platform) Systemd.new(inspec, service_ctl) elsif %w{coreos}.include?(platform) Systemd.new(inspec, service_ctl) elsif %w{suse opensuse}.include?(platform) if os[:release].to_i >= 12 Systemd.new(inspec, service_ctl) else SysV.new(inspec, service_ctl || '/sbin/service') end elsif %w{aix}.include?(platform) SrcMstr.new(inspec) elsif %w{amazon}.include?(platform) if os[:release] =~ /^20\d\d/ Upstart.new(inspec, service_ctl) else Systemd.new(inspec, service_ctl) end elsif os.solaris? Svcs.new(inspec) end end
def startmode
def startmode return nil if info.nil? info[:startmode] end
def to_s
def to_s "Service #{@service_name}" end
def type
def type return nil if info.nil? info[:type] end