summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ohai/mixin/dmi_decode.rb53
-rw-r--r--lib/ohai/plugins/bsd/virtualization.rb22
-rw-r--r--lib/ohai/plugins/linux/virtualization.rb30
-rw-r--r--lib/ohai/plugins/solaris2/virtualization.rb18
-rw-r--r--lib/ohai/plugins/windows/virtualization.rb44
5 files changed, 66 insertions, 101 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..d0187e87 100644
--- a/lib/ohai/plugins/solaris2/virtualization.rb
+++ b/lib/ohai/plugins/solaris2/virtualization.rb
@@ -22,6 +22,7 @@ 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"
@@ -44,16 +45,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