2

私は、Suse 11 Linux マシンでファクト 1.6.0 を使用して puppet 2.7.19 を使用しています。ファクトは設定されていますが、$::osfamilyファクト変数は設定されていません$::operatingsystem

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

$::osfamily人形の中で事実はどのように設定されていますか?これは puppet の新しいバージョンにアップグレードすれば解決すると思いますが、この Suse ディストリビューションでのアップグレードは困難です。

1 つの回避策は、facter 変数をグローバルに設定することです (たとえば、/etc/profile で):

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

このセットを取得するためのより良い/よりクリーンな方法はありますか?

4

2 に答える 2

3

これがあなたが取ることができる1つのアプローチです。パペット ツリー内にモジュールを作成し、それを呼び出します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 に答える