web-dev-qa-db-ja.com

人形の事実に関するヌル/ブランク値

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'

「ファイルが存在しない場合はコメントのみを含む行を書く」に似たものでそれを回避することができましたが、それは厄介なようです。

1
Tim Brigham

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
2
sciurus

このようなカスタムファクトを作成するときは、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 をご覧ください。

1
daff