在没有对 puppet 配置进行任何突然更改的情况下,我们的一些主机在创建导出的 SSH 密钥时开始出现“无法评估:字段‘key’是必需的”错误,但有趣的是,并非所有 SSH 密钥在所有主机上都会失败,这里有一个密钥创建成功和创建失败的例子:
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for srvadx-green-7zhg.c.example.internal
Info: Applying configuration version '1511609586'
Notice: /Stage[main]/Basics::Ssh/Sshkey[srvadx-green-w5ld]/ensure: created
Info: Computing checksum on file /etc/ssh/ssh_known_hosts
Info: FileBucket got a duplicate file {md5}17787ff909a06cf0243c18cf33f1c384
Error: /Stage[main]/Basics::Ssh/Sshkey[srvadx-green-w5ld]: Could not evaluate: Field 'key' is required
Notice: /Stage[main]/Basics::Ssh/Sshkey[srvadx-green-88kp]/ensure: created
Error: /Stage[main]/Basics::Ssh/Sshkey[srvadx-green-88kp]: Could not evaluate: Field 'key' is required
Notice: /Stage[main]/Basics::Java/Exec[set-licence-selected]/returns: executed successfully
Notice: /Stage[main]/Basics::Java/Exec[set-licence-seen]/returns: executed successfully
Notice: Finished catalog run in 1.98 seconds
首先我怀疑 HSQLDB 损坏了,于是删除了整个 puppetdb 数据目录并在所有主机上重新运行 puppet。一开始看起来很有希望,但很快上述错误又出现了。
如何调试甚至更好地解决问题以及如何防止将来再次发生?
答案1
为了帮助调试/了解发生了什么,您至少可以做三件事:
- 在调试模式下运行代理: puppet agent -tv --debug 。这有点像消防水管,但可能那里有一些线索(这有点牵强——问题可能出在服务器上
- 查看 puppetmaster/server 日志;我建议在问题节点上运行代理时跟踪它们,这样您就可以确保看到这些运行的输出。那里很可能有线索(服务器会发出大量关于代理上看不到的不太正确的事情的警告)
- 深入研究 HSQLDB 数据库;表中应该有一些与各种 ssh 密钥相关的行。查看那里有什么信息,特别是如果有些有效而有些无效(比较行)。
答案2
最后,通过删除 PuppetDB 数据目录并在所有节点上重新运行 puppet,它终于起作用了。我怀疑是某些 HSQLDB 文件损坏了。