summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/facter/util/virtual.rb16
-rw-r--r--lib/facter/virtual.rb39
-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