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.

Reply via email to