我有一个功能,我试图在每次客户端运行时在我的puppetmaster上运行。它在puppetmaster本身上运行得很好,但由于以下错误导致代理在节点上运行失败:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: uninitialized constant Puppet::Parser::Functions::<my_module>
我不确定为什么。我通过config.ru在主服务器上启用了调试日志记录,但是我在日志中看到了相同的错误,没有更多有用的消息。
我可以采取哪些其他步骤进行调试?
更新 添加一些额外的细节。
Puppet社区,Foreman连接Puppetmaster在Apache2上运行Passenger / Rack
客户端和主服务器都在运行Puppet 3.7.5
客户端和主服务器都是Ubuntu 14.04
客户端和主人都使用Ruby 1.9.3p484(2013-11-22修订版43786)[x86_64-linux]
启用了Pluginsync
当作为puppetmaster的清单(它自己的客户端)的一部分运行时,自定义函数在puppetmaster上运行正常,或者直接在服务器上使用puppet。
该功能存在于客户端上,当我更新以进行调试时,我确实看到该文件出现在客户端。
我不能在此处粘贴函数,因为它是专有代码。它确实依赖于aws-sdk,但我已经验证了ruby gem在客户端和主端都存在,两个地方都有相同的版本。我甚至试过围绕整个功能:
begin
rescue LoadError
end
并得到相同的结果。
答案 0 :(得分:2)
这是令人尴尬的愚蠢,但事实证明我以某种方式从未注意到我实际上并没有在我的函数中包含这一行:
require 'aws-sdk'
所以我收到的错误是:
uninitialized constant Puppet::Parser::Functions::Aws
实际上是指缺少AWS SDK,而不是puppet模块本身的问题(这也是令人困惑的名称为aws),这就是我解释它的方式。基本上,我在一次痛苦的愚蠢错误中将头撞在墙上好几天。向所有试图帮助我的人道歉:)