事实文件已解析但返回空数据集
Fact file was parsed but returned an empty data set
对于我当前的模块,我需要检查是否安装了 php 版本 5 或 7 并为此创建了一个事实。事实文件存储在模块目录中 facts.d/packageversion.rb 并具有以下内容:
#!/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 代理日志中,我收到此错误:
Fact file /var/lib/puppet/facts.d/packageversion.rb was parsed but
returned an empty data set
我该如何解决这个问题?
facts.d
是外部事实的模块目录。您可以将此文件放入外部事实目录,但预期输出需要是键值对。这并没有发生,所以 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
马特·舒查德所说的。
此外,您可能会认为批准的 Vox Populi Puppet 模块使用 this PHP 版本的代码:
Facter.add(:phpversion) do
setcode do
output = Facter::Util::Resolution.exec('php -v')
unless output.nil?
output.split("\n").first.split(' ').
select { |x| x =~ %r{^(?:(\d+)\.)(?:(\d+)\.)?(\*|\d+)} }.first
end
end
end
请注意 Facter::Util::Resolution.exec
已弃用,取而代之的是 Facter::Core::Execution.exec
。
除此之外,您可能认为这是获得 PHP 版本的更好方法。
对于我当前的模块,我需要检查是否安装了 php 版本 5 或 7 并为此创建了一个事实。事实文件存储在模块目录中 facts.d/packageversion.rb 并具有以下内容:
#!/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 代理日志中,我收到此错误:
Fact file /var/lib/puppet/facts.d/packageversion.rb was parsed but returned an empty data set
我该如何解决这个问题?
facts.d
是外部事实的模块目录。您可以将此文件放入外部事实目录,但预期输出需要是键值对。这并没有发生,所以 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
马特·舒查德所说的。
此外,您可能会认为批准的 Vox Populi Puppet 模块使用 this PHP 版本的代码:
Facter.add(:phpversion) do
setcode do
output = Facter::Util::Resolution.exec('php -v')
unless output.nil?
output.split("\n").first.split(' ').
select { |x| x =~ %r{^(?:(\d+)\.)(?:(\d+)\.)?(\*|\d+)} }.first
end
end
end
请注意 Facter::Util::Resolution.exec
已弃用,取而代之的是 Facter::Core::Execution.exec
。
除此之外,您可能认为这是获得 PHP 版本的更好方法。