运行 puppet 代理时,第一个 puppet 代理运行失败,但第二个运行成功。
-我们使用 ENC,它导出环境。看起来 ENC 要么是在失败后被调用的,要么由于某种原因 ENC 提供的“环境”变量没有立即使用。
-我们使用在 master 的 puppet conf 中定义的环境:[toas_v4_0] modulepath = /etc/puppet/modules/toas/4.0:/etc/puppet/modules/teco/1.4:/etc/puppet/modules/cis:/etc/puppet/modules/external_modules/toas/4.0:/etc/puppet/modules/
-每个环境都有自己的模块路径
-如果有问题的节点(concat)位于默认模块搜索路径(/etc/puppet/modules)中,则问题消失,但当模块位于特定于环境的模块路径中时,问题就会出现
-Puppet 3.8.6 (主控和代理)
-错误:无法从远程服务器检索目录:服务器上的错误 400:$concat_basedir 未定义。请尝试在节点的“/etc/puppet/puppet.conf”的 [master] 和/或 [main] 部分上使用 pluginsync=true 再次运行。位于节点 10881-sco-10-0-222-53 上的 /etc/puppet/modules/external_modules/toas/4.0/co ncat/manifests/setup.pp:22
-上述错误中的 concat_basedir 是来自 concat 的事实。如果事实不存在,Puppet Master 将无法编译目录,这种情况在第一次运行时发生 -> 插件不在正确的时刻出现在节点上。
如何正确摆脱此问题,以及为什么第二次运行顺利?这是 Puppet Master 的一个错误吗?
答案1
使用 --environment 参数运行 puppet 代理是一种解决方法。该参数值在 ENC 提供环境变量之前用于目录编译,从而避免环境混淆。应注意 ENC 提供的环境和提供给 --environment 参数的值是相同的。