首先,我知道有很多关于这个错误的问题,而且我已经检查了所有这些问题,但是我的解决方案并没有使用任何解决方案。
我第一次使用Puppet / Ruby工作,我遇到了以下问题。
我创建了这个函数:
module Puppet::Parser::Functions
newfunction(:phpversion, :type => :rvalue) do
%x["/usr/bin/php -r 'echo PHP_MAJOR_VERSION . \".\" . PHP_MINOR_VERSION;'"]
end
end
当我使用:
在我的清单文件中调用它时$phpversion = phpversion()
当我执行代理时,它会抛出错误" Error: Could not retrieve catalog from remote server: Error 400 on SERVER: wrong number of arguments (1 for 0) at /etc/puppetlabs/puppet/modules/x/manifests/somefile.pp:123 on node foo.example.bar"
我尝试在|args|
语句后添加do
并删除:type
,但它仍然会抛出相同的错误。当我使用$phpversion = phpversion
时,它只是认为它是一个文本字符串而不是一个函数(我预期,但无论如何都要尝试)。
非常感谢任何帮助。
答案 0 :(得分:3)
如果你想获得php的版本,它可能更容易做到这一点:
Facter.add(:phpversion) do
setcode do
if Facter::Util::Resolution.which('php')
Facter::Util::Resolution.exec('/usr/bin/php -r 'echo PHP_MAJOR_VERSION . \".\" . PHP_MINOR_VERSION;'"').lines.first.split(/"/)[1].strip
end
end
end
将此目录lib/facter/
放在您的模块中,然后在清单中将其引用为$::phpversion