这是 Puppet 5.5.22 和 Foreman 1.22.0-develop 的情况。我知道这是一个过时的 Foreman 和 Puppet 安装,但在我用新版本替换它们(即将推出的项目)之前,它们是我必须处理的。
# puppet agent -tv
Notice: Local environment: 'production' doesn't match server specified node environment 'development', switching agent to 'development'.
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Loading facts
Notice: Local environment: 'development' doesn't match server specified environment 'test', restarting agent run with environment 'test'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Retrieving locales
Info: Loading facts
Info: Caching catalog for servername.example.com
Info: Applying configuration version '1694623566'
Notice: Applied catalog in 12.93 seconds
据我了解,原始本地环境“生产”可以来自 /etc/puppet/puppet.conf,或者如果该文件中未指定环境,则为默认环境。在本例中是后者(本地未指定环境)。
节点环境“开发”是在 Foreman 中为此主机设置的(ENC 或此 Puppet 安装的外部节点分类器),并且是所需的正确环境分配。
“测试”环境是 Foreman 目前为我们所有主机广泛设置的环境,也是我通过 Foreman UI 将其更改为“开发”之前该特定主机所在的环境。(换句话说,“测试”实际上是我们的生产环境;名为“生产”的环境此时尚未使用。)
我尝试查阅 Foreman 文档,但没有找到任何有关环境分配工作原理的信息;该文档只是浏览一下 UI,这对故障排除没有帮助。
可能相关的是,这里还有另一个奇怪的地方,即 servername.example.com 在 Foreman 的 UI 中出现两次。
力量 | 姓名 | 操作系统 | 木偶环境 | 模型 | 主持人组 | 上次报告 | 行动 |
---|---|---|---|---|---|---|---|
[旋转的轮子] | 服务器名称 | Debian [版本] | 发展 | [刀片服务器名称] | 主机组名 | [空白的] | [编辑按钮] |
[电源图标,灰色] | 服务器名称 | Debian [版本] | 测试 | 标准PC [版本信息] | [空白的] | 6 分钟前 | [编辑按钮] |
如果我尝试通过单击“编辑”按钮来编辑任一条目的环境,那么当我单击“提交”时,我会在“名称”字段旁边以红色显示“已被采用”,就像我试图创建一样一个新的主机条目。
但是,如果我从列表视图中选择左侧带有复选框的主机,然后转到顶部并选择“选择操作”->“更改环境”,那么它似乎可以工作。这两个条目都会在 UI 中显示“开发”。但在 servername 上运行的下一个 Puppet 将产生本文顶部所示的输出,然后刷新 Foreman UI 将再次显示一个带有“development”的条目和一个带有“test”的条目。
可能是什么原因造成的?如何将主机分配给环境并使其保留?
我解决了这个问题。
我们的 Puppet 设置有一些特殊之处,因为在某处仍然存在一些挥之不去的 Puppet 3 配置残留 - 不确定具体位置,但列表中的服务器条目将自身恢复为“测试”,也将其 Puppet Master 显示为旧的傀儡服务器。该 puppet 服务器不再存在,但新的 foreman 服务器也具有该名称。有点复杂,我不完全理解两个不同条目的来源,但我通过以下方式修复了抖动环境分配:
puppet cert clean servername.example.com
/var/lib/puppet/ssl/
(find /var/lib/puppet/ssl/ -delete
尽管我使用过rm -rf /var/lib/puppet/ssl/
也可以。)/etc/puppet/puppet.conf
设置的文件。environment = development
[agent]
puppet agent -tv
.这正确地应用了开发环境中的代码,并且没有任何关于不匹配环境的警告,并且 Foreman UI 现在仅显示该服务器的一个条目,并正确地将其环境声明为
development
.