diff options
author | Rein Henrichs <rein@puppetlabs.com> | 2010-08-10 15:25:22 -0700 |
---|---|---|
committer | Rein Henrichs <rein@puppetlabs.com> | 2010-08-18 14:44:45 -0700 |
commit | a85f2b0f5c43f3b2324d06310a1d673438840e89 (patch) | |
tree | 41eafa9cb6e31254b66c0fad5f42a79982269d18 | |
parent | 6edf3199a212e6b33f9e09edbb3cb34710710326 (diff) | |
download | facter-a85f2b0f5c43f3b2324d06310a1d673438840e89.tar.gz facter-a85f2b0f5c43f3b2324d06310a1d673438840e89.tar.xz facter-a85f2b0f5c43f3b2324d06310a1d673438840e89.zip |
[#2865] Fix reporting of virtual facts
Regexp tested the s_context or VxID field if /proc/self/status and
returned false for 0 and true for any other number. 0 indicates a host,
which is still virtual.
Fix changes regexp to correctly report hosts as virtual. Tested against
vserver 2.1 and 2.3.
-rw-r--r-- | lib/facter/util/virtual.rb | 2 | ||||
-rw-r--r-- | spec/fixtures/virtual/proc_self_status/vserver_2_1/guest | 37 | ||||
-rw-r--r-- | spec/fixtures/virtual/proc_self_status/vserver_2_1/host | 36 | ||||
-rw-r--r-- | spec/fixtures/virtual/proc_self_status/vserver_2_3/guest | 39 | ||||
-rw-r--r-- | spec/fixtures/virtual/proc_self_status/vserver_2_3/host | 39 | ||||
-rw-r--r-- | spec/unit/util/virtual.rb | 20 |
6 files changed, 172 insertions, 1 deletions
diff --git a/lib/facter/util/virtual.rb b/lib/facter/util/virtual.rb index 5f70d42..bc00e1c 100644 --- a/lib/facter/util/virtual.rb +++ b/lib/facter/util/virtual.rb @@ -22,7 +22,7 @@ module Facter::Util::Virtual def self.vserver? return false unless FileTest.exists?("/proc/self/status") txt = File.read("/proc/self/status") - return true if txt =~ /^(s_context|VxID):[[:blank:]]*[1-9]/ + return true if txt =~ /^(s_context|VxID):[[:blank:]]*[0-9]/ return false end diff --git a/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest b/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest new file mode 100644 index 0000000..760cc24 --- /dev/null +++ b/spec/fixtures/virtual/proc_self_status/vserver_2_1/guest @@ -0,0 +1,37 @@ +Name: cat +State: R (running) +SleepAVG: 58% +Tgid: 24671 +Pid: 24671 +PPid: 24670 +TracerPid: 0 +Uid: 0 0 0 0 +Gid: 0 0 0 0 +FDSize: 32 +Groups: 0 +VmPeak: 1580 kB +VmSize: 1580 kB +VmLck: 0 kB +VmHWM: 372 kB +VmRSS: 372 kB +VmData: 152 kB +VmStk: 88 kB +VmExe: 16 kB +VmLib: 1280 kB +VmPTE: 12 kB +Threads: 1 +SigQ: 0/4294967295 +SigPnd: 0000000000000000 +ShdPnd: 0000000000000000 +SigBlk: 0000000000000000 +SigIgn: 0000000000000000 +SigCgt: 0000000000000000 +CapInh: 0000000000000000 +CapPrm: 00000000344c04ff +CapEff: 00000000344c04ff +s_context: 40074 +ctxflags: 1602020010 +initpid: 0 +ipv4root: 4a00007f/ffffffff 4a24f6d5/00ffffff +ipv4root_bcast: 00000000 + diff --git a/spec/fixtures/virtual/proc_self_status/vserver_2_1/host b/spec/fixtures/virtual/proc_self_status/vserver_2_1/host new file mode 100644 index 0000000..61a0845 --- /dev/null +++ b/spec/fixtures/virtual/proc_self_status/vserver_2_1/host @@ -0,0 +1,36 @@ +Name: cat +State: R (running) +SleepAVG: 88% +Tgid: 24625 +Pid: 24625 +PPid: 24618 +TracerPid: 0 +Uid: 47000 47000 47000 47000 +Gid: 4733 4733 4733 4733 +FDSize: 32 +Groups: 0 4733 +VmPeak: 1768 kB +VmSize: 1768 kB +VmLck: 0 kB +VmHWM: 396 kB +VmRSS: 396 kB +VmData: 160 kB +VmStk: 88 kB +VmExe: 28 kB +VmLib: 1468 kB +VmPTE: 12 kB +Threads: 1 +SigQ: 0/4294967295 +SigPnd: 0000000000000000 +ShdPnd: 0000000000000000 +SigBlk: 0000000000000000 +SigIgn: 0000000000000000 +SigCgt: 0000000000000000 +CapInh: 0000000000000000 +CapPrm: 0000000000000000 +CapEff: 0000000000000000 +s_context: 0 +ctxflags: none +initpid: none +ipv4root: 0 +ipv4root_bcast: 0 diff --git a/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest b/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest new file mode 100644 index 0000000..7567c38 --- /dev/null +++ b/spec/fixtures/virtual/proc_self_status/vserver_2_3/guest @@ -0,0 +1,39 @@ +Name: cat +State: R (running) +Tgid: 21149 +Pid: 21149 +PPid: 21142 +TracerPid: 0 +Uid: 0 0 0 0 +Gid: 0 0 0 0 +FDSize: 64 +Groups: 0 +VmPeak: 1564 kB +VmSize: 1564 kB +VmLck: 0 kB +VmHWM: 384 kB +VmRSS: 384 kB +VmData: 160 kB +VmStk: 84 kB +VmExe: 16 kB +VmLib: 1284 kB +VmPTE: 20 kB +Threads: 1 +SigQ: 0/71680 +SigPnd: 0000000000000000 +ShdPnd: 0000000000000000 +SigBlk: 0000000000000000 +SigIgn: 0000000000000000 +SigCgt: 0000000000000000 +CapInh: 0000000000000000 +CapPrm: fffffffffffffeff +CapEff: fffffffffffffeff +CapBnd: fffffffffffffeff +Cpus_allowed: ff +Cpus_allowed_list: 0-7 +Mems_allowed: 1 +Mems_allowed_list: 0 +VxID: 40128 +NxID: 40128 +voluntary_ctxt_switches: 1 +nonvoluntary_ctxt_switches: 0 diff --git a/spec/fixtures/virtual/proc_self_status/vserver_2_3/host b/spec/fixtures/virtual/proc_self_status/vserver_2_3/host new file mode 100644 index 0000000..15b17e9 --- /dev/null +++ b/spec/fixtures/virtual/proc_self_status/vserver_2_3/host @@ -0,0 +1,39 @@ +Name: cat +State: R (running) +Tgid: 21074 +Pid: 21074 +PPid: 21020 +TracerPid: 0 +Uid: 47000 47000 47000 47000 +Gid: 4733 4733 4733 4733 +FDSize: 64 +Groups: 0 4733 +VmPeak: 3800 kB +VmSize: 3800 kB +VmLck: 0 kB +VmHWM: 468 kB +VmRSS: 468 kB +VmData: 176 kB +VmStk: 84 kB +VmExe: 32 kB +VmLib: 1432 kB +VmPTE: 28 kB +Threads: 1 +SigQ: 0/71680 +SigPnd: 0000000000000000 +ShdPnd: 0000000000000000 +SigBlk: 0000000000000000 +SigIgn: 0000000000000000 +SigCgt: 0000000000000000 +CapInh: 0000000000000000 +CapPrm: 0000000000000000 +CapEff: 0000000000000000 +CapBnd: fffffffffffffeff +Cpus_allowed: ff +Cpus_allowed_list: 0-7 +Mems_allowed: 1 +Mems_allowed_list: 0 +VxID: 0 +NxID: 0 +voluntary_ctxt_switches: 2 +nonvoluntary_ctxt_switches: 0 diff --git a/spec/unit/util/virtual.rb b/spec/unit/util/virtual.rb index 1e31a2f..2477ad6 100644 --- a/spec/unit/util/virtual.rb +++ b/spec/unit/util/virtual.rb @@ -57,6 +57,26 @@ describe Facter::Util::Virtual do Facter::Util::Virtual.should_not be_vserver end + fixture_path = File.join(SPECDIR, 'fixtures', 'virtual', 'proc_self_status') + + test_cases = [ + [File.join(fixture_path, 'vserver_2_1', 'guest'), true, 'vserver 2.1 guest'], + [File.join(fixture_path, 'vserver_2_1', 'host'), true, 'vserver 2.1 host'], + [File.join(fixture_path, 'vserver_2_3', 'guest'), true, 'vserver 2.3 guest'], + [File.join(fixture_path, 'vserver_2_3', 'host'), true, 'vserver 2.3 host'] + ] + + test_cases.each do |status_file, expected, description| + context "with /proc/self/status from #{description}" do + it "should detect vserver as #{expected.inspect}" do + status = File.read(status_file) + FileTest.stubs(:exists?).with("/proc/self/status").returns(true) + File.stubs(:read).with("/proc/self/status").returns(status) + Facter::Util::Virtual.vserver?.should == expected + end + end + 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) |