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.
