diff options
author | Tim Smith <tsmith@chef.io> | 2018-11-28 20:57:23 -0800 |
---|---|---|
committer | Tim Smith <tsmith@chef.io> | 2018-12-05 09:54:54 -0800 |
commit | acd1d778fafa51f946e9c7bfef75ae3e896972f4 (patch) | |
tree | 7216be599b1e9aac9eeae3674f3ddbe4aa90ef7b | |
parent | 67f9f6298083ee29d649dc6d3b7b19ab9f834ec8 (diff) | |
download | ohai-acd1d778fafa51f946e9c7bfef75ae3e896972f4.tar.gz |
Unify virtualization detection on a single helper
We've always detected virtualzation on *nix using dmidecode data. A few
years ago I unified this with the dmi_decode helper. It parsed out the
text of the dmidecode command. This greatly improved detection on BSD
and Solaris, but there was more that could be done. With this change
we're now passing in the manufacturer, product, and version data from
the dmi data. On the *nix side we'll use the dmi plugins data which has
already been split out nicely and doesn't need to be fetched or parsed
again. On the windows side we can actually get this data via WMI pretty
easily. The field names are different, but under the hood it's just DMI
data. This way if we accept a PR from a windows, solaris, bsd, or linux
user we get improves on all the other platforms.
Note: This also removes PCI based Parallels detection on Linux since we're doing it in a more efficient way with DMI data now on Linux.
Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r-- | lib/ohai/mixin/dmi_decode.rb | 53 | ||||
-rw-r--r-- | lib/ohai/plugins/bsd/virtualization.rb | 22 | ||||
-rw-r--r-- | lib/ohai/plugins/linux/virtualization.rb | 30 | ||||
-rw-r--r-- | lib/ohai/plugins/solaris2/virtualization.rb | 23 | ||||
-rw-r--r-- | lib/ohai/plugins/windows/virtualization.rb | 44 | ||||
-rw-r--r-- | spec/unit/mixin/dmi_decode.rb | 68 | ||||
-rw-r--r-- | spec/unit/plugins/windows/virtualization_spec.rb | 254 |
7 files changed, 154 insertions, 340 deletions
diff --git a/lib/ohai/mixin/dmi_decode.rb b/lib/ohai/mixin/dmi_decode.rb index 018b8813..4ef4ef6c 100644 --- a/lib/ohai/mixin/dmi_decode.rb +++ b/lib/ohai/mixin/dmi_decode.rb @@ -1,6 +1,6 @@ # # Author:: Tim Smith <tsmith@chef.io> -# Copyright:: Copyright (c) 2015-2016 Chef Software, Inc. +# Copyright:: Copyright (c) 2015-2018 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,29 +17,34 @@ # http://www.dmo.ca/blog/detecting-virtualization-on-linux module ::Ohai::Mixin::DmiDecode - def guest_from_dmi(dmi_data) - dmi_data.each_line do |line| - case line - when /Manufacturer: Microsoft/ - return "hyperv" if dmi_data =~ /Version: (7.0|Hyper-V)/ - when /Manufacturer: VMware/ - return "vmware" - when /Manufacturer: Xen/ - return "xen" - when /Product.*: VirtualBox/ - return "vbox" - when /Product.*: OpenStack/ - return "openstack" - when /Manufacturer: QEMU|Product Name: (KVM|RHEV)/ - return "kvm" - when /Product.*: BHYVE/ - return "bhyve" - when /Manufacturer: Veertu/ - return "veertu" - when /Manufacturer: Amazon EC2/ - return "amazonec2" - end + def guest_from_dmi_data(manufacturer, product, version) + case manufacturer + when /Xen/ + return "xen" + when /VMware/ + return "vmware" + when /Microsoft/ + return "hyperv" if product =~ /Virtual Machine/ + when /Amazon EC2/ + return "amazonec2" + when /QEMU/ + return "kvm" + when /Veertu/ + return "veertu" + when /Parallels/ + return "parallels" end - nil + + case product + when /VirtualBox/ + return "vbox" + when /OpenStack/ + return "openstack" + when /(KVM|RHEV)/ + return "kvm" + when /BHYVE/ + return "bhyve" + end + nil # doesn't look like a virt end end diff --git a/lib/ohai/plugins/bsd/virtualization.rb b/lib/ohai/plugins/bsd/virtualization.rb index f6913340..9635070f 100644 --- a/lib/ohai/plugins/bsd/virtualization.rb +++ b/lib/ohai/plugins/bsd/virtualization.rb @@ -17,11 +17,11 @@ # limitations under the License. # -require "ohai/mixin/dmi_decode" - Ohai.plugin(:Virtualization) do - include Ohai::Mixin::DmiDecode provides "virtualization" + depends "dmi" + require "ohai/mixin/dmi_decode" + include Ohai::Mixin::DmiDecode collect_data(:freebsd, :openbsd, :netbsd, :dragonflybsd) do @@ -108,15 +108,13 @@ Ohai.plugin(:Virtualization) do logger.trace("Plugin Virtualization: Guest running on #{hypervisor} detected") end - # parse dmidecode to discover various virtualization guests - if File.exist?("/usr/local/sbin/dmidecode") || File.exist?("/usr/pkg/sbin/dmidecode") - guest = guest_from_dmi(shell_out("dmidecode").stdout) - if guest - virtualization[:system] = guest - virtualization[:role] = "guest" - virtualization[:systems][guest.to_sym] = "guest" - logger.trace("Plugin Virtualization: Guest running on #{guest} detected") - end + # parse dmi to discover various virtualization guests + guest = guest_from_dmi_data(get_attribute(:dmi, :system, :manufacturer), get_attribute(:dmi, :system, :product), get_attribute(:dmi, :system, :version)) + if guest + logger.trace("Plugin Virtualization: DMI data indicates #{guest} guest") + virtualization[:system] = guest + virtualization[:role] = "guest" + virtualization[:systems][guest.to_sym] = "guest" end end end diff --git a/lib/ohai/plugins/linux/virtualization.rb b/lib/ohai/plugins/linux/virtualization.rb index a605bd9c..fdc4b197 100644 --- a/lib/ohai/plugins/linux/virtualization.rb +++ b/lib/ohai/plugins/linux/virtualization.rb @@ -17,9 +17,10 @@ # Ohai.plugin(:Virtualization) do + provides "virtualization" + depends "dmi" require "ohai/mixin/dmi_decode" include Ohai::Mixin::DmiDecode - provides "virtualization" def lxc_version_exists? which("lxc-version") || which("lxc-start") @@ -129,25 +130,14 @@ Ohai.plugin(:Virtualization) do virtualization[:systems][:openvz] = "guest" end - # Detect Parallels virtual machine from pci devices - if File.exist?("/proc/bus/pci/devices") - if File.read("/proc/bus/pci/devices") =~ /1ab84000/ - logger.trace("Plugin Virtualization: /proc/bus/pci/devices contains '1ab84000' pci device. Detecting as parallels guest") - virtualization[:system] = "parallels" - virtualization[:role] = "guest" - virtualization[:systems][:parallels] = "guest" - end - end - - # parse dmidecode to discover various virtualization guests - if File.exist?("/usr/sbin/dmidecode") - guest = guest_from_dmi(shell_out("dmidecode").stdout) - if guest - logger.trace("Plugin Virtualization: dmidecode contains string indicating #{guest} guest") - virtualization[:system] = guest - virtualization[:role] = "guest" - virtualization[:systems][guest.to_sym] = "guest" - end + # parse dmi to discover various virtualization guests + logger.trace("Looking up #{get_attribute(:dmi, :system, :manufacturer)}, #{get_attribute(:dmi, :system, :product)} #{get_attribute(:dmi, :system, :version)}") + guest = guest_from_dmi_data(get_attribute(:dmi, :system, :manufacturer), get_attribute(:dmi, :system, :product), get_attribute(:dmi, :system, :version)) + if guest + logger.trace("Plugin Virtualization: DMI data indicates #{guest} guest") + virtualization[:system] = guest + virtualization[:role] = "guest" + virtualization[:systems][guest.to_sym] = "guest" end # Detect Hyper-V guest and the hostname of the host diff --git a/lib/ohai/plugins/solaris2/virtualization.rb b/lib/ohai/plugins/solaris2/virtualization.rb index 3c15a1ef..e0a73bcf 100644 --- a/lib/ohai/plugins/solaris2/virtualization.rb +++ b/lib/ohai/plugins/solaris2/virtualization.rb @@ -19,9 +19,8 @@ # Ohai.plugin(:Virtualization) do - require "ohai/mixin/dmi_decode" - include Ohai::Mixin::DmiDecode provides "virtualization" + depends "dmi" def collect_solaris_guestid command = "/usr/sbin/zoneadm list -p" @@ -30,6 +29,9 @@ Ohai.plugin(:Virtualization) do end collect_data(:solaris2) do + require "ohai/mixin/dmi_decode" + include Ohai::Mixin::DmiDecode + virtualization Mash.new virtualization[:systems] = Mash.new @@ -44,16 +46,13 @@ Ohai.plugin(:Virtualization) do end end - # Pass smbios information to the dmi_decode mixin to - # identify possible virtualization systems - smbios_path = Ohai.abs_path("/usr/sbin/smbios") - if File.exist?(smbios_path) - guest = guest_from_dmi(shell_out(smbios_path).stdout) - if guest - virtualization[:system] = guest - virtualization[:role] = "guest" - virtualization[:systems][guest.to_sym] = "guest" - end + # parse dmi to discover various virtualization guests + guest = guest_from_dmi_data(get_attribute(:dmi, :system, :manufacturer), get_attribute(:dmi, :system, :product), get_attribute(:dmi, :system, :version)) + if guest + logger.trace("Plugin Virtualization: DMI data indicates #{guest} guest") + virtualization[:system] = guest + virtualization[:role] = "guest" + virtualization[:systems][guest.to_sym] = "guest" end if File.executable?("/usr/sbin/zoneadm") diff --git a/lib/ohai/plugins/windows/virtualization.rb b/lib/ohai/plugins/windows/virtualization.rb index 16d750ea..b60aff8b 100644 --- a/lib/ohai/plugins/windows/virtualization.rb +++ b/lib/ohai/plugins/windows/virtualization.rb @@ -20,6 +20,8 @@ Ohai.plugin(:Virtualization) do provides "virtualization" + require "ohai/mixin/dmi_decode" + include Ohai::Mixin::DmiDecode collect_data(:windows) do require "wmi-lite/wmi" @@ -27,44 +29,16 @@ Ohai.plugin(:Virtualization) do virtualization Mash.new unless virtualization virtualization[:systems] = Mash.new unless virtualization[:systems] - # Grab BIOS data from WMI to determine vendor information + # Grab system DMI data from WMI to determine vendor information wmi = WmiLite::Wmi.new - bios = wmi.instances_of("Win32_BIOS") + dmi = wmi.first_of("Win32_ComputerSystemProduct") - case bios[0]["manufacturer"] - when "innotek GmbH" - virtualization[:system] = "vbox" + guest = guest_from_dmi_data(dmi["vendor"], dmi["name"], dmi["version"]) + if guest + logger.trace("Plugin Virtualization: DMI data in Win32_ComputerSystemProduct indicates #{guest} guest") + virtualization[:system] = guest virtualization[:role] = "guest" - virtualization[:systems][:vbox] = "guest" - when "Parallels Software International Inc." - virtualization[:system] = "parallels" - virtualization[:role] = "guest" - virtualization[:systems][:parallels] = "guest" - when "Bochs" - virtualization[:system] = "kvm" - virtualization[:role] = "guest" - virtualization[:systems][:kvm] = "guest" - when "American Megatrends Inc." - if bios[0]["version"] =~ /VRTUAL -/ - virtualization[:system] = "hyper-v" - virtualization[:role] = "guest" - virtualization[:systems][:hyperv] = "guest" - end - when "Xen" - virtualization[:system] = "xen" - virtualization[:role] = "guest" - virtualization[:systems][:xen] = "guest" - when "Veertu" - virtualization[:system] = "veertu" - virtualization[:role] = "guest" - virtualization[:systems][:veertu] = "guest" - end - - # vmware fusion detection - if bios[0]["serialnumber"] =~ /VMware/ - virtualization[:system] = "vmware" - virtualization[:role] = "guest" - virtualization[:systems][:vmware] = "guest" + virtualization[:systems][guest.to_sym] = "guest" end end end diff --git a/spec/unit/mixin/dmi_decode.rb b/spec/unit/mixin/dmi_decode.rb new file mode 100644 index 00000000..3cc881ed --- /dev/null +++ b/spec/unit/mixin/dmi_decode.rb @@ -0,0 +1,68 @@ +# +# Author:: Tim Smith (tsmith@chef.io) +# Copyright:: Copyright (c) 2018 Chef Software, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require_relative "../../spec_helper.rb" +require "ohai/mixin/dmi_decode" + +describe Ohai::Mixin::DmiDecode, "guest_from_dmi_data" do + let(:mixin) { Object.new.extend(Ohai::Mixin::DmiDecode) } + + # for the full DMI data used in these tests see https://github.com/chef/dmidecode_collection + { + xen: ["Xen", "HVM domU", "4.2.amazon"], + vmware: ["VMware, Inc.", "VMware Virtual Platform", "None"], + hyperv: ["Microsoft", "Virtual Machine", "7.0"], + amazonec2: ["Amazon EC2", "c5n.large", "Not Specified"], + veertu: ["Veertu", "Veertu", "Not Specified"], + parallels: ["Parallels Software International Inc.", "Parallels Virtual Platform", "None"], + vbox: ["Oracle Corporation", "VirtualBox", "1.2"], + openstack: ["Red Hat Inc.", "OpenStack Nova", "2014.1.2-1.el6"], + kvm: ["Red Hat", "KVM", "RHEL 7.0.0 PC (i440FX + PIIX, 1996"], + bhyve: ["", "BHYVE", "1.0"], + }.each_pair do |hypervisor, values| + describe "when passed #{hypervisor} dmi data" do + it "returns '#{hypervisor}'" do + expect(mixin.guest_from_dmi_data(values[0], values[1], values[2])).to eq("#{hypervisor}") + end + end + end + + describe "When running on RHEV Hypervisor" do + it "returns 'kvm'" do + expect(mixin.guest_from_dmi_data("Red Hat", "RHEV Hypervisor", "6.7-20150911.0.el6ev")).to eq("kvm") + end + end + + describe "When the manufactuer is 'QEMU'" do + it "return kvm" do + expect(mixin.guest_from_dmi_data("QEMU", "", "")).to eq("kvm") + end + end + + describe "returns nil if manufactuer is 'Microsoft', but product is not 'Virtual Machine'" do + it "returns nil" do + expect(mixin.guest_from_dmi_data("Microsot", "Zune", "2018")).to be_nil + end + end + + describe "When running on an unkown system" do + it "returns nil" do + expect(mixin.guest_from_dmi_data("TimCorp", "SuperServer", "2018")).to be_nil + end + end +end diff --git a/spec/unit/plugins/windows/virtualization_spec.rb b/spec/unit/plugins/windows/virtualization_spec.rb index 49d4446e..bde7523b 100644 --- a/spec/unit/plugins/windows/virtualization_spec.rb +++ b/spec/unit/plugins/windows/virtualization_spec.rb @@ -27,196 +27,16 @@ describe Ohai::System, "Windows virtualization platform" do allow(plugin).to receive(:collect_os).and_return(:windows) end - context "when running on vmware" do + describe "it sets virtualization guest status from Win32_ComputerSystemProduct data" do it "system is vmware" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "bioscharacteristics" => [4, 7, 8, 9, 10, 11, 12, 14, 15, 16, 19, 26, 27, 28, 29, 30, 32, 39, 40, 41, 42, 50, 57, 58], - "biosversion" => ["INTEL - 6040000", "PhoenixBIOS 4.0 Release 6.0 "], - "buildnumber" => nil, - "caption" => "PhoenixBIOS 4.0 Release 6.0 ", - "codeset" => nil, "currentlanguage" => nil, - "description" => "PhoenixBIOS 4.0 Release 6.0 ", - "identificationcode" => nil, - "installablelanguages" => nil, - "installdate" => nil, - "languageedition" => nil, - "listoflanguages" => nil, - "manufacturer" => "Phoenix Technologies LTD", - "name" => "PhoenixBIOS 4.0 Release 6.0 ", - "othertargetos" => nil, - "primarybios" => true, - "releasedate" => "20130731000000.000000+000", - "serialnumber" => "VMware-56 4d 65 24 ac cf ec 72-fa 29 b2 7d 8f df b2 7a", - "smbiosbiosversion" => "6.00", - "smbiosmajorversion" => 2, - "smbiosminorversion" => 4, - "smbiospresent" => true, - "softwareelementid" => "PhoenixBIOS 4.0 Release 6.0 ", - "softwareelementstate" => 3, - "status" => "OK", - "targetoperatingsystem" => 0, - "version" => "INTEL - 6040000" - }]) - plugin.run - expect(plugin[:virtualization][:system]).to eq("vmware") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:vmware]).to eq("guest") - end - end - - context "when running on parallels desktop" do - it "system is parallels" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "bioscharacteristics" => [4, 7, 9, 10, 15, 24, 25, 27, 28, 29, 30, 32, 42, 44, 48, 49, 51, 64, 65, 67], - "biosversion" => ["PRLS - 1"], - "buildnumber" => nil, - "caption" => "Default System BIOS", - "codeset" => nil, - "currentlanguage" => nil, - "description" => "Default System BIOS", - "identificationcode" => nil, - "installablelanguages" => nil, - "installdate" => nil, - "languageedition" => nil, - "listoflanguages" => nil, - "manufacturer" => "Parallels Software International Inc.", - "name" => "Default System BIOS", - "othertargetos" => nil, - "primarybios" => true, - "releasedate" => "20151005000000.000000+000", - "serialnumber" => "Parallels-82 75 A0 A0 9B B4 47 7C 87 A9 D9 E1 2B 90 4B 1F", - "smbiosbiosversion" => "11.0.2 (31348)", - "smbiosmajorversion" => 2, - "smbiosminorversion" => 7, - "smbiospresent" => true, - "softwareelementid" => "Default System BIOS", - "softwareelementstate" => 3, - "status" => "OK", - "targetoperatingsystem" => 0, - "version" => "PRLS - 1", - }]) - plugin.run - expect(plugin[:virtualization][:system]).to eq("parallels") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:parallels]).to eq("guest") - end - end - - context "when running on kvm" do - it "system is kvm" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "bioscharacteristics" => [3, 42, 48, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79], - "biosversion" => ["BOCHS - 1"], - "buildnumber" => nil, - "caption" => "Default System BIOS", - "codeset" => nil, - "currentlanguage" => nil, - "description" => "Default System BIOS", - "identificationcode" => nil, - "installablelanguages" => nil, - "installdate" => nil, - "languageedition" => nil, - "listoflanguages" => nil, - "manufacturer" => "Bochs", - "name" => "Default System BIOS", - "othertargetos" => nil, - "primarybios" => true, - "releasedate" => "20110101******.******+***", - "serialnumber" => nil, - "smbiosbiosversion" => "Bochs", - "smbiosmajorversion" => 2, - "smbiosminorversion" => 4, - "smbiospresent" => true, - "softwareelementid" => "Default System BIOS", - "softwareelementstate" => 3, - "status" => "OK", - "targetoperatingsystem" => 0, "version" => "BOCHS -1" - }]) - plugin.run - expect(plugin[:virtualization][:system]).to eq("kvm") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:kvm]).to eq("guest") - end - end - - context "when running on virtualbox" do - it "system is vbox" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "bioscharacteristics" => [4, 7, 15, 16, 27, 30, 32], - "biosversion" => ["VBOX - 1"], - "buildnumber" => nil, - "caption" => "Default System BIOS", - "codeset" => nil, - "currentlanguage" => nil, - "description" => "Default System BIOS", - "identificationcode" => nil, - "installablelanguages" => nil, - "installdate" => nil, - "languageedition" => nil, - "listoflanguages" => nil, - "manufacturer" => "innotek GmbH", - "name" => "Default System BIOS", - "othertargetos" => nil, - "primarybios" => true, - "releasedate" => "20061201000000.000000+000", - "serialnumber" => "0", - "smbiosbiosversion" => "VirtualBox", - "smbiosmajorversion" => 2, - "smbiosminorversion" => 5, - "smbiospresent" => true, - "softwareelementid" => "Default System BIOS", - "softwareelementstate" => 3, - "status" => "OK", - "targetoperatingsystem" => 0, - "version" => "VBOX - 1", - }]) - plugin.run - expect(plugin[:virtualization][:system]).to eq("vbox") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:vbox]).to eq("guest") - end - end - - context "when running on hyper-v" do - it "system is hyper-v" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "bioscharacteristics" => [4, 7, 9, 11, 12, 14, 15, 16, 17, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 34, 36, 37, 40], - "biosversion" => ["VRTUAL - 4001628, BIOS Date: 04/28/16 13:00:17 Ver: 09.00.06, BIOS Date: 04/28/16 13:00:17 Ver: 09.00.06"], - "buildnumber" => nil, - "codeset" => nil, - "currentlanguage" => "enUS", - "description" => "BIOS Date: 04/28/16 13:00:17 Ver: 09.00.06", - "identificationcode" => nil, - "installablelanguages" => 1, - "installdate" => nil, - "languageedition" => nil, - "listoflanguages" => ["enUS"], - "manufacturer" => "American Megatrends Inc.", - "name" => "BIOS Date: 04/28/16 13:00:17 Ver: 09.00.06", - "othertargetos" => nil, - "primarybios" => true, - "releasedate" => "20160428000000.000000+000", - "serialnumber" => "1158-1757-7941-3855-2170-4122-00", - "smbiosbiosversion" => "090006", - "smbiosmajorversion" => 2, - "smbiosminorversion" => 3, - "smbiospresent" => true, - "softwareelementid" => "BIOS Date: 04/28/16 13:00:17 Ver: 09.00.06", - "softwareelementstate" => 3, - "status" => "OK", - "targetoperatingsystem" => 0, - "version" => "VRTUAL - 4001628", - }]) - plugin.run - expect(plugin[:virtualization][:system]).to eq("hyper-v") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:hyperv]).to eq("guest") - end - end - - context "when running on xen" do - it "system is xen" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "smbiosbiosversion" => ["4.2.amazon"], - "manufacturer" => "Xen", - "name" => "Revision: 1.221", - "serialnumber" => "ec2b487f-d9ed-7d17-c7c0-1d4599d6c1da", - "version" => "Xen - 0", - }]) + allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_ComputerSystemProduct").and_return( { "caption" => "Computer System Product", + "description" => "Computer System Product", + "identifyingnumber" => "ec2d6aad-f59b-a10d-5784-ca9b7ba4f727", + "name" => "HVM domU", + "skunumber" => nil, + "uuid" => "EC2D6AAD-F59B-A10D-5784-CA9B7BA4F727", + "vendor" => "Xen", + "version" => "4.2.amazon" } ) plugin.run expect(plugin[:virtualization][:system]).to eq("xen") expect(plugin[:virtualization][:role]).to eq("guest") @@ -224,56 +44,16 @@ describe Ohai::System, "Windows virtualization platform" do end end - context "when running on veertu" do - it "system is veertu" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "smbiosbiosversion" => ["Veertu"], - "manufacturer" => "Veertu", - "name" => "Default System BIOS", - "serialnumber" => "", - "version" => "Veertu - 1", - - }]) - plugin.run - expect(plugin[:virtualization][:system]).to eq("veertu") - expect(plugin[:virtualization][:role]).to eq("guest") - expect(plugin[:virtualization][:systems][:veertu]).to eq("guest") - end - end - context "when running on a hardware system" do it "does not set virtualization attributes" do - allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_BIOS").and_return([{ "bioscharacteristics" => [7, 11, 12, 15, 16, 17, 19, 23, 24, 25, 26, 27, 28, 29, 32, 33, 40, 42, 43], - "biosversion" => ["DELL - 1072009", "A10", "American Megatrends - 4028D"], - "buildnumber" => nil, - "caption" => "A10", - "codeset" => nil, - "currentlanguage" => nil, - "description" => "A10", - "embeddedcontrollermajorversion" => 255, - "embeddedcontrollerminorversion" => 255, - "identificationcode" => nil, - "installablelanguages" => nil, - "installdate" => nil, - "languageedition" => nil, - "listoflanguages" => nil, - "manufacturer" => "Dell Inc.", - "name" => "A10", - "othertargetos" => nil, - "primarybios" => true, - "releasedate" => "20130513000000.000000+000", - "serialnumber" => "87GBNY1", - "smbiosbiosversion" => "A10", - "smbiosmajorversion" => 2, - "smbiosminorversion" => 7, - "smbiospresent" => true, - "softwareelementid" => "A10", - "softwareelementstate" => 3, - "status" => "OK", - "systembiosmajorversion" => 4, - "systembiosminorversion" => 6, - "targetoperatingsystem" => 0, - "version" => "DELL - 1072009", - }]) + allow_any_instance_of(WmiLite::Wmi).to receive(:instances_of).with("Win32_ComputerSystemProduct").and_return({ "caption" => "Computer System Product", + "description" => "Computer System Product", + "identifyingnumber" => "0123456789", + "name" => "X10SLH-N6-ST031", + "skunumber" => nil, + "uuid" => "00000000-0000-0000-0000-0CC47A8F7618", + "vendor" => "Supermicro", + "version" => "0123456789" }) plugin.run expect(plugin[:virtualization]).to eq("systems" => {}) end |