summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2016-07-01 10:51:57 -0700
committerTim Smith <tsmith@chef.io>2016-07-01 10:51:57 -0700
commit825462b82300ab70d1069aa6f3b622f24ee47100 (patch)
treed9908833cf7983255ccb800b64d095c3ad6040c9
parentf9992941f3a39937362d1c98cb4dc63bd9d5b680 (diff)
downloadohai-osx_virt.tar.gz
Add detection of Virtualbox and VMware Fusion on OS Xosx_virt
Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r--lib/ohai/plugins/darwin/virtualization.rb27
-rw-r--r--spec/unit/plugins/darwin/virtualization_spec.rb37
2 files changed, 51 insertions, 13 deletions
diff --git a/lib/ohai/plugins/darwin/virtualization.rb b/lib/ohai/plugins/darwin/virtualization.rb
index 2bad7152..e7b4a91d 100644
--- a/lib/ohai/plugins/darwin/virtualization.rb
+++ b/lib/ohai/plugins/darwin/virtualization.rb
@@ -1,6 +1,8 @@
#
# Author:: Pavel Yudin (<pyudin@parallels.com>)
+# Author:: Tim Smith (<tsmith@chef.io>)
# Copyright:: Copyright (c) 2015 Pavel Yudin
+# Copyright:: Copyright (c) 2016 Chef Software, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -23,6 +25,10 @@ include Ohai::Util::FileHelper
Ohai.plugin(:Virtualization) do
provides "virtualization"
+ def vboxmanage_exists?
+ which("VBoxManage")
+ end
+
def prlctl_exists?
which("prlctl")
end
@@ -31,18 +37,31 @@ Ohai.plugin(:Virtualization) do
which("ioreg")
end
+ def fusion_exists?
+ ::File.exist?("/Applications/VMware\ Fusion.app/")
+ end
+
collect_data(:darwin) do
virtualization Mash.new unless virtualization
virtualization[:systems] = Mash.new unless virtualization[:systems]
+ if vboxmanage_exists?
+ virtualization[:system] = "vbox"
+ virtualization[:role] = "host"
+ virtualization[:systems][:vbox] = "host"
+ end
+
+ if fusion_exists?
+ virtualization[:system] = "vmware"
+ virtualization[:role] = "host"
+ virtualization[:systems][:vmware] = "host"
+ end
+
if prlctl_exists?
virtualization[:system] = "parallels"
virtualization[:role] = "host"
virtualization[:systems][:parallels] = "host"
- end
-
- # Detect Parallels virtual machine from pci devices
- if ioreg_exists?
+ elsif ioreg_exists?
so = shell_out("ioreg -l")
if so.stdout =~ /pci1ab8,4000/
virtualization[:system] = "parallels"
diff --git a/spec/unit/plugins/darwin/virtualization_spec.rb b/spec/unit/plugins/darwin/virtualization_spec.rb
index 5d4e42bd..0529699a 100644
--- a/spec/unit/plugins/darwin/virtualization_spec.rb
+++ b/spec/unit/plugins/darwin/virtualization_spec.rb
@@ -1,6 +1,8 @@
#
# Author:: Pavel Yudin (<pyudin@parallels.com>)
+# Author:: Tim Smith (<tsmith@chef.io>)
# Copyright:: Copyright (c) 2015 Pavel Yudin
+# Copyright:: Copyright (c) 2016 Chef Software, Inc.
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -25,9 +27,32 @@ describe Ohai::System, "Darwin virtualization platform" do
allow(plugin).to receive(:collect_os).and_return(:darwin)
allow(plugin).to receive(:prlctl_exists?).and_return(false)
allow(plugin).to receive(:ioreg_exists?).and_return(false)
+ allow(plugin).to receive(:vboxmanage_exists?).and_return(false)
+ allow(plugin).to receive(:fusion_exists?).and_return(false)
end
- describe "when we are checking for parallels" do
+ describe "when detecting OS X virtualization" do
+ it "should not set virtualization keys if no binaries are found" do
+ plugin.run
+ expect(plugin[:virtualization]).to eq({ "systems" => {} })
+ end
+
+ it "should set vmware host if /Applications/VMware\ Fusion.app exists" do
+ allow(plugin).to receive(:fusion_exists?).and_return(true)
+ plugin.run
+ expect(plugin[:virtualization][:system]).to eq("vmware")
+ expect(plugin[:virtualization][:role]).to eq("host")
+ expect(plugin[:virtualization][:systems][:vmware]).to eq("host")
+ end
+
+ it "should set vbox host if /usr/local/bin/VBoxManage exists" do
+ allow(plugin).to receive(:vboxmanage_exists?).and_return("/usr/local/bin/VBoxManage")
+ plugin.run
+ expect(plugin[:virtualization][:system]).to eq("vbox")
+ expect(plugin[:virtualization][:role]).to eq("host")
+ expect(plugin[:virtualization][:systems][:vbox]).to eq("host")
+ end
+
it "should set parallels host if /usr/bin/prlctl exists" do
allow(plugin).to receive(:prlctl_exists?).and_return("/usr/bin/prlctl")
plugin.run
@@ -36,13 +61,7 @@ describe Ohai::System, "Darwin virtualization platform" do
expect(plugin[:virtualization][:systems][:parallels]).to eq("host")
end
- it "should not set parallels host if /usr/bin/prlctl not exist" do
- allow(plugin).to receive(:prlctl_exists?).and_return(false)
- plugin.run
- expect(plugin[:virtualization]).to eq({ "systems" => {} })
- end
-
- it "should set parallels guest if /usr/sbin/ioreg exists and it's output contains pci1ab8,4000" do
+ it "should set parallels guest if /usr/sbin/ioreg exists and its output contains pci1ab8,4000" do
allow(plugin).to receive(:ioreg_exists?).and_return(true)
ioreg = <<-IOREG
| | +-o pci1ab8,4000@3 <class IOPCIDevice, id 0x1000001d1, registered, matched, active, busy 0 (40 ms), retain 9>
@@ -76,7 +95,7 @@ describe Ohai::System, "Darwin virtualization platform" do
expect(plugin[:virtualization][:systems][:parallels]).to eq("guest")
end
- it "should not set parallels guest if /usr/sbin/ioreg exists and it's output not contain pci1ab8,4000" do
+ it "should not set parallels guest if /usr/sbin/ioreg exists and its output not contain pci1ab8,4000" do
allow(plugin).to receive(:ioreg_exists?).and_return(true)
ioreg = <<-IOREG
| | +-o pci8086,2445@1F,4 <class IOPCIDevice, id 0x1000001d4, registered, matched, active, busy 0 (974 ms), retain 11>