【问题标题】:How to share a hosts file between vagrant and puppet如何在 vagrant 和 puppet 之间共享主机文件
【发布时间】:2012-09-12 18:56:01
【问题描述】:

我目前正在将大量 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 服务器似乎也很混乱,所以应该不是。

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

【问题讨论】:

    标签: ruby virtualbox puppet vagrant


    【解决方案1】:

    2 个选项:

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

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

    实现细节很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 2015-03-03
      • 2018-11-29
      相关资源
      最近更新 更多