我正在努力做出自己的function。 我不断收到这个消息。
err:无法从远程服务器检索目录:SERVER上的错误400:函数“brent_k”在节点XYZ.com上的/etc/puppet/modules/munin/manifests/init.pp:17中未返回值
这是我简单的代码
xyz.com:/etc/puppet/modules/munin/lib/puppet/parser/functions# cat brent_k.rb module Puppet::Parser::Functions newfunction(:brent_k, :type => :rvalue) do |args| val = 'ok' val end end
然后在我的清单中,我有
$a = brent_k()
我也尝试过return val 。 我怎样才能解决这个问题?
当您更改任何自定义ruby代码(如自定义函数)时,您必须重新启动Puppetmaster。 如果你在乘客下运行木偶,这意味着重新启动Apache。 否则,你会得到旧版本。
另外,如果你在其他环境中使用相同命名的函数在你的木偶大师中托pipe多个环境,则会出现一个相当恶劣的错误。 在这种情况下,当您调用函数名称时,您无法确定使用哪个环境的函数! 它在所有环境中使用相同的函数名称空间…(这被证实发生在Puppet 2.7.22,不确定关于3.x)
正如文档所述:
木偶大师高速caching自定义function。 如果你编辑一个已经存在的函数(例如在你开发它的时候),你需要在使用新版本之前重新启动puppet master。
https://docs.puppetlabs.com/guides/custom_functions.html
有关重新启动Puppet master的注意事项:
如果执行以下命令重新启动Puppet master:
$ service puppetmaster restart Restarting puppet master puppetmaster not configured to start, please edit /etc/default/puppetmaster to enable .
您会注意到服务停止但不启动。
在这种情况下,正如Steve Shipway所提到的,您可能正在Passenger下运行Puppet master,而您需要重新加载apache2才能重新启动Puppet master:
$ service apache2 reload