问题描述
我们正在使用 Puppet Enterprise,我对如何将特定节点移动到 Git 开发分支以进行 Puppet 代码配置感到困惑。
我们成功地将代码管理器用于生产分支,并且有几十个节点(在 repo 的 nodes.pp 文件中)表现良好。但是,我们一直在生产分支中进行所有更改,我想让我们摆脱这种“习惯”。相反,我希望我们创建一个命名的开发分支,在那里进行编辑,在一个或两个节点上试用它,然后将更改合并到生产中,并将其应用到所有其他节点。
我做了以下事情:
-
创建了一个名为 PortainerFix 的分支,并在那里进行了更改。
-
登录到我们的 PE 服务器并运行命令“puppet-code deploy PortainerFix --wait”。
-
登录到 PE Web 服务器并进入分类区域。我去了开发环境组(在所有环境下)并在固定节点列表下添加了dockerdev1001.foo.com。
然后我想我可以进入 PE Web 服务器上的 dockerdev1001.foo.com 节点并开始运行代理,选择特定环境 PortainerFix,这是下拉列表中的一个选项。
运行是“成功”,但实际上它没有应用我所做的分支更改。它似乎仍在使用生产分支。
我登录到节点本身。我看到的唯一环境是 /etc/puppetlabs/code/environments/production。如果我运行命令“puppet agent -t --environment=PortainerFix”,它会显示“信息:使用配置的环境‘PortainerFix’”,并成功返回,但同样,它不会将预期更改为主机。生产环境仍然是/etc/puppetlabs/code/environments中唯一的环境。
我做错了什么??我希望在节点上看到 /etc/puppetlabs/code/environments/PortainerFix,因为它确实应用了该配置。
解决方法
我已经找到了问题所在。如果对其他人有用,我将解释解决方案。事实证明,我上面的步骤工作正常,但我实施的代码更改却没有。
我有一个 Docker::services 调用:
docker::services { 'portainer':
create => true,service_name => 'portainer',image => 'portainer/portainer-ce:2.0.1',replicas => '1',publish => ['9000:9000','8000:8000'],mounts => ["type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock","type=bind,source=/portainer_data,target=/data",],env => ["AGENT_SECRET=myKey${env}-${hostname}"],extra_params => ['--network portainer_agent_network'],}
我将映像版本从 2.0.1 更改为 2.1.1。我原以为它会下载新映像并启动新容器,但它没有采取任何行动。所以我认为它没有正确抓住树枝。
但是,当我在 Docker 系统上手动删除 portainer 容器和映像时,然后运行 puppet,然后它正确地抓取了新的 portainer 版本并启动它就好了。所以,这是我们在利用 Puppet 管理 Docker 服务时需要注意的事情。
约翰