Fixed #3087 - Identify VMWare
Added support for VMWareESX and ESXi to operatingsystem and
operatingsystemrelease facts
Added appropriate tests
James Turnbull
13 years ago
31 | 31 | end |
32 | 32 | elsif FileTest.exists?("/etc/arch-release") |
33 | 33 | "Arch" |
34 | elsif FileTest.exists?("/etc/vmware-release") | |
35 | "VMWareESX" | |
34 | 36 | elsif FileTest.exists?("/etc/redhat-release") |
35 | 37 | txt = File.read("/etc/redhat-release") |
36 | 38 | if txt =~ /centos/i |
62 | 64 | end |
63 | 65 | |
64 | 66 | Facter.add(:operatingsystem) do |
67 | confine :kernel => "VMkernel" | |
68 | setcode do | |
69 | "ESXi" | |
70 | end | |
71 | end | |
72 | ||
73 | Facter.add(:operatingsystem) do | |
65 | 74 | # Default to just returning the kernel as the operating system |
66 | 75 | setcode do Facter[:kernel].value end |
67 | 76 | end |
83 | 83 | end |
84 | 84 | |
85 | 85 | Facter.add(:operatingsystemrelease) do |
86 | confine :operatingsystem => %w{VMwareESX} | |
87 | setcode do | |
88 | release = Facter::Util::Resolution.exec('vmware -v') | |
89 | if release =~ /VMware ESX .*?(\d.*)/ | |
90 | $1 | |
91 | end | |
92 | end | |
93 | end | |
94 | ||
95 | Facter.add(:operatingsystemrelease) do | |
86 | 96 | confine :operatingsystem => %w{Slamd64} |
87 | 97 | setcode do |
88 | 98 | releasefile = Facter::Util::Resolution.exec('cat /etc/slamd64-version') |
95 | 105 | end |
96 | 106 | |
97 | 107 | Facter.add(:operatingsystemrelease) do |
98 | setcode do Facter[:kernelrelease].value end | |
108 | setcode do Facter[:kernelrelease].value end | |
99 | 109 | end |
25 | 25 | Facter.fact(:operatingsystem).value.should == "Solaris" |
26 | 26 | end |
27 | 27 | |
28 | it "should be ESXi for VMkernel" do | |
29 | Facter.fact(:kernel).stubs(:value).returns("VMkernel") | |
30 | ||
31 | Facter.fact(:operatingsystem).value.should == "ESXi" | |
32 | end | |
33 | ||
28 | 34 | it "should identify Oracle VM as OVS" do |
29 | ||
30 | 35 | Facter.fact(:kernel).stubs(:value).returns("Linux") |
31 | 36 | FileTest.stubs(:exists?).returns false |
32 | 37 | |
35 | 40 | |
36 | 41 | Facter.fact(:operatingsystem).value.should == "OVS" |
37 | 42 | end |
43 | ||
44 | it "should identify VMWare ESX" do | |
45 | Facter.fact(:kernel).stubs(:value).returns("Linux") | |
46 | FileTest.stubs(:exists?).returns false | |
47 | ||
48 | FileTest.expects(:exists?).with("/etc/vmware-release").returns true | |
49 | ||
50 | Facter.fact(:operatingsystem).value.should == "VMWareESX" | |
51 | end | |
38 | 52 | end |
14 | 14 | end |
15 | 15 | |
16 | 16 | test_cases = { |
17 | "CentOS" => "/etc/redhat-release", | |
18 | "RedHat" => "/etc/redhat-release", | |
19 | "Fedora" => "/etc/fedora-release", | |
20 | "MeeGo" => "/etc/meego-release", | |
21 | "OEL" => "/etc/enterprise-release", | |
22 | "oel" => "/etc/enterprise-release", | |
23 | "OVS" => "/etc/ovs-release", | |
24 | "ovs" => "/etc/ovs-release" | |
17 | "CentOS" => "/etc/redhat-release", | |
18 | "RedHat" => "/etc/redhat-release", | |
19 | "Fedora" => "/etc/fedora-release", | |
20 | "MeeGo" => "/etc/meego-release", | |
21 | "OEL" => "/etc/enterprise-release", | |
22 | "oel" => "/etc/enterprise-release", | |
23 | "OVS" => "/etc/ovs-release", | |
24 | "ovs" => "/etc/ovs-release", | |
25 | 25 | } |
26 | 26 | |
27 | 27 | test_cases.each do |system, file| |
35 | 35 | end |
36 | 36 | end |
37 | 37 | end |
38 | ||
39 | it "for VMWareESX it should run the vmware -v command" do | |
40 | Facter.fact(:kernel).stubs(:value).returns("VMkernel") | |
41 | Facter.fact(:kernelrelease).stubs(:value).returns("4.1.0") | |
42 | Facter.fact(:operatingsystem).stubs(:value).returns("VMwareESX") | |
43 | ||
44 | Facter::Util::Resolution.stubs(:exec).with('vmware -v').returns('foo') | |
45 | ||
46 | Facter.fact(:operatingsystemrelease).value | |
47 | end | |
38 | 48 | end |