summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith84@gmail.com>2019-09-04 15:37:40 -0700
committerTim Smith <tsmith84@gmail.com>2019-09-04 16:10:16 -0700
commit20032b91d18b8534e99c4181f4bda8e4d8c84a37 (patch)
treeeaef21ab0693b73ca00ce3819c1ee85e696da573
parent9d887f9ea41411ab5e1f5b428d8b124b2a0b54a2 (diff)
downloadohai-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.rb5
-rw-r--r--lib/ohai/plugins/linux/virtualization.rb21
-rw-r--r--spec/unit/mixin/dmi_decode.rb9
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")