class Inspec::Resources::SysV
Constants
- RUNLEVELS
Public Class Methods
new(service_name, service_ctl = nil)
click to toggle source
Calls superclass method
Inspec::Resources::ServiceManager::new
# File lib/inspec/resources/service.rb, line 430 def initialize(service_name, service_ctl = nil) @service_ctl = service_ctl || "service" super end
Public Instance Methods
info(service_name)
click to toggle source
# File lib/inspec/resources/service.rb, line 435 def info(service_name) # check if service is installed # read all available services via ls /etc/init.d/ srvlist = inspec.command("ls -1 /etc/init.d/") return nil if srvlist.exit_status != 0 # check if the service is in list service = srvlist.stdout.split("\n").select { |srv| srv == service_name } # abort if we could not find any service return nil if service.empty? # read all enabled services from runlevel # on rhel via: 'chkconfig --list', is not installed by default # bash: for i in `find /etc/rc*.d -name S*`; do basename $i | sed -r 's/^S[0-9]+//'; done | sort | uniq enabled_services_cmd = inspec.command('find /etc/rc*.d /etc/init.d/rc*.d -name "S*"').stdout service_line = %r{rc(?<runlevel>[0-6])\.d/S[^/]*?#{Regexp.escape service_name}$} all_services = enabled_services_cmd.split("\n").map do |line| service_line.match(line) end.compact enabled = !all_services.empty? # Determine a list of runlevels which this service is activated for runlevels = RUNLEVELS.dup all_services.each { |x| runlevels[x[:runlevel].to_i] = true } # check if service is really running # service throws an exit code if the service is not installed or # not enabled cmd = inspec.command("#{service_ctl} #{service_name} status") running = cmd.exit_status == 0 { name: service_name, description: nil, installed: true, running: running, enabled: enabled, runlevels: runlevels, type: "sysv", } end