Added support for VMWareESX and ESXi to operatingsystem and operatingsystemrelease facts
Added appropriate tests Signed-off-by: James Turnbull <ja...@lovedthanlost.net> --- Local-branch: tickets/master/3087 lib/facter/operatingsystem.rb | 9 +++++++++ lib/facter/operatingsystemrelease.rb | 10 ++++++++++ spec/unit/operatingsystem_spec.rb | 22 ++++++++++++++++++---- spec/unit/operatingsystemrelease_spec.rb | 26 ++++++++++++++++++-------- 4 files changed, 55 insertions(+), 12 deletions(-) diff --git a/lib/facter/operatingsystem.rb b/lib/facter/operatingsystem.rb index c5a3dc1..16b907e 100644 --- a/lib/facter/operatingsystem.rb +++ b/lib/facter/operatingsystem.rb @@ -32,6 +32,8 @@ Facter.add(:operatingsystem) do end elsif FileTest.exists?("/etc/arch-release") "Arch" + elsif FileTest.exists?("/etc/vmware-release") + "VMWareESX" elsif FileTest.exists?("/etc/redhat-release") txt = File.read("/etc/redhat-release") if txt =~ /centos/i @@ -57,6 +59,13 @@ Facter.add(:operatingsystem) do end Facter.add(:operatingsystem) do + confine :kernel => "VMkernel" + setcode do + "ESXi" + end +end + +Facter.add(:operatingsystem) do # Default to just returning the kernel as the operating system setcode do Facter[:kernel].value end end diff --git a/lib/facter/operatingsystemrelease.rb b/lib/facter/operatingsystemrelease.rb index 280208b..8f6119f 100644 --- a/lib/facter/operatingsystemrelease.rb +++ b/lib/facter/operatingsystemrelease.rb @@ -72,5 +72,15 @@ Facter.add(:operatingsystemrelease) do end Facter.add(:operatingsystemrelease) do + confine :operatingsystem => %w{VMwareESX} + setcode do + release = Facter::Util::Resolution.exec('vmware -v') + if release =~ /VMware ESX .*?(\d.*)/ + $1 + end + end +end + +Facter.add(:operatingsystemrelease) do setcode do Facter[:kernelrelease].value end end diff --git a/spec/unit/operatingsystem_spec.rb b/spec/unit/operatingsystem_spec.rb index be83916..65feee8 100755 --- a/spec/unit/operatingsystem_spec.rb +++ b/spec/unit/operatingsystem_spec.rb @@ -13,21 +13,26 @@ describe "Operating System fact" do after do Facter.clear end - + it "should default to the kernel name" do Facter.fact(:kernel).stubs(:value).returns("Nutmeg") Facter.fact(:operatingsystem).value.should == "Nutmeg" end - + it "should be Solaris for SunOS" do Facter.fact(:kernel).stubs(:value).returns("SunOS") Facter.fact(:operatingsystem).value.should == "Solaris" end - - it "should identify Oracle VM as OVS" do + it "should be ESXi for VMkernel" do + Facter.fact(:kernel).stubs(:value).returns("VMkernel") + + Facter.fact(:operatingsystem).value.should == "ESXi" + end + + it "should identify Oracle VM as OVS" do Facter.fact(:kernel).stubs(:value).returns("Linux") FileTest.stubs(:exists?).returns false @@ -36,4 +41,13 @@ describe "Operating System fact" do Facter.fact(:operatingsystem).value.should == "OVS" end + + it "should identify VMWare ESX" do + Facter.fact(:kernel).stubs(:value).returns("Linux") + FileTest.stubs(:exists?).returns false + + FileTest.expects(:exists?).with("/etc/vmware-release").returns true + + Facter.fact(:operatingsystem).value.should == "VMWareESX" + end end diff --git a/spec/unit/operatingsystemrelease_spec.rb b/spec/unit/operatingsystemrelease_spec.rb index 1cfb4ac..739a20a 100755 --- a/spec/unit/operatingsystemrelease_spec.rb +++ b/spec/unit/operatingsystemrelease_spec.rb @@ -15,14 +15,14 @@ describe "Operating System Release fact" do end test_cases = { - "CentOS" => "/etc/redhat-release", - "RedHat" => "/etc/redhat-release", - "Fedora" => "/etc/fedora-release", - "MeeGo" => "/etc/meego-release", - "OEL" => "/etc/enterprise-release", - "oel" => "/etc/enterprise-release", - "OVS" => "/etc/ovs-release", - "ovs" => "/etc/ovs-release" + "CentOS" => "/etc/redhat-release", + "RedHat" => "/etc/redhat-release", + "Fedora" => "/etc/fedora-release", + "MeeGo" => "/etc/meego-release", + "OEL" => "/etc/enterprise-release", + "oel" => "/etc/enterprise-release", + "OVS" => "/etc/ovs-release", + "ovs" => "/etc/ovs-release", } test_cases.each do |system, file| @@ -36,4 +36,14 @@ describe "Operating System Release fact" do end end end + + it "for VMWareESX it should run the vmware -v command" do + Facter.fact(:kernel).stubs(:value).returns("VMkernel") + Facter.fact(:kernelrelease).stubs(:value).returns("4.1.0") + Facter.fact(:operatingsystem).stubs(:value).returns("VMwareESX") + + Facter::Util::Resolution.stubs(:exec).with('vmware -v').returns('foo') + + Facter.fact(:operatingsystemrelease).value + end end -- 1.7.1 -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to puppet-dev@googlegroups.com. To unsubscribe from this group, send email to puppet-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.