木偶osfamily的核心事实是如何确定的?

时间:2013-06-21 15:11:58

标签: puppet

我在Suse 11 Linux机器上使用兼容1.6.0的puppet 2.7.19。 $::osfamily facter变量未设置,但它确实设置了$::operatingsystem个事实:

$ puppet apply -e 'notify { "$::osfamily/$::operatingsystem": }'
notice: /SLES

如何在傀儡中设置$::osfamily事实?我想,升级到更高版本的puppet可以解决这个问题,但是对这个Suse发行版进行升级是很困难的。

一种解决方法是全局设置facter变量(例如在/ etc / profile中):

$ export FACTER_OSFAMILY=suse
$ /usr/bin/puppet apply -e 'notify { "$::osfamily/$::operatingsystem": }'
notice: suse/SLES

是否有更好/更清洁的方法来获得此设置?

2 个答案:

答案 0 :(得分:3)

这是您可以采取的一种方法。在你的木偶树中创建一个模块,称之为my_facts(例如)。

然后在my_osfamily.rb

中创建以下modules/my_facts/lib/facter/my_osfamily.rb(事实)文件
Facter.add("my_osfamily") do
    setcode do
        os = Facter.value('operatingsystem')
        case os
        when /CentOS|RedHat/
            "redhat"
        when "Ubuntu"
            "debian"
        when "FreeBSD"
            "freebsd"
        when "Darwin"
            "osx"
        else
            os
        end
    end
end

现在假设您的puppet节点已启用pluginsync,您的自定义事实应自动传播,您应该可以根据需要使用$::my_osfamily这一事实。

根据您的环境设置方式,您还可以使用以下方式查询您的事实:

# facter -p | grep my_osfamily

答案 1 :(得分:0)

我仍然不知道facter / puppet如何设置$::osfamily这个事实,我不知道为什么版本1.6没有设置它。但我能够为facter 1.7找到一个suse rpm。升级后,$::osfamily事实现在设置为“Suse”,以便解决当前问题。