我正在尝试创建自己的函数。我一直收到此消息。
错误:无法从远程服务器检索目录:服务器上出现错误 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
也试过了。我该如何解决这个问题?
答案1
当您更改任何自定义 ruby 代码(例如自定义函数)时,必须重新启动 Puppetmaster。如果您在 Passenger 下运行 Puppet,则意味着重新启动 Apache。否则,您将获得旧版本。
此外,如果您在 puppetmaster 中托管多个环境,而另一个环境中的函数名称相同,则会出现一个相当严重的错误。在这种情况下,当您调用函数名称时,您无法确定使用的是哪个环境的函数!它在所有环境中使用相同的函数命名空间……(已确认这发生在 Puppet 2.7.22 中,不确定 3.x 是否如此)
答案2
正如文档所述:
Puppet Master 会缓存自定义函数。如果您编辑现有函数(例如,在开发函数时),则需要重新启动 Puppet Master 才能使用新版本。
https://puppet.com/docs/puppet/latest/writing_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