![Puppet $facts 内置变量未定义](https://linux22.com/image/788295/Puppet%20%24facts%20%E5%86%85%E7%BD%AE%E5%8F%98%E9%87%8F%E6%9C%AA%E5%AE%9A%E4%B9%89.png)
我在 pi 上运行 puppet 代理时遇到了问题。它运行的模块与许多其他模块相同,只有这一个出现了这个问题,所以不管是什么问题,它一定是非常具体的。
我的问题是,我不知道从哪里开始寻找它。运行时,puppet 抛出以下错误:
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Operator '[]' is not applicable to an Undef Value. at <manifest>:75:6
它所指的行如下所示:
if $facts['os']['distro']['description'] =~ /^Ubuntu 20/ {
它指向的列是$facts开头的$。
我对 factor 非常不熟悉,这段代码是由目前正在度假的其他人编写的。但它似乎在其他地方都能正常工作……这引发了几个我无法找到答案的问题:
- 第一,它如何可能的内置变量未定义?如果抱怨找不到密钥之类的,我可以理解,但显然多变的本身是未定义的。怎么会这样呢?
- 二、根据错误信息来看,这是一个服务器错误。如前所述,我不熟悉 facter,谷歌搜索和阅读也没有最终回答这个问题。puppet 是否会将有关节点的事实发送到服务器,并在服务器上对其进行评估?因为直觉上我预计这会发生在节点上,因为事实实际上是相关的。但它说错误来自服务器。所以显然服务器不知道变量,但是仅有的对于这个节点?我目前无法理解这是如何工作的。如果事实存储在服务器上,有人能告诉我在哪里,以及如何重新发送它们吗?
- 三,有没有办法强制 facter 重新生成事实?我记得在安装 puppet 代理时会进行一些事实生成,或者我可能误解了。无论如何,如果发生了这种情况,我如何在不重新安装 puppet 的情况下按需触发它?