我如何才能快速而轻松地陈述 Puppet 中某个事实上的空值/空白值是可以的?
当组装自定义事实时,我正在做类似以下的事情:
/puppet/生产/模块/主机/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
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
在编写此类自定义事实时,您可以利用 Ruby 的强大功能。因此,在执行 exec 操作之前,只需检查相关文件是否存在即可。例如:
Facter.add(:hostslocal)执行 设置代码 如果 File.exist? "/etc/hosts.local" Facter::Util::Resolution.exec(“cat /etc/hosts.local 2> /dev/null”) 结尾 结尾 结尾
当然,这还没有经过测试,但这应该是你想要的方向。看看官方文档了解有关自定义事实的更多详细信息。