1

我目前正在将大量 EC2 实例转换为一系列 puppet 脚本,然后使用 Vagrant 虚拟化设备以进行本地开发。

我一直坚持在 vagrant 中管理网络并将其映射到生产中。

首先我有这样的事情:

# Main Web Server
config.vm.define :app do |app_config|
    app_config.vm.host_name = "web1"
    app_config.vm.network :hostonly, "10.0.0.2"
    app_config.vm.box = "precise64"

    ...etc
        puppet.manifest_file = "persist/web.pp"
end 

# First DB server
config.vm.define :db1 do |db1_config|
    db1_config.vm.host_name = "db1"
    db1_config.vm.network :hostonly, "10.0.0.3"
    db1_config.vm.box = "precise64"
    ...etc
        puppet.manifest_file = "persist/db.pp"
end

etc.

然后在这种情况下,web.pp 和 db.pp 相当简单,它们只是设置了 python、uwsgi、nginx、mysql 等。

所以问题:我需要在里面例如puppet/modules/hosts/files/hosts必须指定如下内容:

10.0.0.3    db1.X.com
10.0.0.4    db2.X.com
etc.

在生产中,我们结合使用我们的站点 DNS 和 ec2 实例 DNS 记录(我无法将其放入主机)。通常,我们的 haproxy 主机具有公共 DNS 记录,并且它们在其配置中保存 EC2 名称(这使得无法使用主机文件)。

那么如何构建一个 puppet 和 vagrant 都可以导入和使用全局映射的文件,例如:

hosts = {
         web => 10.0.0.2,
         db1 => 10.0.0.3,
         db2 => 10.0.0.4,
}

例如,我可以从 puppet 模板中haproxy.cfg访问,也可以从 Vagrant 文件中访问,因此我也可以vm.network对其进行设置。

限制:

  • 不能只是 IP,必须是 IP 或 DNS 的符号名称
  • 不能使用 puppet master(不幸的是,这个不灵活)。
  • 虚拟化 DNS 服务器也似乎很混乱,所以 id 而不是。

另外,我对 ruby​​ 真的很陌生,如果您提供示例(这将是很棒的),请对其进行足够的描述,以便我能够通过 ruby​​ 文档找到自己的方式。

4

1 回答 1

0

2 个选项:

1)您可以让 vagrant 读取您从文件中显示的哈希(放置在它的目录、数据库等),然后使用该内容生成 Vagrantfile。Vagrant 的配置只是运行一些 ruby​​ 代码(我认为)如果没有

2) 让 shell 脚本生成 Vagrantfile 和/或 puppet 配置/静态文件。

实现细节是微不足道的。

于 2012-09-12T10:56:01.790 回答