自己的木偶function

我正在努力做出自己的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