使用Vagrant来管理开发和生产环境?

jcr*_*hto 14 puppet vagrant

人们如何处理具有流浪者的dev/prod环境的简单自动化(使用puppet)(理想情况下来自同一个vagrantfile)?

我试图解决的用例

  • 如果没有创建,我会喜欢用vagrant旋转生产机器.
  • 如果他们在我的开发环境的puppet文件中进行了调整,我很乐意用vagrant重新加载nginx或apache confs.

问题

当您使用AWS或Digital Ocean等提供商调用vagrant时,它将成为活动提供者,您无法切换.你收到这个错误:

找到了与不同提供商的活动计算机.Vagrant目前允许每台机器一次只有一个提供商.未来版本将删除此限制.在此之前,请使用新的提供商销毁现有机器.

它似乎是破坏它的答案,但我只需要切换.我不想破坏.

我很乐意能说

vagrant up prod
Run Code Online (Sandbox Code Playgroud)

要么

vagrant reload prod
Run Code Online (Sandbox Code Playgroud)

然后一个简单的流浪汉将回落到默认机器.

这种语法类似于多台机器的工作方式,但是当我只调用vagrant up时,我不想启动开发和生产环境(这是默认行为).

作为工作流程的一部分,我应该关注打包机吗?我在2013年的puppetconf上观看了Mitchell关于Multi-Provider的演讲http://puppetlabs.com/presentations/multi-provider-vagrant-aws-vmware-and-more

我仍然没有看到我的问题的解决方案.


更新9/27/13

如果其他人正在反对这个想法,这篇文章清理了我的很多问题. http://pretengineer.com/post/packer-vagrant-infra

Ste*_*son 1

这不是一个理想的解决方案,但是使用 git 分支怎么样?我的想法是,它在概念上可能类似于使用 heroku,您可能有一个主版本、临时版本和生产版本(因为它们通常是不同的遥控器)。

在这种情况下,您可以从 prod 分支开始,对 Vagrantfile 进行少量编辑,以稍微不同的方式命名虚拟机。然后,您应该能够在发生时将 dev 的所有更改与 prod 分支合并。所以你的工作流程将如下所示:

$ git checkout prod
$ vagrant up
$ git checkout master
...  make changes to puppet ...
$ git checkout prod
$ git merge master
$ vagrant reload
$ git checkout master
Run Code Online (Sandbox Code Playgroud)

您可以编写脚本并为其添加别名,这样您最终会得到

$ start_production
$ reload_production
Run Code Online (Sandbox Code Playgroud)