Check for xsd_kva for dom0, rather than independent_wallclock (which is present 
on both dom0 and domu). Work around /proc/xen/capabilities, which is sometimes 
not world-readable.

Signed-off-by: Michael Kincaid <[email protected]>
---
Local-branch: ticket/next/2747
 lib/facter/virtual.rb     |   15 +++------------
 spec/unit/virtual_spec.rb |   21 ++++++++++++++++++++-
 2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/lib/facter/virtual.rb b/lib/facter/virtual.rb
index 468ab77..a18de73 100644
--- a/lib/facter/virtual.rb
+++ b/lib/facter/virtual.rb
@@ -46,20 +46,11 @@ Facter.add("virtual") do
         end
 
         if Facter::Util::Virtual.xen?
-            # new Xen domains have this in dom0 not domu :(
-            if FileTest.exists?("/proc/sys/xen/independent_wallclock")
+            if FileTest.exists?("/proc/xen/xsd_kva")
+                result = "xen0"
+            elsif FileTest.exists?("/proc/xen/capabilities")
                 result = "xenu"
             end
-            if FileTest.exists?("/sys/bus/xen")
-                result = "xenu"
-            end
-
-            if FileTest.exists?("/proc/xen/capabilities")
-                txt = Facter::Util::Resolution.exec("cat 
/proc/xen/capabilities")
-                if txt =~ /control_d/i
-                    result = "xen0"
-                end
-            end
         end
 
         if Facter::Util::Virtual.kvm?
diff --git a/spec/unit/virtual_spec.rb b/spec/unit/virtual_spec.rb
index 7e50847..ff67fc5 100644
--- a/spec/unit/virtual_spec.rb
+++ b/spec/unit/virtual_spec.rb
@@ -72,7 +72,11 @@ describe "Virtual fact" do
   describe "on Linux" do
 
       before do
-        
FileTest.expects(:exists?).with("/usr/lib/vmware/bin/vmware-vmx").returns false
+        # Ensure the tests don't fail on Xen or VMware
+        FileTest.stubs(:exists?).with("/proc/sys/xen").returns false
+        FileTest.stubs(:exists?).with("/sys/bus/xen").returns false
+        FileTest.stubs(:exists?).with("/proc/xen").returns false
+        
FileTest.stubs(:exists?).with("/usr/lib/vmware/bin/vmware-vmx").returns false
         Facter.fact(:architecture).stubs(:value).returns(true)
       end
 
@@ -123,6 +127,21 @@ describe "Virtual fact" do
           
Facter::Util::Resolution.stubs(:exec).with('prtdiag').returns("System 
Configuration: Parallels Virtual Platform")
           Facter.fact(:virtual).value.should == "parallels"
       end
+
+      it "should be xen0 with xen dom0 files in /proc" do
+          Facter.fact(:kernel).stubs(:value).returns("Linux")
+          Facter::Util::Virtual.expects(:xen?).returns(true)
+          FileTest.expects(:exists?).with("/proc/xen/xsd_kva").returns(true)
+          Facter.fact(:virtual).value.should == "xen0"
+      end
+      
+      it "should be xenu with xen domU files in /proc" do
+          Facter.fact(:kernel).stubs(:value).returns("Linux")
+          Facter::Util::Virtual.expects(:xen?).returns(true)
+          FileTest.expects(:exists?).with("/proc/xen/xsd_kva").returns(false)
+          
FileTest.expects(:exists?).with("/proc/xen/capabilities").returns(true)
+          Facter.fact(:virtual).value.should == "xenu"
+      end
   end
 end
 
-- 
1.7.4.1

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to