| Version 6 (modified by plazonic, 15 years ago) (diff) |
|---|
Facter Tweaks
New facts testing
While you are writing new facts please refer to puppetlabs documentation. In short do something like:
$ mkdir -p ~/lib/ruby/facter ; export RUBYLIB=~/lib/ruby $ cp /path/to/hardware_platform.rb $RUBYLIB/facter $ facter hardware_platform SUNW,Sun-Blade-1500
New facts distributing
To distribute your new facts to puppet clients make a module (preferably the one where you are using this fact), e.g.
$ mkdir -p /etc/puppet/modules/myfirst_module/lib/facter cp myfirstfact.rb /etc/puppet/modules/myfirst_module/lib/facter
If you are distributing facts this way you can test them on the client by setting FACTERLIB environment variable:
export FACTERLIB=/var/lib/puppet/lib/facter facter
videocard fact
This ruby snippet adds a videocard fact to facter. You can use this fact to decide if you need to install any proprietary video card drivers. Place in /usr/lib/ruby/site_ruby/1.8/facter/videocard.rb
# Josko Plazonic - lifted from Josko March 14, 2011 by Thomas Uphill
require 'facter'
Facter.add("videocard") do
confine :kernel => :linux
ENV["PATH"]="/bin:/sbin:/usr/bin:/usr/sbin"
setcode do
controllers = []
lspciexists = system "/bin/bash -c 'which lspci >&/dev//null'"
if $?.exitstatus == 0
output = %x{lspci}
output.each {|s|
controllers.push($1) if s =~ /VGA compatible controller: (.*)/
}
end
controllers
end
end
After installing you should be able to see the fact like so:
[root@host ~]# facter |grep video videocard => Intel Corporation 82945G/GZ Integrated Graphics Controller (rev 02) [root@host ~]#
Kernel versions fact
This fact requires rubygem ruby-rpm. Either install it from source or if you are using a RHEL 6 based distro (like PUIAS 6 or any other clone) please feel free to use the relevant rpm from our unsupported repo (rubygem-ruby-rpm-1.3.0-* from repository):
# Josko Plazonic 20110314
require 'rubygems'
require 'rpm'
begin
Facter.architecture
rescue
Facter.loadfacts()
end
db = RPMdb.open()
allkernels=db.package("kernel").collect { |x| RPM::Version.new(x[1]+"-"+x[2]) }.sort
db.close()
Facter.add("kernelnewest") do
confine :kernel => :linux
setcode do
allkernels[-1].v+"-"+allkernels[-1].r+"."+Facter.architecture
end
end
Facter.add("kerneloldest") do
confine :kernel => :linux
setcode do
allkernels[0].v+"-"+allkernels[0].r+"."+Facter.architecture
end
end
This fact provides kernelnewest and kerneloldest facts. They can be used, together with kernelrelease fact, in puppet recipes to figure out whether the puppet client is currently running the latest kernel version as well as whether there are alternate versions of the kernel installed. Example recipes that use this module will be posted on the puppet recipes page.
