【问题标题】:vagrant manage hosts dhcpvagrant 管理主机 dhcp
【发布时间】:2015-10-09 11:30:08
【问题描述】:

我想在每次运行 vagrant up / vagrant destroy 时根据项目的目录名和 VM 的 IP 地址自动在我的 /etc/hosts 文件中添加/删除条目别名。有一些插件可以做到这一点,但不支持 dhcp。

我正在使用machine_name = File.basename(File.expand_path('..', Dir.pwd)) + '.local' 构建目录名。

我缺少的另一个难题是如何在 Vagrantfile 中获取 VM 的 dhcp 分配的 IP 地址并更新主机上的 /etc/hosts 文件。

我的目标是在不编辑 Vagrantfile 和 /etc/hosts 中的名称和/或 IP 的情况下启动 VM。

我正在使用 Vagrant 1.7.4、VirtualBox 5.x 和 Puppet 4.2。

有什么想法吗?

【问题讨论】:

  • 你说你看过插件但你看过vagrant dns它对我使用dhcp有用
  • vagrant dns 是否支持 dhcp?查看文档,它似乎没有

标签: ruby vagrant virtualbox puppet vagrantfile


【解决方案1】:

我已经安装了vagrant-hostmanager,它有一个非常有用的config.hostmanager.ip_resolver 选项。

将以下代码添加到您的Vagrantfile 以确保在您运行vagrant up 命令时更新您的/etc/hosts 文件:

config.vm.hostname = "add-name-here"

unless Vagrant.has_plugin?('vagrant-hostmanager')
    raise 'vagrant-hostmanager is not installed!'
else
    config.hostmanager.enabled = true
    config.hostmanager.manage_host = true
    config.hostmanager.ignore_private_ip = false
    config.hostmanager.include_offline = true
    config.hostmanager.ip_resolver = proc do |vm, resolving_vm|
        if hostname = (vm.ssh_info && vm.ssh_info[:host])
            `vagrant ssh -c "hostname -I"`.split()[1]
        end
    end
end

致谢:https://github.com/smdahlen/vagrant-hostmanager/issues/86#issuecomment-107052823

【讨论】:

    【解决方案2】:

    你应该能够做到这一点。

    还记得 vagrant 文件是 ruby​​ 吗?编写一个设置 /etc/hosts 的配置 shell 脚本,并将其作为 arg 传递到 Vagrant 文件中的文件位置(有点像上面的 File.exapand)。

    这样,当 vagrant 运行脚本时,它会生成参数,并且配置脚本会拾取并使用它。

    供参考:https://docs.vagrantup.com/v2/provisioning/shell.html

    【讨论】:

    • 您能详细说明一下吗?这是我要去的方法。另外,我已经在使用 puppet 作为配置器。我可以在同一个 Vagrantfile 中使用两个配置器吗?
    • 您可以使用多个供应商。重新阅读您的问题,我现在看到您想更改父级(即主机)/etc/hosts 而不是 vm 。
    【解决方案3】:

    您应该能够为此目的使用vagrant-dns,它看起来可以完成您想要实现的大部分目标(尽管正如 Mircea 所说,几乎所有事情都可以通过脚本完成)

    文档给出了一个使用专用网络的示例,但您也可以使用以下配置

      config.vm.box = "ubuntu-12.04"
    
      config.dns.tld = "dev"
      config.vm.hostname = "test-machine"
    
      config.vm.network "public_network"
      config.vm.network "forwarded_port", guest: 80, host: 8080
    

    安装 vagrant-dns(运行 vagrant dns --install)后,您将能够通过 www.test-machine.dev:8080 访问您的机器

    【讨论】:

    • 无法使用config.vm.network "private_network", type: "dhcp" .. 有什么建议吗?
    • 好的,它适用于具有固定 IP 的 private_network 或 public_network 但不适用于私有 dhcp。好吧,这个插件是开源的,所以你可以尝试挂钩它以使其工作
    • @Radu,插件似乎确实缺少某些东西,我发送了pull request 并且能够使其在本地工作,您可以在本地查看并应用它,或者如果插件所有者等待合并将发布带有此修复程序的新版本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多