puppet ruby 参数数量错误(1 代表 0)

puppet ruby wrong number of arguments (1 for 0)

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

我是第一次使用 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"

我尝试在 do 语句后添加 |args| 并删除 :type 但它一直抛出相同的错误。当我使用 $phpversion = phpversion 时,它只是认为它是一个文本字符串而不是一个函数(这是我期望的,但无论如何都尝试过)。

如有任何帮助,我们将不胜感激。

如果您要获取 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