vagrant管理主机dhcp

时间:2015-10-09 11:30:09

标签: ruby vagrant virtualbox puppet vagrantfile

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

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

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

我的目标是在Vagrantfile和/ etc / hosts中编辑虚拟机而不编辑其名称和/或IP。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

你应该能够做到这一点。

请记住,流浪文件是红宝石?编写一个配置shell脚本,设置/ etc / hosts并将其作为文件位置传递给Vagrant文​​件中的arg(类似于上面的File.exapand)。

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

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

答案 2 :(得分:0)

你应该可以使用there's also the risk of overflow or underflow来实现这个目的,它看起来它完成了你想要实现的大部分内容(尽管如Mircea所说,几乎所有东西都可以用脚本完成)

doc提供了一个使用专用网络的示例,但您也可以使用以下配置

  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访问您的计算机