mirror of
https://github.com/inspec/inspec
synced 2024-09-21 15:02:01 +00:00
Switch Service#select_service_mgmt from huge if statement to case.
Having a ton of conditions with `%w{one-string}.include?(platform)` is incredibly wasteful and slow. Apparently about 17x slower: ``` Calculating ------------------------------------- include_eh 529.315k (± 3.2%) i/s - 2.675M in 5.058296s include_or_eq 909.795k (± 1.5%) i/s - 4.568M in 5.022491s case_when 9.043M (± 2.8%) i/s - 45.443M in 5.029499s Comparison: case_when: 9042590.3 i/s include_or_eq: 909795.2 i/s - 9.94x slower include_eh: 529315.0 i/s - 17.08x slower ``` Signed-off-by: Ryan Davis <zenspider@chef.io>
This commit is contained in:
parent
8f4bac23eb
commit
ad6ffcccd6
1 changed files with 16 additions and 14 deletions
|
@ -112,21 +112,23 @@ module Inspec::Resources
|
|||
# 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)
|
||||
|
||||
case platform
|
||||
when "ubuntu"
|
||||
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)
|
||||
when "linuxmint"
|
||||
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)
|
||||
when "debian"
|
||||
if os[:release] == "buster/sid"
|
||||
version = 10
|
||||
else
|
||||
|
@ -137,40 +139,40 @@ module Inspec::Resources
|
|||
elsif version > 0
|
||||
SysV.new(inspec, service_ctl || "/usr/sbin/service")
|
||||
end
|
||||
elsif %w{redhat fedora centos oracle cloudlinux}.include?(platform)
|
||||
when "redhat", "fedora", "centos", "oracle", "cloudlinux"
|
||||
version = os[:release].to_i
|
||||
if (%w{redhat centos oracle cloudlinux}.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)
|
||||
when "wrlinux"
|
||||
SysV.new(inspec, service_ctl)
|
||||
elsif %w{mac_os_x}.include?(platform)
|
||||
when "mac_os_x"
|
||||
LaunchCtl.new(inspec, service_ctl)
|
||||
elsif %w{windows}.include?(platform)
|
||||
when "windows"
|
||||
WindowsSrv.new(inspec)
|
||||
elsif %w{freebsd}.include?(platform)
|
||||
when "freebsd"
|
||||
BSDInit.new(inspec, service_ctl)
|
||||
elsif %w{arch}.include?(platform)
|
||||
when "arch"
|
||||
Systemd.new(inspec, service_ctl)
|
||||
elsif %w{coreos}.include?(platform)
|
||||
when "coreos"
|
||||
Systemd.new(inspec, service_ctl)
|
||||
elsif %w{suse opensuse}.include?(platform)
|
||||
when "suse", "opensuse"
|
||||
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)
|
||||
when "aix"
|
||||
SrcMstr.new(inspec)
|
||||
elsif %w{amazon}.include?(platform)
|
||||
when "amazon"
|
||||
if os[:release] =~ /^20\d\d/
|
||||
Upstart.new(inspec, service_ctl)
|
||||
else
|
||||
Systemd.new(inspec, service_ctl)
|
||||
end
|
||||
elsif %w{solaris smartos omnios openindiana opensolaris nexentacore}.include?(platform)
|
||||
when "solaris", "smartos", "omnios", "openindiana", "opensolaris", "nexentacore"
|
||||
Svcs.new(inspec)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue