Как определяется основополагающий факт марионеточного осфамили?

Я работаю с 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", так что решает непосредственную проблему.

Другие вопросы по тегам