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