使用 Vagrant + Docker 在本地开发 Puppet

Posted

技术标签:

【中文标题】使用 Vagrant + Docker 在本地开发 Puppet【英文标题】:Developing Puppet locally using Vagrant + Docker 【发布时间】:2017-12-08 07:48:56 【问题描述】:

我正在尝试制定一种在本地开发傀儡角色和个人资料的策略。理想情况下,我想要一个自包含的 git 存储库,其中包含支持 master 所需的一切以及可以应用和验证正在开发的角色的测试节点。

我目前的解决方案是使用 docker-compose 到launch a local puppet master。这会将我的开发机器上的本地代码文件夹映射到主容器上的 /etc/puppet/code 卷。对于测试节点部分,我想我可以将 vagrant 与 puppet 供应商一起使用。我选择 vagrant(而不是只运行 docker 代理映像)的原因是我的一些角色适用于 windows 机器。这似乎是同时支持 windows 和 linux puppet 角色的最佳选择。

我目前的挣扎是弄清楚如何桥接两个虚拟网络(从 docker 到 vagrant)。我可以通过将 puppet master 端口 (8140) 导出到主机然后将我的 vagrant provisioner 指向主机来伪装它。这种方法的问题是我必须使用分配给流浪客人(对应于主机)的网关 IP,而且我不确定解决方案在我的团队中是否会稳定。

我正在寻找关于...的建议

这看起来是一种可行/正确的方法来实现我的目标吗? 如何干净利落地结合这两种解决方案(docker + vagrant) 我是否错过了一些已经解决此问题的现有标准做法?

这里是the github repo,我目前的工作。如有任何建议,请随时提交 PR。

【问题讨论】:

为什么要在这种情况下使用 Docker?另外,为什么不使用 RSpec 和 Beaker / Test Kitchen / Serverspec 为角色和模块编写测试呢?这些库已经存在,可以帮助本地开发 Puppet 模块并在 VM 中测试它们。对于 Serverspec,如果您想在容器而不是 VM 中运行测试,则可以使用 Docker 提供程序。 这不仅仅是单元测试。我一般都在为 puppet 接受 CI/CD 模型而苦苦挣扎。我们的商店目前在绑定到单个 git 存储库的单个 puppet master 上进行 puppet 开发。 git repo 中有一些分支映射到 master 上的环境,但它们仍在部署到我们的“生产”master。不喜欢,感觉不对。我想像对待应用程序一样对待我的 puppet 开发。在将其投入生产之前,将其部署到单独的环境中进行验证。单元测试绝对是其中的一部分,但不是整个解决方案。 好的,您的问题目前的形式相当广泛。可能有很多方法可以回答这个问题。您可能会尝试澄清并可能集中在您正在努力解决的特定问题上。 【参考方案1】:

您所考虑的一个可行的解决方案。有很多方法可以完成这项工作,但由于您询问其他方式,我直接使用 puppet apply 和 Docker 完成了这项工作。我写了一篇关于它的旧 wiki 帖子 here,当时我正在使用 Puppet 4,所以它仍然非常相关。

基本上你要做的是制作一个独立的测试仓库,运行 r10k,然后将它们安装到一个临时机器上。

制作一个研讨会回购(我提供了一个sample) 给它一个基础分支(我选择production,因为这是一个已知的 木偶默认)。 创建一个新分支以提交您的角色和配置文件以测试模块。 调整site.pp 中的default 目标以包含该角色。 运行r10k deploy environment -pv 并将r10k.yaml 设置为该研讨会回购。 为什么?这样,您可以确保所有模块在 Puppetfile 被拉走,你的工作室看起来和任何东西都差不多 您想使用的测试环境。 使用 Puppet 工具包拉取 Docker 容器 我做了一个旧的,Puppetlabs 维护一个官方的,你可以自己做,没关系 将展开的目录绑定到其中,给它一个puppet apply /etc/puppet/code/environments/[branch]/manifests/site.pp,看看会发生什么。

因为您对使用 Vagrant 感兴趣,您可能只需让 Vagrant 映像执行 r10k deploy 并运行 Docker 命令一体化。这将为您提供完整的按钮设置。

如前所述,有很多方法可以完成这项工作,但这是过去对我有用的方法。有时,以交互方式查看这些内容比围绕 Beaker/Kitchen/serverspec 进行编码要容易得多。

【讨论】:

以上是关于使用 Vagrant + Docker 在本地开发 Puppet的主要内容,如果未能解决你的问题,请参考以下文章

使用Vagrant搭建本地python开发环境

vagrant+docker:开发环境快速搭建

vagrant部署开发环境,爽的不是一点点

vagrant部署开发环境(windows环境)

我应该使用 Vagrant 还是 Docker 来创建隔离环境? [关闭]

无法从Vagrant访问Google Cloud SDK for Python的本地开发服务器