summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith84@gmail.com>2015-11-27 20:34:50 -0800
committerTim Smith <tsmith84@gmail.com>2015-11-27 20:34:50 -0800
commit38e107fe7938a01768420cfbf0207821a36d2be6 (patch)
treeff8c7fbdb17f500d0988fabb4269938459a9b144
parentdbc5c406df19f0d2bbcca364d1f3d36957d04c81 (diff)
downloadohai-38e107fe7938a01768420cfbf0207821a36d2be6.tar.gz
Expand detection of VirtualPC / Hyper-V guests
This should solve https://github.com/chef/ohai/issues/647
-rw-r--r--lib/ohai/mixin/dmi_decode.rb6
-rw-r--r--spec/unit/plugins/linux/virtualization_spec.rb34
2 files changed, 38 insertions, 2 deletions
diff --git a/lib/ohai/mixin/dmi_decode.rb b/lib/ohai/mixin/dmi_decode.rb
index 625b6c90..f367e41d 100644
--- a/lib/ohai/mixin/dmi_decode.rb
+++ b/lib/ohai/mixin/dmi_decode.rb
@@ -22,9 +22,11 @@ module ::Ohai::Mixin::DmiDecode
case line
when /Manufacturer: Microsoft/
if dmi_data =~ /Product Name: Virtual Machine/
- if dmi_data =~ /Version: VS2005R2/
+ if dmi_data =~ /Version: (VS2005R2|6.0)/
return 'virtualpc'
- else
+ elsif dmi_data =~ /Version: (7.0|Hyper-V)/
+ return 'hyperv'
+ elsif dmi_data =~ /Version: 5.0/
return 'virtualserver'
end
end
diff --git a/spec/unit/plugins/linux/virtualization_spec.rb b/spec/unit/plugins/linux/virtualization_spec.rb
index 70046e44..8509230a 100644
--- a/spec/unit/plugins/linux/virtualization_spec.rb
+++ b/spec/unit/plugins/linux/virtualization_spec.rb
@@ -168,6 +168,40 @@ MSVPC
expect(plugin[:virtualization][:systems][:virtualpc]).to eq("guest")
end
+ it "sets hyperv guest if dmidecode detects Hyper-V or version 7.0" do
+ ms_hv_dmidecode=<<-MSHV
+System Information
+ Manufacturer: Microsoft Corporation
+ Product Name: Virtual Machine
+ Version: 7.0
+ Serial Number: 9242-2608-7031-8934-2088-5216-61
+ UUID: C2431A2D-D69C-244F-9DE8-CD5D09E0DA39
+ Wake-up Type: Power Switch
+MSHV
+ allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, ms_hv_dmidecode, ""))
+ plugin.run
+ expect(plugin[:virtualization][:system]).to eq("hyperv")
+ expect(plugin[:virtualization][:role]).to eq("guest")
+ expect(plugin[:virtualization][:systems][:hyperv]).to eq("guest")
+ end
+
+ it "sets virtualserver guest if dmidecode detects version 5.0" do
+ ms_vs_dmidecode=<<-MSVS
+System Information
+ Manufacturer: Microsoft Corporation
+ Product Name: Virtual Machine
+ Version: 5.0
+ Serial Number: 1688-7189-5337-7903-2297-1012-52
+ UUID: D29974A4-BE51-044C-BDC6-EFBC4B87A8E9
+ Wake-up Type: Power Switch
+MSVS
+ allow(plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, ms_vs_dmidecode, ""))
+ plugin.run
+ expect(plugin[:virtualization][:system]).to eq("virtualserver")
+ expect(plugin[:virtualization][:role]).to eq("guest")
+ expect(plugin[:virtualization][:systems][:virtualserver]).to eq("guest")
+ end
+
it "sets vmware guest if dmidecode detects VMware" do
vmware_dmidecode=<<-VMWARE
System Information