File: //proc/self/root/usr/lib/ruby/site_ruby/1.8/facter/hardwaremodel.rb
# Fact: hardwaremodel
#
# Purpose:
# Returns the hardware model of the system.
#
# Resolution:
# Uses purely `uname -m` on all platforms other than AIX and Windows.
# On AIX uses the parsed `modelname` output of `lsattr -El sys0 -a modelname`.
# On Windows uses the `host_cpu` pulled out of Ruby's config.
#
# Caveats:
#
Facter.add(:hardwaremodel) do
setcode 'uname -m'
end
Facter.add(:hardwaremodel) do
confine :operatingsystem => :aix
setcode do
model = Facter::Core::Execution.exec('lsattr -El sys0 -a modelname')
if model =~ /modelname\s(\S+)\s/
$1
end
end
end
Facter.add(:hardwaremodel) do
confine :operatingsystem => :windows
setcode do
# The cryptic windows cpu architecture models are documented in these places:
# http://source.winehq.org/source/include/winnt.h#L568
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa394373(v=vs.85).aspx
# http://msdn.microsoft.com/en-us/library/windows/desktop/windows.system.processorarchitecture.aspx
# http://linux.derkeiler.com/Mailing-Lists/Kernel/2008-05/msg12924.html (anything over 6 is still i686)
# Also, arm and neutral are included because they are valid for the upcoming
# windows 8 release. --jeffweiss 23 May 2012
require 'facter/util/wmi'
model = ""
architecture_level = nil
Facter::Util::WMI.execquery("select Architecture, Level, AddressWidth from Win32_Processor").each do |cpu|
architecture_level = (cpu.Level > 5) ? 6 : cpu.Level;
model =
case cpu.Architecture
when 11 then 'neutral' # PROCESSOR_ARCHITECTURE_NEUTRAL
when 10 then 'i686' # PROCESSOR_ARCHITECTURE_IA32_ON_WIN64
when 9 then # PROCESSOR_ARCHITECTURE_AMD64
cpu.AddressWidth == 32 ? "i#{architecture_level}86" : 'x64' # 32 bit OS on 64 bit CPU
when 8 then 'msil' # PROCESSOR_ARCHITECTURE_MSIL
when 7 then 'alpha64' # PROCESSOR_ARCHITECTURE_ALPHA64
when 6 then 'ia64' # PROCESSOR_ARCHITECTURE_IA64
when 5 then 'arm' # PROCESSOR_ARCHITECTURE_ARM
when 4 then 'shx' # PROCESSOR_ARCHITECTURE_SHX
when 3 then 'powerpc' # PROCESSOR_ARCHITECTURE_PPC
when 2 then 'alpha' # PROCESSOR_ARCHITECTURE_ALPHA
when 1 then 'mips' # PROCESSOR_ARCHITECTURE_MIPS
when 0 then "i#{architecture_level}86" # PROCESSOR_ARCHITECTURE_INTEL
else 'unknown' # PROCESSOR_ARCHITECTURE_UNKNOWN
end
break
end
model
end
end