为什么 Puppet 会切换环境然后又切换回来?

为什么 Puppet 会切换环境然后又切换回来?

这是 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 服务器也使用这个名称。有点复杂,我不完全理解这两个不同的条目从何而来,但我通过以下方式修复了不稳定的环境分配:

  1. 删除 Foreman UI 中的两个主机条目(确保仔细阅读确认消息并确保这不会删除主机或磁盘,并且确认中仅列出两个预期的主机条目)。
  2. 在 puppet 服务器上(即在命令行上登录 Foreman 服务器),运行puppet cert clean servername.example.com
  3. 在 servername.example.com 上,删除目录/var/lib/puppet/ssl/(我使用过的find /var/lib/puppet/ssl/ -delete,虽然rm -rf /var/lib/puppet/ssl/效果一样好。)
  4. 在 servername.example.com 上,编辑文件以在标题下/etc/puppet/puppet.conf进行设置。environment = development[agent]
  5. 使用 在 servername.example.com 上重新运行 puppet puppet agent -tv

这正确地应用了来自开发环境的代码,并且没有任何关于不匹配环境的警告,并且 Foreman UI 现在只显示该服务器的一个条目,并正确地说明其环境为development

相关内容