共享和自动流浪盒

时间:2012-01-11 17:43:09

标签: automation vagrant

我正在考虑使用Vagrant开发Django应用程序,但我有点困惑,我不确定我想做什么甚至可能。

我成功安装了lucid32盒并创建了一个新的“vagrant”实例,包括Vagrantfile,一些共享目录和转发端口。

  • 第一个问题是,在团队中工作时,这似乎不是我的最佳选择。我们如何(例如我和其他10位开发人员)共享这个盒子,以便共享它的每个变化?例如,如果在6个月内我们需要postgresql,我需要让它工作而不必安装postgresql 11次。

  • 另外,如何在启动框时启动(例如:postgresql,django,this-service等)?我不认为我必须ssh它,并且每次都需要手动启动n次我需要的所有n项内容。

  • 最后:如果木偶和厨师之类的东西完全取代手工安装(例如通过pip或apt-get),我不太清楚。是这样吗?

谢谢。
我很抱歉英语不好。 : - )

1 个答案:

答案 0 :(得分:13)

我想说你选择的Vagrant已经是你正在寻找的一个良好的开端,但现在你需要深入挖掘Chef或Puppet,以进一步自动化你的配置过程。

我想你们场景中的一个很好的选择就是首先将Vagrantfile和相应的Puppet清单作为项目的一部分置于版本控制之下。此外,有关此计算机的所有配置也应放入版本控制和/或通过某种工件存储库提供。

其次,如果团队中的规则发生变化(至少应该存在更长时间的那些),那么如果他们被认为已经为其他团队成员做好准备,则需要签入该规则。

关于你的第二个问题并回到我的开场白:Puppet(我喜欢)或者厨师是你的首选工具,将来可以为你和你的同事节省很多工作。我会坚持Puppet,因为我不太了解Chef。

使用puppet,您可以管理所需的所有内容,安装软件包,更改配置以及确保某些服务正在运行,或者通常系统具有您希望的状态。更好的是,如果你或其他团队成员对他/她的盒子做了一些恶意攻击,你可以回滚你的Vagrantfile / Puppet清单中的更改,输入

vagrant destroy && vagrant up

,该框很容易恢复到最后一个版本状态。

例如,请使用以下清单文件:

package { "mysql-server-5.1":
  ensure => present
}

file { "/etc/mysql/my.cnf":
  owner => "root",
  content => "http://myrepository.local/myProject/configurations/mysql/my.cnf",
  require => Package["mysql-server-5.1"]
}

service { "mysql":
  ensure => running,
  subscribe => File["/etc/mysql/my.cnf"],
  require => File["/etc/mysql/my.cnf"]
}

这样做,首先检查你的盒子中的操作系统的包机制(示例中的名称假定最近的Ubuntu)如果安装了包“mysql-server-5.1”,如果不安装它安装它。通过'require'属性,第二个指令将在第一个指令之后执行(并且只有在它工作的情况下执行),将MySQL配置更改为您已签入和/或发布到可以到达的地方(也可能是放入与Vagrantfile相同的文件夹中,然后在/ vagrant下的框中可用。最后一步,只有在配置更改工作时才会执行,将确保“mysql”服务启动并运行,或者如果配置发生更改时已经运行,则会重新启动。

现在您可以在Vagrantfile中连接此清单:

Vagrant::Config.run do |config|

  config.vm.box = "lucid32"
  config.vm.box_url = "http://files.vagrantup.com/lucid32.box"

  config.vm.define "node1" do |cfg|
    cfg.vm.network "10.23.5.11"
    cfg.vm.provision :puppet do |puppet|
      puppet.manifests_path = "manifests"
      puppet.manifest_file = "node1.pp"
    end
  end
end

除了对这样的环境进行“尝试填充”之外的所有更改,所有团队成员都可以保证轻松地使用相同的设置,并且只需触手可及就可以重现。

我个人喜欢手动尝试这些东西,当我找到正确的设置和配置时,将其翻译成Puppet清单,以备日后使用并与团队成员共享。

由于Puppet(和Chef也可以)管理几乎所有你需要的东西(用户,cron作业,包,服务,文件......),对于这些问题来说它是一个很好的选择,你甚至可以受益如果您愿意,以后可以使用这些配置来配置登台或测试环境。对于Puppet来说,它们是更多的选择,阅读the language guide应该会让你更好地了解它可以用它做什么。

希望我能提供帮助:)