aboutsummaryrefslogtreecommitdiff
path: root/plugins/facter/virtual.rb
blob: afb60f3d05a5f0d089ae57ea4f73042ad848ee65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Copied from http://reductivelabs.com/trac/puppet/wiki/VirtualRecipe?version=6
# Authored by abnormaliti with contributions by daniel@nsp.co.nz and mwr
	
# This defines the fact "virtual" with the possible values of "physical",
# "vmware", "vmware_server", "xenu", or "xen0"
	
Facter.add("virtual") do
	confine :kernel => :linux
	
	ENV["PATH"]="/bin:/sbin:/usr/bin:/usr/sbin"
	
	result = "physical"
	
	setcode do
	
		lspciexists = system "which lspci > /dev/null 2>&1"
		if $?.exitstatus == 0
			output = %x{lspci}
			output.each {|p|
				# --- look for the vmware video card to determine if it is virtual => vmware.
				# ---     00:0f.0 VGA compatible controller: VMware Inc [VMware SVGA II] PCI Display Adapter
				result = "vmware" if p =~ /VMware/
			}
		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"
		end
		
		if FileTest.exists?("/proc/xen/capabilities") and File.read("/proc/xen/capabilities") =~ /control_d/i
			result = "xen0"
		elsif FileTest.exists?("/proc/sys/xen/independent_wallclock")
			result = "xenu"
		end
		result
	end
end