puppet ruby​​错误的参数个数(1为0)

时间:2015-06-24 07:43:55

标签: ruby puppet

首先,我知道有很多关于这个错误的问题,而且我已经检查了所有这些问题,但是我的解决方案并没有使用任何解决方案。

我第一次使用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时,它只是认为它是一个文本字符串而不是一个函数(我预期,但无论如何都要尝试)。

非常感谢任何帮助。

1 个答案:

答案 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