因为eth0为内网网卡,所以$ipaddress取到的是内网IP。
更改为公网IP?
facter的脚本在:
centos 5 /usr/lib/ruby/site_ruby/1.8/facter 或 centos 4.5 /usr/lib/site_ruby/1.8/facter 可以通过facter输出中rubysitedir确定
更改ipaddress.rb
打开文件可以看到:
On the Unixes does an ifconfig, and returns the first non 127.0.0.0/8
我的内网ip为172地址段,所以,只需要改成返回第一个即不是127又不是172地址段的ip即可
将第一个
unless tmp =~ /^127./ 更改为 unless tmp =~ /^(172|127)./
自定义facter,输出机房信息,内容为idc => sh_idc或bj_idc等
两种方式同步自定义的fact,
方法1:
当做文件,同步到所有的服务器。
创建一个module,user_define_fact。
class user_define_fact{
file {"$rubysitedir/facter/idcinfo.rb":
ensure => file,
mode => 644,
source => "puppet:///modules/user_define_fact/idcinfo.rb";
}
}
其中$rubysitedir是facter自带的fact,指向facter所存放的路径。
方法2:
使用puppet的pulgin module
http://docs.puppetlabs.com/guides/plugins_in_modules.html
步骤1、建立目录
/etc/puppet/modules/custom/lib/facter/
将rb文件放到该目录。
步骤2、
在master和client上同时打开pluginsync
[main]
pluginsync = true
idcinfo.rb内容为:
Facter.add("idcinfo") do
setcode do
ip = Facter.value('ipaddress')
idc = case ip
when /22.19.15/ : "ShangHai_IDC"
when /115.151.214/ : "HeNan_IDC"
when /19.197.47/ : "ShenZhen_IDC"
when /14.42.29/ : "BeiJing_IDC"
else "idc info error"
end
idc
end
end
其中:
You can write a fact which uses other facts by accessing Facter.value(“somefact”) or simply Facter.somefact. The former will return nil for unknown facts, the latter will raise an exception.
查看
facter idcinfo
注:需要将rb文件放到$rubysitedir。
当前时间
Facter.add(:current_time) do
setcode do
%x{/bin/date +%Y%m%d%H%M%S}.chomp
end
end
ruby中使用正则:
http://www.cnblogs.com/cnblogsfans/archive/2009/02/02/1382745.html
http://yc75.iteye.com/blog/379929
Facter.add("ip_end") do
setcode do
ip = Facter.value('ipaddress')
/(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})/.match(ip)
ip_end=$4
ip_end
end
end