Puppet

木偶事實的空/空白值

  • September 25, 2021

如何快速輕鬆地聲明在 puppet 中的事實可以使用空/空白值?

組裝自定義事實時,我正在執行以下操作:

/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 操作之前檢查相關文件是否存在。就像是:

Factor.add (: hostslocal) 為
設置程式碼做
如果 File.exist?“/etc/hosts.local”
因素::Util::Resolution.exec("cat /etc/hosts.local 2> /dev/null")
結尾
結尾
結尾

當然未經測試,但這應該是您想要的方向。查看官方文件以獲取有關自定義事實的更多詳細資訊。

引用自:https://serverfault.com/questions/556876