首页 文章

vagrant管理主机dhcp

提问于
浏览
1

我希望每次运行 vagrant up / vagrant destroy 时,根据项目's dirname and VM'的IP地址自动添加/删除我的 /etc/hosts 文件的条目别名 . 有一些插件可以做到这一点,但不支持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

    我安装了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

  • 0

    你应该能够做到这一点 .

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

    这种方式当vagrant运行脚本时,它将生成参数,供应脚本将拾取并使用它 .

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

  • 1

    您应该能够使用vagrant-dns来实现此目的,它看起来它完成了您尝试实现的大部分内容(尽管如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访问您的机器

相关问题