diff options
author | Tim Smith <tsmith84@gmail.com> | 2019-09-04 15:37:40 -0700 |
---|---|---|
committer | Tim Smith <tsmith84@gmail.com> | 2019-09-04 16:10:16 -0700 |
commit | 20032b91d18b8534e99c4181f4bda8e4d8c84a37 (patch) | |
tree | eaef21ab0693b73ca00ce3819c1ee85e696da573 | |
parent | 9d887f9ea41411ab5e1f5b428d8b124b2a0b54a2 (diff) | |
download | ohai-20032b91d18b8534e99c4181f4bda8e4d8c84a37.tar.gz |
Fix detection of the Openstack virtualization hypervisor
We would fail to detect non-Redhat openstack which has a system but not
product.
Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r-- | lib/ohai/mixin/dmi_decode.rb | 5 | ||||
-rw-r--r-- | lib/ohai/plugins/linux/virtualization.rb | 21 | ||||
-rw-r--r-- | spec/unit/mixin/dmi_decode.rb | 9 |
3 files changed, 23 insertions, 12 deletions
diff --git a/lib/ohai/mixin/dmi_decode.rb b/lib/ohai/mixin/dmi_decode.rb index 4ef4ef6c..0d629477 100644 --- a/lib/ohai/mixin/dmi_decode.rb +++ b/lib/ohai/mixin/dmi_decode.rb @@ -19,6 +19,8 @@ module ::Ohai::Mixin::DmiDecode def guest_from_dmi_data(manufacturer, product, version) case manufacturer + when /OpenStack/ + return "openstack" when /Xen/ return "xen" when /VMware/ @@ -38,13 +40,14 @@ module ::Ohai::Mixin::DmiDecode case product when /VirtualBox/ return "vbox" - when /OpenStack/ + when /OpenStack/ # yes this is here twice. Product catches Redhat's version 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/linux/virtualization.rb b/lib/ohai/plugins/linux/virtualization.rb index 1f6b0064..dd512ebb 100644 --- a/lib/ohai/plugins/linux/virtualization.rb +++ b/lib/ohai/plugins/linux/virtualization.rb @@ -116,6 +116,17 @@ Ohai.plugin(:Virtualization) do end end + # parse dmi to discover various virtualization guests + # we do this *after* the kvm detection so that OpenStack isn't detected as KVM + logger.trace("Looking up DMI data manufacturer: '#{get_attribute(:dmi, :system, :manufacturer)}' product: '#{get_attribute(:dmi, :system, :product)}' version: '#{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 OpenVZ / Virtuozzo. # http://wiki.openvz.org/BC_proc_entries if File.exist?("/proc/bc/0") @@ -130,16 +141,6 @@ Ohai.plugin(:Virtualization) do virtualization[:systems][:openvz] = "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 if File.exist?("/var/lib/hyperv/.kvp_pool_3") logger.trace("Plugin Virtualization: /var/lib/hyperv/.kvp_pool_3 contains string indicating Hyper-V guest") diff --git a/spec/unit/mixin/dmi_decode.rb b/spec/unit/mixin/dmi_decode.rb index dcd3698e..cde87a1a 100644 --- a/spec/unit/mixin/dmi_decode.rb +++ b/spec/unit/mixin/dmi_decode.rb @@ -23,6 +23,7 @@ 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 + # the fields here are manufacturer, product, and version as passed to #guest_from_dmi_data { xen: ["Xen", "HVM domU", "4.2.amazon"], vmware: ["VMware, Inc.", "VMware Virtual Platform", "None"], @@ -31,7 +32,7 @@ describe Ohai::Mixin::DmiDecode, "guest_from_dmi_data" do 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"], + openstack: ["OpenStack Foundation", "", "15.1.5"], kvm: ["Red Hat", "KVM", "RHEL 7.0.0 PC (i440FX + PIIX, 1996"], bhyve: ["", "BHYVE", "1.0"], }.each_pair do |hypervisor, values| @@ -42,6 +43,12 @@ describe Ohai::Mixin::DmiDecode, "guest_from_dmi_data" do end end + describe "when passed Redhat's Openstack varient dmi data" do + it "returns 'openstack'" do + expect(mixin.guest_from_dmi_data("Red Hat Inc.", "OpenStack Nova", "2014.1.2-1.el6")).to eq("openstack") + 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") |