我在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
是否有更好/更清洁的方法来获得此设置?
答案 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”,以便解决当前问题。