# mamufacturer.rb # Support methods for manufacturer specific facts module Facter::Manufacturer def self.get_dmi_table() case Facter.value(:kernel) when 'Linux', 'GNU/kFreeBSD' return nil unless FileTest.exists?("/usr/sbin/dmidecode") output=%x{/usr/sbin/dmidecode 2>/dev/null} when 'FreeBSD' return nil unless FileTest.exists?("/usr/local/sbin/dmidecode") output=%x{/usr/local/sbin/dmidecode 2>/dev/null} when 'NetBSD' return nil unless FileTest.exists?("/usr/pkg/sbin/dmidecode") output=%x{/usr/pkg/sbin/dmidecode 2>/dev/null} when 'SunOS' return nil unless FileTest.exists?("/usr/sbin/smbios") output=%x{/usr/sbin/smbios 2>/dev/null} else output=nil end return output end def self.dmi_find_system_info(name) splitstr= Facter.value(:kernel) == 'SunOS' ? "ID SIZE TYPE" : /^Handle/ output = self.get_dmi_table() return if output.nil? name.each_pair do |key,v| v.each do |v2| v2.each_pair do |value,facterkey| output.split(splitstr).each do |line| if line =~ /#{key}/ and line =~ /\n\s+#{value} (.+)\n/ result = $1.strip Facter.add(facterkey) do confine :kernel => [ :linux, :freebsd, :netbsd, :sunos, :"gnu/kfreebsd" ] setcode do result end end end end end end end end def self.sysctl_find_system_info(name) name.each do |sysctlkey,facterkey| Facter.add(facterkey) do confine :kernel => :openbsd setcode do Facter::Util::Resolution.exec("sysctl -n " + sysctlkey) end end end end def self.prtdiag_sparc_find_system_info() # Parses prtdiag for a SPARC architecture string, won't work with Solaris x86 output = Facter::Util::Resolution.exec('/usr/sbin/prtdiag') # System Configuration: Sun Microsystems sun4u Sun SPARC Enterprise M3000 Server sysconfig = output.split("\n")[0] if sysconfig =~ /^System Configuration:\s+(.+?)\s+(sun\d+\S+)\s+(.+)/ then Facter.add('manufacturer') do setcode do $1 end end Facter.add('productname') do setcode do $3 end end end end def self.win32_find_system_info(name) require 'win32ole' value = "" wmi = WIN32OLE.connect("winmgmts://") name.each do |facterkey, win32key| query = wmi.ExecQuery("select * from Win32_#{win32key.last}") Facter.add(facterkey) do confine :kernel => :windows setcode do query.each { |x| value = x.__send__( (win32key.first).to_sym) } value end end end end end