![为什么 Puppet 会切换环境然后又切换回来?](https://linux22.com/image/789255/%E4%B8%BA%E4%BB%80%E4%B9%88%20Puppet%20%E4%BC%9A%E5%88%87%E6%8D%A2%E7%8E%AF%E5%A2%83%E7%84%B6%E5%90%8E%E5%8F%88%E5%88%87%E6%8D%A2%E5%9B%9E%E6%9D%A5%EF%BC%9F.png)
这是 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
我理解原始本地环境“production”可以来自 /etc/puppet/puppet.conf,或者如果该文件中未指定环境,则为默认环境。在本例中是后者(未在本地指定环境)。
在 Foreman(此 Puppet 安装的 ENC 或外部节点分类器)中为此主机设置了节点环境“开发”,并且是所需的正确环境分配。
环境“测试”是 Foreman 当前为我们所有主机广泛而普遍地设置的环境,也是在我通过 Foreman UI 将其更改为“开发”之前该特定主机所处的环境。(换句话说,“测试”实际上是我们的生产环境;此时未使用称为“生产”的环境。)
我尝试查阅 Foreman 文档,但没有找到任何有关环境分配如何工作的基础知识;文档只是对 UI 的介绍,这对于故障排除没有帮助。
可能相关,这里还有另一个奇怪之处,即 servername.example.com 出现两次在 Foreman 的 UI 中。
力量 | 姓名 | 操作系统 | Puppet 环境 | 模型 | 主機群 | 上次报告 | 操作 |
---|---|---|---|---|---|---|---|
[纺车] | 服务器名称 | Debian [版本] | 发展 | [刀片服务器名称] | 主机组名 | [空白的] | [编辑按钮] |
[电源图标,灰色] | 服务器名称 | Debian [版本] | 测试 | 标准 PC [版本信息] | [空白的] | 6 分钟前 | [编辑按钮] |
如果我尝试通过单击“编辑”按钮来编辑任一条目的环境,当我单击“提交”时,我会在“名称”字段旁边以红色显示“已被占用”,就好像我试图创建一个新的主机条目一样。
但是,如果我从列表视图中选择带有左侧复选框的主机,然后转到顶部并选择“选择操作”->“更改环境”,那么它出现工作。然后,两个条目在 UI 中都显示“development”。但下一次在 servername 上运行 Puppet 将产生此帖子顶部所示的输出,然后刷新 Foreman UI 将再次显示一个带有“development”的条目和一个带有“test”的条目。
这可能是什么原因造成的?如何将主机分配给环境并使其保留下来?
答案1
我解决了这个问题。
我们的 Puppet 设置有一些特殊之处,即在某个地方仍然存在一些 Puppet 3 配置的残留 — 不确定具体在哪里,但列表中将恢复为“测试”的服务器条目也将其 Puppet Master 显示为旧的 Puppet 服务器。该 Puppet 服务器不再存在,但新的 Foreman 服务器也使用这个名称。有点复杂,我不完全理解这两个不同的条目从何而来,但我通过以下方式修复了不稳定的环境分配:
- 删除 Foreman UI 中的两个主机条目(确保仔细阅读确认消息并确保这不会删除主机或磁盘,并且确认中仅列出两个预期的主机条目)。
- 在 puppet 服务器上(即在命令行上登录 Foreman 服务器),运行
puppet cert clean servername.example.com
- 在 servername.example.com 上,删除目录
/var/lib/puppet/ssl/
(我使用过的find /var/lib/puppet/ssl/ -delete
,虽然rm -rf /var/lib/puppet/ssl/
效果一样好。) - 在 servername.example.com 上,编辑文件以在标题下
/etc/puppet/puppet.conf
进行设置。environment = development
[agent]
- 使用 在 servername.example.com 上重新运行 puppet
puppet agent -tv
。
这正确地应用了来自开发环境的代码,并且没有任何关于不匹配环境的警告,并且 Foreman UI 现在只显示该服务器的一个条目,并正确地说明其环境为development
。