2

我在 Suse 11 Linux 机器上使用 puppet 2.7.19 和 facter 1.6.0。facter$::osfamily变量未设置,尽管它确实设置了$::operatingsystem事实:

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

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

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

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

有没有更好/更清洁的方法来获得这一套?

4

2 回答 2

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
于 2013-06-22T17:36:50.987 回答
0

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

于 2013-06-21T18:50:10.940 回答