Как определяется основополагающий факт марионеточного осфамили?
Я работаю с Puppet 2.7.19 с facter 1.6.0 на машине Suse 11 Linux. $::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 ответа
Вот один из подходов, который вы могли бы использовать. Создайте модуль внутри своего дерева кукол, назовите его 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
Теперь, предполагая, что на ваших марионеточных узлах включена функция pluginsync, ваш пользовательский факт должен автоматически распространяться, и вы сможете использовать $::my_osfamily
факт по мере необходимости.
В зависимости от того, как настроена ваша среда, вы также можете запросить свои факты, используя:
# facter -p | grep my_osfamily
Я до сих пор не знаю ответа о том, как Факер / Кукольный устанавливает $::osfamily
факт, и я не знаю, почему Facter версии 1.6 не устанавливает его. Но мне удалось найти suse rpm для facter 1.7. После обновления $::osfamily
Факт теперь установлен на "Suse", так что решает непосредственную проблему.