diff options
| -rw-r--r-- | lib/facter/util/virtual.rb | 16 | ||||
| -rw-r--r-- | lib/facter/virtual.rb | 39 | ||||
| -rw-r--r-- | spec/unit/util/virtual.rb (renamed from spec/unit/util/virtual_spec.rb) | 36 | ||||
| -rw-r--r-- | spec/unit/virtual.rb (renamed from spec/unit/virtual_spec.rb) | 2 |
4 files changed, 73 insertions, 20 deletions
diff --git a/lib/facter/util/virtual.rb b/lib/facter/util/virtual.rb index 8db57a3..0c3fb73 100644 --- a/lib/facter/util/virtual.rb +++ b/lib/facter/util/virtual.rb @@ -24,4 +24,20 @@ module Facter::Util::Virtual return true if txt =~ /^(s_context|VxID):[[:blank:]]*[1-9]/ return false end + + def self.vserver_type + if self.vserver? + if FileTest.exists?("/proc/virtual") + "vserver_host" + else + "vserver" + end + end + end + + def self.xen? + ["/proc/sys/xen", "/sys/bus/xen", "/proc/xen" ].detect do |f| + FileTest.exists?(f) + end + end end diff --git a/lib/facter/virtual.rb b/lib/facter/virtual.rb index 299ebb4..78413a9 100644 --- a/lib/facter/virtual.rb +++ b/lib/facter/virtual.rb @@ -13,24 +13,24 @@ Facter.add("virtual") do result = Facter::Util::Virtual.openvz_type() end - result = "vserver" if Facter::Util::Virtual.vserver? - - if FileTest.exists?("/proc/virtual") - result = "vserver_host" + if Facter::Util::Virtual.vserver? + result = Facter::Util::Virtual.vserver_type() end - # new Xen domains have this in dom0 not domu :( - if FileTest.exists?("/proc/sys/xen/independent_wallclock") - result = "xenu" - end - if FileTest.exists?("/sys/bus/xen") - result = "xenu" - end + if Facter::Util::Virtual.xen? + # new Xen domains have this in dom0 not domu :( + if FileTest.exists?("/proc/sys/xen/independent_wallclock") + result = "xenu" + end + if FileTest.exists?("/sys/bus/xen") + result = "xenu" + end - if FileTest.exists?("/proc/xen/capabilities") - txt = File.read("/proc/xen/capabilities") - if txt =~ /control_d/i - result = "xen0" + if FileTest.exists?("/proc/xen/capabilities") + txt = File.read("/proc/xen/capabilities") + if txt =~ /control_d/i + result = "xen0" + end end end @@ -57,11 +57,10 @@ Facter.add("virtual") do end end end - end - - # VMware server 1.0.3 rpm places vmware-vmx in this place, other versions or platforms may not. - if FileTest.exists?("/usr/lib/vmware/bin/vmware-vmx") - result = "vmware_server" + # VMware server 1.0.3 rpm places vmware-vmx in this place, other versions or platforms may not. + if FileTest.exists?("/usr/lib/vmware/bin/vmware-vmx") + result = "vmware_server" + end end result diff --git a/spec/unit/util/virtual_spec.rb b/spec/unit/util/virtual.rb index 3552c45..1f1c0f8 100644 --- a/spec/unit/util/virtual_spec.rb +++ b/spec/unit/util/virtual.rb @@ -57,4 +57,40 @@ describe Facter::Util::Virtual do Facter::Util::Virtual.should_not be_vserver end + it "should identify vserver_host when /proc/virtual exists" do + Facter::Util::Virtual.expects(:vserver?).returns(true) + FileTest.stubs(:exists?).with("/proc/virtual").returns(true) + Facter::Util::Virtual.vserver_type().should == "vserver_host" + end + + it "should identify vserver_type as vserver when /proc/virtual does not exist" do + Facter::Util::Virtual.expects(:vserver?).returns(true) + FileTest.stubs(:exists?).with("/proc/virtual").returns(false) + Facter::Util::Virtual.vserver_type().should == "vserver" + end + + it "should detect xen when /proc/sys/xen exists" do + FileTest.expects(:exists?).with("/proc/sys/xen").returns(true) + Facter::Util::Virtual.should be_xen + end + + it "should detect xen when /sys/bus/xen exists" do + FileTest.expects(:exists?).with("/proc/sys/xen").returns(false) + FileTest.expects(:exists?).with("/sys/bus/xen").returns(true) + Facter::Util::Virtual.should be_xen + end + + it "should detect xen when /proc/xen exists" do + FileTest.expects(:exists?).with("/proc/sys/xen").returns(false) + FileTest.expects(:exists?).with("/sys/bus/xen").returns(false) + FileTest.expects(:exists?).with("/proc/xen").returns(true) + Facter::Util::Virtual.should be_xen + end + + it "should not detect xen when no sysfs/proc xen directories exist" do + FileTest.expects(:exists?).with("/proc/sys/xen").returns(false) + FileTest.expects(:exists?).with("/sys/bus/xen").returns(false) + FileTest.expects(:exists?).with("/proc/xen").returns(false) + Facter::Util::Virtual.should_not be_xen + end end diff --git a/spec/unit/virtual_spec.rb b/spec/unit/virtual.rb index 68cd258..cc72ffc 100644 --- a/spec/unit/virtual_spec.rb +++ b/spec/unit/virtual.rb @@ -12,6 +12,8 @@ describe "Virtual fact" do it "should be zone on Solaris when a zone" do Facter.fact(:kernel).stubs(:value).returns("SunOS") Facter::Util::Virtual.stubs(:zone?).returns(true) + Facter::Util::Virtual.stubs(:vserver?).returns(false) + Facter::Util::Virtual.stubs(:xen?).returns(false) Facter.fact(:virtual).value.should == "zone" end |
