diff options
author | Tim Smith <tsmith@chef.io> | 2016-07-05 10:51:09 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-05 10:51:09 -0700 |
commit | 5d77844baf352ad387c9ab8a5387ff18a1523f07 (patch) | |
tree | b8e8e11c83ce79272885062d2d74bc36f4334a4b | |
parent | b23abf07b9942221753a7a16f0fa316f9763a6d9 (diff) | |
parent | 825462b82300ab70d1069aa6f3b622f24ee47100 (diff) | |
download | ohai-5d77844baf352ad387c9ab8a5387ff18a1523f07.tar.gz |
Merge pull request #840 from chef/osx_virt
Add detection of Virtualbox and VMware Fusion on OS X
-rw-r--r-- | lib/ohai/plugins/darwin/virtualization.rb | 27 | ||||
-rw-r--r-- | spec/unit/plugins/darwin/virtualization_spec.rb | 37 |
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> |