使用 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的主要内容,如果未能解决你的问题,请参考以下文章