第一次运行傀儡时没有外部事实

第一次运行傀儡时没有外部事实

介绍:

我们使用 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 错误/问题

相关内容