Plugins in Modules for Puppet
2011-01-13
最近,在写squid 的puppet模块。由于默认的facter 不能计算出 squid 配置文件中 cachemem 的值。 所以,需要给facter 写个插件。
扩展模块的目录结构:
在 Puppet 0.25.x 或更新版本的Plugin是存放在 module/lib目录下。
//lib/puppet/type
对于 providers, 它们是放在以下目录中:
//lib/puppet/provider
对于 functions, 它们是放在以下目录中:
//lib/puppet/parser/functions
类似,Facter facts属于libary目录下的facter子目录中
//lib/facter
Enabling Pluginsync:
在建立Plugin目录结构后,我们必须在mater 和 client的puppet 配置文件(puppet.conf)启用pluginsync
[main]
pluginsync = true
Adding Custom Facts to Facter:
vi /etc/puppet/modules/squid/lib/facter/cachemem.rb
require 'facter'
Facter.add('cachemem') do
setcode do
File.readlines("/proc/meminfo").each do |l|
$size = ($1.to_i / 2) / 1024 if l =~ /^MemTotal:\s+(\d+)\s+?\S+/
end
$size
end
end
注意:当在客户端节点上运行facter时,可能不能运行你自己的写的fact。 如果你不能运行自己的扩展的fact,那试图添加factpath到FACTERLIB环境变量(如: export FACTERLIB=/var/lib/puppet/lib/facter)或者在 客户端的puppet配置文件(puppet.conf)中设置如下选项:
[main]
factpath = /var/lib/puppet/lib/facter
原文参考:http://projects.puppetlabs.com/projects/1/wiki/Adding_Facts