puppet 自定义facter,及ruby使用正则的方法

发布时间:2019-10-01编辑:脚本学堂
因为eth0为内网网卡,所以$ipaddress取到的是内网IP。更改为公网IP?

因为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