Skip to content

Commit

Permalink
Merge pull request #1164 from chef/virtualization_guests_darwin
Browse files Browse the repository at this point in the history
Detect virtualbox and vmware guests on Macs
  • Loading branch information
tas50 authored Mar 16, 2018
2 parents 65b2ee9 + 047d853 commit ef9a408
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
13 changes: 13 additions & 0 deletions lib/ohai/plugins/darwin/virtualization.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

Ohai.plugin(:Virtualization) do
provides "virtualization"
depends "hardware"

def vboxmanage_exists?
which("VBoxManage")
Expand Down Expand Up @@ -57,12 +58,24 @@ def docker_exists?
virtualization[:systems][:vbox] = "host"
end

if hardware[:boot_rom_version].match?(/VirtualBox/i)
virtualization[:system] = "vbox"
virtualization[:role] = "guest"
virtualization[:systems][:vbox] = "guest"
end

if fusion_exists?
virtualization[:system] = "vmware"
virtualization[:role] = "host"
virtualization[:systems][:vmware] = "host"
end

if hardware[:boot_rom_version].match?(/VMW/i)
virtualization[:system] = "vmware"
virtualization[:role] = "guest"
virtualization[:systems][:vmware] = "guest"
end

if prlctl_exists?
virtualization[:system] = "parallels"
virtualization[:role] = "host"
Expand Down
18 changes: 18 additions & 0 deletions spec/unit/plugins/darwin/virtualization_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
allow(plugin).to receive(:vboxmanage_exists?).and_return(false)
allow(plugin).to receive(:fusion_exists?).and_return(false)
allow(plugin).to receive(:docker_exists?).and_return(false)
plugin[:hardware] = Mash.new
plugin[:hardware][:boot_rom_version] = "not_a_vm"
end

describe "when detecting OS X virtualization" do
Expand All @@ -54,6 +56,14 @@
expect(plugin[:virtualization][:systems][:vmware]).to eq("host")
end

it "should set vmware guest if hardware attributes mention vmware" do
plugin[:hardware][:boot_rom_version] = "VMW71.00V.6997262.B64.1710270607"
plugin.run
expect(plugin[:virtualization][:system]).to eq("vmware")
expect(plugin[:virtualization][:role]).to eq("guest")
expect(plugin[:virtualization][:systems][:vmware]).to eq("guest")
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
Expand All @@ -62,6 +72,14 @@
expect(plugin[:virtualization][:systems][:vbox]).to eq("host")
end

it "should set vbox guest if hardware attributes mention virtualbox" do
plugin[:hardware][:boot_rom_version] = "VirtualBox"
plugin.run
expect(plugin[:virtualization][:system]).to eq("vbox")
expect(plugin[:virtualization][:role]).to eq("guest")
expect(plugin[:virtualization][:systems][:vbox]).to eq("guest")
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
Expand Down

0 comments on commit ef9a408

Please sign in to comment.