对于我当前的模块,我需要检查是否安装了php version 5或php version 7,并为此创建一个事实。事实文件存储在facts.d/packageversion.rb的modules目录中,包含以下内容:
#!/usr/bin/ruby
require 'facter'
Facter.add(:php_version) do
setcode do
if File.directory? '/etc/php5'
5
else
if File.directory? '/etc/php7'
7
else
0
end
end
end
end
但我不能在我的模块中使用它。在puppet代理日志中,我得到以下错误:
已分析事实文件/var/lib/puppet/facts.d/packageversion.rb,但
返回空数据集
我该怎么解决?
最佳答案
facts.d
是外部事实的模块目录。您可以将此文件放入外部facts目录,但预期的输出必须是键值对。这并没有发生,所以puppet没有为事实找到数据集。https://docs.puppet.com/facter/3.6/custom_facts.html#executable-facts-----unix
你把这个事实写成了一个习惯事实,而不是一个外部事实。因此,它需要放在模块的lib/facter
目录中。然后它就会正常工作。我注意到这个重要的信息似乎已经从最新的facter文档中删除了,这可能会导致您的困惑。
另外,考虑在代码中使用elsif
以实现清晰和优化:
if File.directory? '/etc/php5'
5
elsif File.directory? '/etc/php7'
7
else
0
end
关于ruby - 事实文件已解析,但返回了空数据集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44674079/