傀儡事实的空值/空白值

傀儡事实的空值/空白值

我如何才能快速而轻松地陈述 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”)
    结尾
  结尾
结尾

当然,这还没有经过测试,但这应该是你想要的方向。看看官方文档了解有关自定义事实的更多详细信息。

相关内容