2012-08-10 89 views
1

我目前正在将大量EC2实例转换为一系列puppet脚本,然后使用Vagrant虚拟化本地开发的钻井平台。如何在流浪者和傀儡之间共享hosts文件

我已经陷入了管理流浪者的网络并将其映射到生产上。

首先,我有这样的事情:

# 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

然后是相当简单的,他们只是建立蟒蛇,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名称(这使得不能使用主机文件)。

那么,如何可以建立两个傀儡,流浪汉可以导入和使用全局映射,如文件:

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

,我可以从例如haproxy.cfg木偶模板中访问,但也从内流浪访问文件,所以我可以设置vm.network

限制:

  • 不能是IP而已,一定是象征性的名称或者IP或者DNS
  • 不能用一个木偶大师(不幸的是在这一个不灵活)。
  • 将DNS服务器虚拟化似乎也很麻烦,所以id不是。

而且我真的红宝石,如果你提供的例子(这将是巨大的),请形容它足以让我能够通过红宝石文档找到我的路。

回答

0

2个选项:

1) 您可以阅读流浪者,你从一个文件中(放在它的目录,DB,等等),然后使用这些内容产生Vagrantfile所示的哈希值。流浪的配置只是运行一些红宝石代码(我认为)如果不是

2) 有一个shell脚本生成Vagrantfile和/或puppet config/static文件。

实现细节很简单。

相关问题