Puppet内のファクトでnull /空白値がOKであるとすばやく簡単に述べるにはどうすればよいですか?
カスタムファクトを組み立てるとき、私は次のようなことをしています。
/ puppet/production/modules/hosts/lib/facter
Facter.add(:hostslocal) do
setcode do
Facter::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null")
end
end
これは、ファイルが存在しない場合を除いて完全に機能します。存在しない場合、Puppetで使用すると次のようなもので爆発します。
Detail: Could not find value for 'hostslocal'
「ファイルが存在しない場合はコメントのみを含む行を書く」に似たものでそれを回避することができましたが、それは厄介なようです。
Facterには、特定の状況でのみ設定される多くの事実があります。それらを使用する前に、それらが未定義であるかどうかを確認する必要があります。
if $::hostslocal != undef {
do_your_thing_here
}
カスタムファクトに常に値を持たせたい場合は、次のようなことができます。
Facter.add(:hostslocal) do
setcode do
if File.exist? "/etc/hosts.local"
Facter::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null")
else
"unknown"
end
end
end
このようなカスタムファクトを作成するときは、Rubyを自由に使用できます。したがって、execアクションを実行する前に、問題のファイルが存在するかどうかを確認してください。次のようになります。
Facter.add(:hostslocal)do setcode do if File.exist? "/etc/hosts.local" Facter:: Util :: Resolution.exec(" cat /etc/hosts.local 2> /dev/null") end end end
もちろんテストされていませんが、それはあなたが行きたい方向であるはずです。カスタムファクトの詳細については、 http://docs.puppetlabs.com/guides/custom_facts.html をご覧ください。