summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Kubicek <jiri.kubicek@kraxnet.cz>2010-07-26 00:08:16 +0200
committerJiri Kubicek <jiri.kubicek@kraxnet.cz>2010-07-26 00:36:28 +0200
commitfaaa169d73e5132b7f2ea491461690324c1133ab (patch)
tree3b37feb83a8c12fe268a2a6c1f7441ca78ea6c3d
parent82286e44cf91e2e8305ba03e7e183ff98593099f (diff)
downloadfacter-faaa169d73e5132b7f2ea491461690324c1133ab.tar.gz
facter-faaa169d73e5132b7f2ea491461690324c1133ab.tar.xz
facter-faaa169d73e5132b7f2ea491461690324c1133ab.zip
Fix #4352 - Support for detecting KVM virtuals on FreeBSD
There was no support for detecting FreeBSD running in KVM as a virtual in facter. This patch detects KVM by getting "hw.model" kernel state via sysctl. Jails running in KVM are also correctly detected as "jail" not "kvm". Signed-off-by: Jiri Kubicek <jiri.kubicek@kraxnet.cz>
-rw-r--r--lib/facter/util/virtual.rb9
-rw-r--r--spec/unit/util/virtual.rb6
-rw-r--r--spec/unit/virtual.rb7
3 files changed, 18 insertions, 4 deletions
diff --git a/lib/facter/util/virtual.rb b/lib/facter/util/virtual.rb
index 900375f..2d18c33 100644
--- a/lib/facter/util/virtual.rb
+++ b/lib/facter/util/virtual.rb
@@ -43,11 +43,12 @@ module Facter::Util::Virtual
end
def self.kvm?
- if FileTest.exists?("/proc/cpuinfo")
- txt = File.read("/proc/cpuinfo")
- return true if txt =~ /QEMU Virtual CPU/
+ txt = if FileTest.exists?("/proc/cpuinfo")
+ File.read("/proc/cpuinfo")
+ elsif Facter.value(:kernel)=="FreeBSD"
+ Facter::Util::Resolution.exec("/sbin/sysctl -n hw.model")
end
- return false
+ (txt =~ /QEMU Virtual CPU/) ? true : false
end
def self.kvm_type
diff --git a/spec/unit/util/virtual.rb b/spec/unit/util/virtual.rb
index f1ccf1e..5b59cf9 100644
--- a/spec/unit/util/virtual.rb
+++ b/spec/unit/util/virtual.rb
@@ -100,6 +100,12 @@ describe Facter::Util::Virtual do
Facter::Util::Virtual.should be_kvm
end
+ it "should detect kvm on FreeBSD" do
+ Facter.fact(:kernel).stubs(:value).returns("FreeBSD")
+ Facter::Util::Resolution.stubs(:exec).with("/sbin/sysctl -n hw.model").returns("QEMU Virtual CPU version 0.12.4")
+ Facter::Util::Virtual.should be_kvm
+ end
+
it "should identify FreeBSD jail when in jail" do
Facter::Util::Resolution.stubs(:exec).with("/sbin/sysctl -n security.jail.jailed").returns("1")
Facter::Util::Virtual.should be_jail
diff --git a/spec/unit/virtual.rb b/spec/unit/virtual.rb
index 311001d..8ee843b 100644
--- a/spec/unit/virtual.rb
+++ b/spec/unit/virtual.rb
@@ -17,6 +17,13 @@ describe "Virtual fact" do
Facter.fact(:virtual).value.should == "zone"
end
+ it "should be jail on FreeBSD when a jail in kvm" do
+ Facter.fact(:kernel).stubs(:value).returns("FreeBSD")
+ Facter::Util::Virtual.stubs(:jail?).returns(true)
+ Facter::Util::Virtual.stubs(:kvm?).returns(true)
+ Facter.fact(:virtual).value.should == "jail"
+ end
+
end
describe "is_virtual fact" do