介绍:
我们使用 puppet 通过自定义事实配置节点,然后在 hiera 中引用该事实。事实可以驻留在 /etc/facter/fact.d/ 中的黄金映像中,也可以通过 pluginsync 驻留(没有区别,都测试过了)
版本:
dpkg -l|grep puppet
hi facter 1.7.5-1puppetlabs1 amd64 Ruby module for collecting simple facts about a host operating system
hi hiera 1.3.4-1puppetlabs1 all A simple pluggable Hierarchical Database.
hi puppet 3.4.3-1puppetlabs1 all Centralized configuration management - agent startup and compatibility scripts
hi puppet-common 3.4.3-1puppetlabs1 all Centralized configuration management
设置很简单:
木偶大师:
cat hiera.yaml
:hierarchy:
- "aws/%{::aws_cluster}"
/etc/puppet/hieradata/aws/web.json
EC2 节点:
cat /etc/facter/facts.d/ec_cluster.sh
echo 'aws_cluster=web'
因此,有了这个包含事实 aws_cluster 的黄金 ec2 映像。这在 hiera 中被引用,并指定要制作的类和配置。
问题:
当我们启动实例并启用自动签名时,第一次运行将不会在客户端出现 $aws_cluster。因此它将失败(这是有道理的),并显示
puppet-agent[2163]: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find data item classes in any Hiera data file and no default supplied at /etc/puppet/manifests/site.pp:33 on node ip-172-31-35-221.eu-west-1.compute.internal
当 Puppet 代理重新启动时,一切都按预期运行。对此有什么提示吗?
我们的猜测是:
- 这和证书生成有关系吗?
- 第一次运行会发生什么?
- 如果我们手动 /etc/init.d/puppet start 来启动它和通过 init 来启动它有什么不同吗?
更新:
当尝试重新启动 /etc/rc.local 时,它也会失败。因此,交互式运行和非交互式运行之间必须有所区别。是否有必须设置的特殊环境变量?
答案1
抱歉,各位,我们走错了路。
在进一步调试和记录 facter -p 中 rc.local 的输出后,我们发现我们的外部事实需要 aws 凭证才能成功运行脚本。当您以 root 身份登录时,会自动获取该凭证,但在启动时运行它时则不会获取该凭证。
因此,导出 aws 凭证的环境参数解决了这个问题。
计划键值对不起作用的信息一定是在调试时出错了。抱歉
tl;dr:这不是一个 puppet 错误/问题