ohai 14.6.2 → 14.8.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71c27302cdf32368fc8014db58963f0e743021c347761701b714e6221013b417
4
- data.tar.gz: 9e904244a04b14fb93f604de5a911efc087dd9c6a037e5b995363b9ade746e32
3
+ metadata.gz: 524e88334ac80fdc8ae183847f9eab6ef4cab298f39e15bc1e9eeb256a268794
4
+ data.tar.gz: dbdcd571211fed208f544f2a68b4499d9f0a7d45f8712ef8d7a9987a43abfeb4
5
5
  SHA512:
6
- metadata.gz: 3639681908ec02d8c06900c886ad41a91303084920e476ce5c83d11b62fe27040ccd5dcd33af444f481bd6738a8e47ad01c6613235d339b46dd0a638ccabb8b5
7
- data.tar.gz: 6cdc5bc33fea99cade6973bb778a3101f6b4bb2eccee9db83b37a4b1bcfe2fb88e86189377500cb0aae280305891becca4dbf589cf2519b52d99194cf07ba064
6
+ metadata.gz: 0dc03263ccbc0fec35bde6fe7d60d184850a81832c35141232d5169dcf6fad84ade7f4d81b504923057526d403440da3cb91732e93447896c10f960981d22c32
7
+ data.tar.gz: 66c6a59004a0ab93466b8b66d09086801220ad28fce64dd3f549ac9865595c15b24c0a2bd70ddc0fda39a7e171bf022c377cbdee3565a3ba962c23a853b1b042
@@ -28,7 +28,11 @@ module Ohai
28
28
  def http_get(uri)
29
29
  conn = Net::HTTP.start(GCE_METADATA_ADDR)
30
30
  conn.read_timeout = 6
31
- conn.get(uri, { "Metadata-Flavor" => "Google" })
31
+ conn.get(uri, {
32
+ "Metadata-Flavor" => "Google",
33
+ "User-Agent" => "chef-ohai/#{Ohai::VERSION}",
34
+ }
35
+ )
32
36
  end
33
37
 
34
38
  def fetch_metadata(id = "")
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Author:: Bryan McLellan (btm@loftninjas.org)
3
3
  # Copyright:: Copyright (c) 2009 Bryan McLellan
4
- # Copyright:: Copyright (c) 2015-2016 Chef Software, Inc.
4
+ # Copyright:: Copyright (c) 2015-2018 Chef Software, Inc.
5
5
  # License:: Apache License, Version 2.0
6
6
  #
7
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -76,7 +76,7 @@ Ohai.plugin(:Virtualization) do
76
76
  # Detect KVM/QEMU paravirt guests from cpu, report as KVM
77
77
  # hw.model: QEMU Virtual CPU version 0.9.1
78
78
  so = shell_out("sysctl -n hw.model")
79
- if so.stdout.split($/)[0] =~ /QEMU Virtual CPU|Common KVM processor|Common 32-bit KVM processor/
79
+ if so.stdout =~ /QEMU Virtual CPU|KVM processor/
80
80
  virtualization[:system] = "kvm"
81
81
  virtualization[:role] = "guest"
82
82
  virtualization[:systems][:kvm] = "guest"
@@ -87,27 +87,25 @@ Ohai.plugin(:Virtualization) do
87
87
  # there are a limited number of hypervisors detected here, BUT it doesn't
88
88
  # require dmidecode to be installed and dmidecode isn't in freebsd out of the box
89
89
  so = shell_out("sysctl -n kern.vm_guest")
90
- case so.stdout
91
- when /vmware/
92
- virtualization[:system] = "vmware"
93
- virtualization[:role] = "guest"
94
- virtualization[:systems][:vmware] = "guest"
95
- logger.trace("Plugin Virtualization: Guest running on VMware detected")
96
- when /hv/
97
- virtualization[:system] = "hyperv"
98
- virtualization[:role] = "guest"
99
- virtualization[:systems][:hyperv] = "guest"
100
- logger.trace("Plugin Virtualization: Guest running on Hyper-V detected")
101
- when /xen/
102
- virtualization[:system] = "xen"
103
- virtualization[:role] = "guest"
104
- virtualization[:systems][:xen] = "guest"
105
- logger.trace("Plugin Virtualization: Guest running on Xen detected")
106
- when /bhyve/
107
- virtualization[:system] = "bhyve"
90
+ hypervisor = case so.stdout
91
+ when /vmware/
92
+ "vmware"
93
+ when /hv/
94
+ "hyperv"
95
+ when /xen/
96
+ "xen"
97
+ when /kvm/
98
+ so = shell_out("sysctl -n kern.hostuuid")
99
+ so.stdout =~ /^ec2/ ? "amazonec2" : "kvm"
100
+ when /bhyve/
101
+ "bhyve"
102
+ end
103
+
104
+ if hypervisor
105
+ virtualization[:system] = hypervisor
108
106
  virtualization[:role] = "guest"
109
- virtualization[:systems][:bhyve] = "guest"
110
- logger.trace("Plugin Virtualization: Guest running on bhyve detected")
107
+ virtualization[:systems][hypervisor.to_sym] = "guest"
108
+ logger.trace("Plugin Virtualization: Guest running on #{hypervisor} detected")
111
109
  end
112
110
 
113
111
  # parse dmidecode to discover various virtualization guests
@@ -127,7 +127,7 @@ Ohai.plugin(:Platform) do
127
127
  when /debian/, /ubuntu/, /linuxmint/, /raspbian/, /cumulus/
128
128
  # apt-get+dpkg almost certainly goes here
129
129
  "debian"
130
- when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/, /nexus_centos/, /clearos/, /bigip/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
130
+ when /oracle/, /centos/, /redhat/, /scientific/, /enterpriseenterprise/, /xcp/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/, /nexus_centos/, /clearos/, /bigip/ # Note that 'enterpriseenterprise' is oracle's LSB "distributor ID"
131
131
  # NOTE: "rhel" should be reserved exclusively for recompiled rhel versions that are nearly perfectly compatible down to the platform_version.
132
132
  # The operating systems that are "rhel" should all be as compatible as rhel7 = centos7 = oracle7 = scientific7 (98%-ish core RPM version compatibility
133
133
  # and the version numbers MUST track the upstream). The appropriate EPEL version repo should work nearly perfectly. Some variation like the
@@ -137,7 +137,7 @@ Ohai.plugin(:Platform) do
137
137
  "rhel"
138
138
  when /amazon/
139
139
  "amazon"
140
- when /suse/, /sles/, /opensuse/
140
+ when /suse/, /sles/, /opensuse/, /opensuseleap/, /sled/
141
141
  "suse"
142
142
  when /fedora/, /pidora/, /arista_eos/
143
143
  # In the broadest sense: RPM-based, fedora-derived distributions which are not strictly re-compiled RHEL (if it uses RPMs, and smells more like redhat and less like
@@ -149,7 +149,7 @@ Ohai.plugin(:Platform) do
149
149
  "gentoo"
150
150
  when /slackware/
151
151
  "slackware"
152
- when /arch/
152
+ when /arch/, /manjaro/, /antergos/
153
153
  "arch"
154
154
  when /exherbo/
155
155
  "exherbo"
@@ -157,6 +157,8 @@ Ohai.plugin(:Platform) do
157
157
  "alpine"
158
158
  when /clearlinux/
159
159
  "clearlinux"
160
+ when /mangeia/
161
+ "mandriva"
160
162
  end
161
163
  end
162
164
 
@@ -196,6 +198,9 @@ Ohai.plugin(:Platform) do
196
198
  contents = File.read("/etc/parallels-release").chomp
197
199
  platform get_redhatish_platform(contents)
198
200
  platform_version contents.match(/(\d\.\d\.\d)/)[0]
201
+ elsif File.exist?("/etc/Eos-release")
202
+ platform "arista_eos"
203
+ platform_version File.read("/etc/Eos-release").strip.split[-1]
199
204
  elsif File.exist?("/etc/redhat-release")
200
205
  if os_release_file_is_cisco? # Cisco guestshell
201
206
  platform "nexus_centos"
@@ -224,10 +229,6 @@ Ohai.plugin(:Platform) do
224
229
  else
225
230
  platform "suse"
226
231
  end
227
- elsif File.exist?("/etc/Eos-release")
228
- platform "arista_eos"
229
- platform_version File.read("/etc/Eos-release").strip.split[-1]
230
- platform_family "fedora"
231
232
  elsif os_release_file_is_cisco?
232
233
  raise "unknown Cisco /etc/os-release or /etc/cisco-release ID_LIKE field" if
233
234
  os_release_info["ID_LIKE"].nil? || ! os_release_info["ID_LIKE"].include?("wrlinux")
@@ -283,6 +284,9 @@ Ohai.plugin(:Platform) do
283
284
  elsif lsb[:id] =~ /XenServer/i
284
285
  platform "xenserver"
285
286
  platform_version lsb[:release]
287
+ elsif lsb[:id] =~ /XCP/i
288
+ platform "xcp"
289
+ platform_version lsb[:release]
286
290
  elsif lsb[:id] # LSB can provide odd data that changes between releases, so we currently fall back on it rather than dealing with its subtleties
287
291
  platform lsb[:id].downcase
288
292
  platform_version lsb[:release]
@@ -291,7 +295,14 @@ Ohai.plugin(:Platform) do
291
295
  # We have to do this for compatibility reasons, or older OS releases might get different
292
296
  # "platform" or "platform_version" attributes (e.g. SLES12, RHEL7).
293
297
  elsif File.exist?("/etc/os-release")
294
- platform os_release_info["ID"] == "sles" ? "suse" : os_release_info["ID"] # SLES is wrong. We call it SUSE
298
+ case os_release_info["ID"]
299
+ when "sles"
300
+ platform "suse" # SLES is wrong. We call it SUSE
301
+ when "opensuse-leap"
302
+ platform "opensuseleap"
303
+ else
304
+ platform os_release_info["ID"]
305
+ end
295
306
  platform_version os_release_info["VERSION_ID"]
296
307
  # platform_family also does not need to be hardcoded anymore.
297
308
  # This would be the correct way, but we stick with "determine_platform_family" for compatibility reasons.
@@ -150,6 +150,17 @@ Ohai.plugin(:Virtualization) do
150
150
  end
151
151
  end
152
152
 
153
+ # Detect Hyper-V guest and the hostname of the host
154
+ if File.exist?("/var/lib/hyperv/.kvp_pool_3")
155
+ logger.trace("Plugin Virtualization: /var/lib/hyperv/.kvp_pool_3 contains string indicating Hyper-V guest")
156
+ data = File.read("/var/lib/hyperv/.kvp_pool_3")
157
+ hyperv_host = data[/\HostName(.*?)HostingSystemEditionId/, 1].scan(/[[:print:]]/).join.downcase
158
+ virtualization[:system] = "hyperv"
159
+ virtualization[:role] = "guest"
160
+ virtualization[:systems][:hyperv] = "guest"
161
+ virtualization[:hypervisor_host] = hyperv_host
162
+ end
163
+
153
164
  # Detect Linux-VServer
154
165
  if File.exist?("/proc/self/status")
155
166
  proc_self_status = File.read("/proc/self/status")
@@ -212,6 +223,7 @@ Ohai.plugin(:Virtualization) do
212
223
  logger.trace("Plugin Virtualization: /proc/self/cgroup and lxc-version command exist. Detecting as lxc host")
213
224
  virtualization[:system] = "lxc"
214
225
  virtualization[:role] = "host"
226
+ virtualization[:systems][:lxc] = "host"
215
227
  end
216
228
  # In general, the 'systems' framework from OHAI-182 is less susceptible to conflicts
217
229
  # But, this could overwrite virtualization[:systems][:lxc] = "guest"
@@ -231,6 +243,7 @@ Ohai.plugin(:Virtualization) do
231
243
  logger.trace("Plugin Virtualization: /dev/lxd/sock exists. Detecting as lxd guest")
232
244
  virtualization[:system] = "lxd"
233
245
  virtualization[:role] = "guest"
246
+ virtualization[:systems][:lxd] = "guest"
234
247
  else
235
248
  # 'How' LXD is installed dictates the runtime data location
236
249
  #
@@ -245,6 +258,7 @@ Ohai.plugin(:Virtualization) do
245
258
  logger.trace("Plugin Virtualization: #{devlxd} exists. Detecting as lxd host")
246
259
  virtualization[:system] = "lxd"
247
260
  virtualization[:role] = "host"
261
+ virtualization[:systems][:lxd] = "host"
248
262
  break
249
263
  end
250
264
  end
@@ -18,5 +18,5 @@
18
18
 
19
19
  module Ohai
20
20
  OHAI_ROOT = File.expand_path(File.dirname(__FILE__))
21
- VERSION = "14.6.2".freeze
21
+ VERSION = "14.8.10".freeze
22
22
  end
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.license = "Apache-2.0"
11
11
  s.author = "Adam Jacob"
12
12
  s.email = "adam@chef.io"
13
- s.homepage = "https://docs.chef.io/ohai.html"
13
+ s.homepage = "https://github.com/chef/ohai/"
14
14
 
15
15
  s.required_ruby_version = ">= 2.4"
16
16
 
@@ -34,5 +34,5 @@ Gem::Specification.new do |s|
34
34
  s.executables = %w{ohai}
35
35
 
36
36
  s.require_path = "lib"
37
- s.files = %w{LICENSE README.md Gemfile Rakefile} + Dir.glob("*.gemspec") + Dir.glob("{docs,lib,spec}/**/*")
37
+ s.files = %w{LICENSE Gemfile Rakefile} + Dir.glob("*.gemspec") + Dir.glob("{docs,lib,spec}/**/*")
38
38
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Bryan McLellan <btm@chef.io>
3
- # Copyright:: Copyright (c) 2012-2016 Chef Software, Inc.
3
+ # Copyright:: Copyright (c) 2012-2018 Chef Software, Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,54 +19,56 @@
19
19
  require_relative "../../../spec_helper.rb"
20
20
 
21
21
  describe Ohai::System, "BSD virtualization plugin" do
22
+ let(:plugin) { get_plugin("bsd/virtualization") }
23
+
22
24
  before(:each) do
23
- @plugin = get_plugin("bsd/virtualization")
24
- allow(@plugin).to receive(:collect_os).and_return(:freebsd)
25
- allow(@plugin).to receive(:shell_out).with("sysctl -n security.jail.jailed").and_return(mock_shell_out(0, "0", ""))
26
- allow(@plugin).to receive(:shell_out).with((Ohai.abs_path( "/sbin/kldstat" )).to_s).and_return(mock_shell_out(0, "", ""))
27
- allow(@plugin).to receive(:shell_out).with("jls -nd").and_return(mock_shell_out(0, "", ""))
28
- allow(@plugin).to receive(:shell_out).with("sysctl -n hw.model").and_return(mock_shell_out(0, "", ""))
29
- allow(@plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "", ""))
25
+ allow(plugin).to receive(:collect_os).and_return(:freebsd)
26
+ allow(plugin).to receive(:shell_out).with("sysctl -n security.jail.jailed").and_return(mock_shell_out(0, "0", ""))
27
+ allow(plugin).to receive(:shell_out).with((Ohai.abs_path( "/sbin/kldstat" )).to_s).and_return(mock_shell_out(0, "", ""))
28
+ allow(plugin).to receive(:shell_out).with("jls -nd").and_return(mock_shell_out(0, "", ""))
29
+ allow(plugin).to receive(:shell_out).with("sysctl -n hw.model").and_return(mock_shell_out(0, "", ""))
30
+ allow(plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "", ""))
31
+ allow(plugin).to receive(:shell_out).with("sysctl -n kern.hostuuid").and_return(mock_shell_out(0, "", ""))
30
32
  allow(File).to receive(:exist?).and_return false
31
33
  end
32
34
 
33
35
  context "when on a bhyve host" do
34
36
  it "detects we are a host" do
35
37
  allow(File).to receive(:exist?).with("/dev/vmm").and_return true
36
- @plugin.run
37
- expect(@plugin[:virtualization][:system]).to eq("bhyve")
38
- expect(@plugin[:virtualization][:role]).to eq("host")
39
- expect(@plugin[:virtualization][:systems][:bhyve]).to eq("host")
38
+ plugin.run
39
+ expect(plugin[:virtualization][:system]).to eq("bhyve")
40
+ expect(plugin[:virtualization][:role]).to eq("host")
41
+ expect(plugin[:virtualization][:systems][:bhyve]).to eq("host")
40
42
  end
41
43
  end
42
44
 
43
45
  context "when on a bhyve guest" do
44
46
  it "detects we are a guest" do
45
- allow(@plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "bhyve", ""))
46
- @plugin.run
47
- expect(@plugin[:virtualization][:system]).to eq("bhyve")
48
- expect(@plugin[:virtualization][:role]).to eq("guest")
49
- expect(@plugin[:virtualization][:systems][:bhyve]).to eq("guest")
47
+ allow(plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "bhyve", ""))
48
+ plugin.run
49
+ expect(plugin[:virtualization][:system]).to eq("bhyve")
50
+ expect(plugin[:virtualization][:role]).to eq("guest")
51
+ expect(plugin[:virtualization][:systems][:bhyve]).to eq("guest")
50
52
  end
51
53
  end
52
54
 
53
55
  context "jails" do
54
56
  it "detects we are in a jail" do
55
- allow(@plugin).to receive(:shell_out).with("sysctl -n security.jail.jailed").and_return(mock_shell_out(0, "1", ""))
56
- @plugin.run
57
- expect(@plugin[:virtualization][:system]).to eq("jail")
58
- expect(@plugin[:virtualization][:role]).to eq("guest")
59
- expect(@plugin[:virtualization][:systems][:jail]).to eq("guest")
57
+ allow(plugin).to receive(:shell_out).with("sysctl -n security.jail.jailed").and_return(mock_shell_out(0, "1", ""))
58
+ plugin.run
59
+ expect(plugin[:virtualization][:system]).to eq("jail")
60
+ expect(plugin[:virtualization][:role]).to eq("guest")
61
+ expect(plugin[:virtualization][:systems][:jail]).to eq("guest")
60
62
  end
61
63
 
62
64
  it "detects we are hosting jails" do
63
65
  # from http://www.freebsd.org/doc/handbook/jails-application.html
64
66
  @jails = "JID IP Address Hostname Path\n 3 192.168.3.17 ns.example.org /home/j/ns\n 2 192.168.3.18 mail.example.org /home/j/mail\n 1 62.123.43.14 www.example.org /home/j/www"
65
- allow(@plugin).to receive(:shell_out).with("jls -nd").and_return(mock_shell_out(0, @jails, ""))
66
- @plugin.run
67
- expect(@plugin[:virtualization][:system]).to eq("jail")
68
- expect(@plugin[:virtualization][:role]).to eq("host")
69
- expect(@plugin[:virtualization][:systems][:jail]).to eq("host")
67
+ allow(plugin).to receive(:shell_out).with("jls -nd").and_return(mock_shell_out(0, @jails, ""))
68
+ plugin.run
69
+ expect(plugin[:virtualization][:system]).to eq("jail")
70
+ expect(plugin[:virtualization][:role]).to eq("host")
71
+ expect(plugin[:virtualization][:systems][:jail]).to eq("host")
70
72
  end
71
73
  end
72
74
 
@@ -77,14 +79,14 @@ describe Ohai::System, "BSD virtualization plugin" do
77
79
  1 40 0xffffffff80100000 d20428 kernel
78
80
  7 3 0xffffffff81055000 41e88 vboxguest.ko
79
81
  OUT
80
- allow(@plugin).to receive(:shell_out).with((Ohai.abs_path("/sbin/kldstat")).to_s).and_return(mock_shell_out(0, @vbox_guest, ""))
82
+ allow(plugin).to receive(:shell_out).with((Ohai.abs_path("/sbin/kldstat")).to_s).and_return(mock_shell_out(0, @vbox_guest, ""))
81
83
  end
82
84
 
83
85
  it "detects we are a guest" do
84
- @plugin.run
85
- expect(@plugin[:virtualization][:system]).to eq("vbox")
86
- expect(@plugin[:virtualization][:role]).to eq("guest")
87
- expect(@plugin[:virtualization][:systems][:vbox]).to eq("guest")
86
+ plugin.run
87
+ expect(plugin[:virtualization][:system]).to eq("vbox")
88
+ expect(plugin[:virtualization][:role]).to eq("guest")
89
+ expect(plugin[:virtualization][:systems][:vbox]).to eq("guest")
88
90
  end
89
91
  end
90
92
 
@@ -95,56 +97,49 @@ OUT
95
97
  1 40 0xffffffff80100000 d20428 kernel
96
98
  7 3 0xffffffff81055000 41e88 vboxdrv.ko
97
99
  OUT
98
- allow(@plugin).to receive(:shell_out).with("/sbin/kldstat").and_return(mock_shell_out(0, @stdout, ""))
100
+ allow(plugin).to receive(:shell_out).with("/sbin/kldstat").and_return(mock_shell_out(0, @stdout, ""))
99
101
  end
100
102
 
101
103
  it "detects we are a host" do
102
- @plugin.run
103
- expect(@plugin[:virtualization][:system]).to eq("vbox")
104
- expect(@plugin[:virtualization][:role]).to eq("host")
105
- expect(@plugin[:virtualization][:systems][:vbox]).to eq("host")
104
+ plugin.run
105
+ expect(plugin[:virtualization][:system]).to eq("vbox")
106
+ expect(plugin[:virtualization][:role]).to eq("host")
107
+ expect(plugin[:virtualization][:systems][:vbox]).to eq("host")
106
108
  end
107
109
  end
108
110
 
109
111
  context "when on a QEMU guest" do
110
112
  it "detects we are a guest" do
111
113
  [ "Common KVM processor", 'QEMU Virtual CPU version (cpu64-rhel6) ("GenuineIntel" 686-class)', "Common 32-bit KVM processor"].each do |kvm_string|
112
- allow(@plugin).to receive(:shell_out).with("sysctl -n hw.model").and_return(mock_shell_out(0, kvm_string, ""))
113
- @plugin.run
114
- expect(@plugin[:virtualization][:system]).to eq("kvm")
115
- expect(@plugin[:virtualization][:role]).to eq("guest")
116
- expect(@plugin[:virtualization][:systems][:kvm]).to eq("guest")
114
+ allow(plugin).to receive(:shell_out).with("sysctl -n hw.model").and_return(mock_shell_out(0, kvm_string, ""))
115
+ plugin.run
116
+ expect(plugin[:virtualization][:system]).to eq("kvm")
117
+ expect(plugin[:virtualization][:role]).to eq("guest")
118
+ expect(plugin[:virtualization][:systems][:kvm]).to eq("guest")
117
119
  end
118
120
  end
119
121
  end
120
122
 
121
- context "when on a xen guest" do
122
- it "detects we are a guest" do
123
- allow(@plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "xen", ""))
124
- @plugin.run
125
- expect(@plugin[:virtualization][:system]).to eq("xen")
126
- expect(@plugin[:virtualization][:role]).to eq("guest")
127
- expect(@plugin[:virtualization][:systems][:xen]).to eq("guest")
128
- end
129
- end
130
-
131
- context "when on a vmware guest" do
132
- it "detects we are a guest" do
133
- allow(@plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "vmware", ""))
134
- @plugin.run
135
- expect(@plugin[:virtualization][:system]).to eq("vmware")
136
- expect(@plugin[:virtualization][:role]).to eq("guest")
137
- expect(@plugin[:virtualization][:systems][:vmware]).to eq("guest")
123
+ { xen: "xen", vmware: "vmware", hyperv: "hv", kvm: "kvm", bhyve: "bhyve" }.each_pair do |hypervisor, val|
124
+ context "when on a #{hypervisor} guest" do
125
+ it "detects we are a guest" do
126
+ allow(plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, val, ""))
127
+ plugin.run
128
+ expect(plugin[:virtualization][:system]).to eq(hypervisor.to_s)
129
+ expect(plugin[:virtualization][:role]).to eq("guest")
130
+ expect(plugin[:virtualization][:systems][hypervisor]).to eq("guest")
131
+ end
138
132
  end
139
133
  end
140
134
 
141
- context "when on a hyper-v guest" do
135
+ context "when on an amazonec2 guest" do
142
136
  it "detects we are a guest" do
143
- allow(@plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "hv", ""))
144
- @plugin.run
145
- expect(@plugin[:virtualization][:system]).to eq("hyperv")
146
- expect(@plugin[:virtualization][:role]).to eq("guest")
147
- expect(@plugin[:virtualization][:systems][:hyperv]).to eq("guest")
137
+ allow(plugin).to receive(:shell_out).with("sysctl -n kern.vm_guest").and_return(mock_shell_out(0, "kvm", ""))
138
+ allow(plugin).to receive(:shell_out).with("sysctl -n kern.hostuuid").and_return(mock_shell_out(0, "ec2fb75c-7a36-7938-4efa-8e40b4ac634b", ""))
139
+ plugin.run
140
+ expect(plugin[:virtualization][:system]).to eq("amazonec2")
141
+ expect(plugin[:virtualization][:role]).to eq("guest")
142
+ expect(plugin[:virtualization][:systems][:amazonec2]).to eq("guest")
148
143
  end
149
144
  end
150
145
  end
@@ -296,6 +296,8 @@ OS_RELEASE
296
296
 
297
297
  describe "on arista eos" do
298
298
 
299
+ let(:have_system_release) { true }
300
+ let(:have_redhat_release) { true }
299
301
  let(:have_eos_release) { true }
300
302
 
301
303
  before(:each) do
@@ -303,11 +305,11 @@ OS_RELEASE
303
305
  end
304
306
 
305
307
  it "should set platform to arista_eos" do
306
- expect(File).to receive(:read).with("/etc/Eos-release").and_return("Arista Networks EOS 4.16.7M")
308
+ expect(File).to receive(:read).with("/etc/Eos-release").and_return("Arista Networks EOS 4.21.1.1F")
307
309
  @plugin.run
308
310
  expect(@plugin[:platform]).to eq("arista_eos")
309
311
  expect(@plugin[:platform_family]).to eq("fedora")
310
- expect(@plugin[:platform_version]).to eq("4.16.7M")
312
+ expect(@plugin[:platform_version]).to eq("4.21.1.1F")
311
313
  end
312
314
  end
313
315
 
@@ -701,8 +703,39 @@ CISCO_RELEASE
701
703
  end
702
704
 
703
705
  describe "on suse" do
706
+ context "on openSUSE 15+" do
707
+
708
+ let(:have_suse_release) { false }
709
+ let(:have_os_release) { true }
710
+
711
+ let(:os_release_content) do
712
+ <<~OS_RELEASE
713
+ NAME="openSUSE Leap"
714
+ VERSION="15.0"
715
+ ID="opensuse-leap"
716
+ ID_LIKE="suse opensuse"
717
+ VERSION_ID="15.0"
718
+ PRETTY_NAME="openSUSE Leap 15.0"
719
+ ANSI_COLOR="0;32"
720
+ CPE_NAME="cpe:/o:opensuse:leap:15.0"
721
+ OS_RELEASE
722
+ end
723
+
724
+ before do
725
+ expect(File).to_not receive(:read).with("/etc/SuSE-release")
726
+ expect(File).to receive(:read).with("/etc/os-release").and_return(os_release_content)
727
+ end
704
728
 
705
- context "on versions that have /etc/os-release and no /etc/SuSE-release (e.g. SLES15)" do
729
+ it "correctly detects opensuseleap 15" do
730
+ @plugin.run
731
+ expect(@plugin[:platform]).to eq("opensuseleap")
732
+ expect(@plugin[:platform_version]).to eq("15.0")
733
+ expect(@plugin[:platform_family]).to eq("suse")
734
+ end
735
+
736
+ end
737
+
738
+ context "on SLES 15+" do
706
739
 
707
740
  let(:have_suse_release) { false }
708
741
  let(:have_os_release) { true }
@@ -732,7 +765,6 @@ OS_RELEASE
732
765
  expect(@plugin[:platform_version]).to eq("15")
733
766
  expect(@plugin[:platform_family]).to eq("suse")
734
767
  end
735
-
736
768
  end
737
769
 
738
770
  context "on versions that have both /etc/os-release and /etc/SuSE-release (e.g. SLES12)" do