vagrant 管理主机 dhcp
vagrant manage hosts dhcp
我想在每次 运行 vagrant up
/ vagrant destroy
。有一些插件可以执行此操作但不支持 dhcp。
我正在使用 machine_name = File.basename(File.expand_path('..', Dir.pwd)) + '.local'
构建目录名。
我遗漏的另一个难题是在 Vagrantfile 中获取 VM 的 dhcp 分配 IP 地址并更新主机上的 /etc/hosts 文件的方法。
我的目标是在不编辑 Vagrantfile 和 /etc/hosts 中的名称 and/or IP 的情况下启动虚拟机。
我正在使用 Vagrant 1.7.4、VirtualBox 5.x 和 Puppet 4.2。
有什么想法吗?
你应该可以做到这一点。
还记得 vagrant 文件是 ruby 吗?编写一个配置 shell 脚本来设置 /etc/hosts 并将其作为参数传递到 Vagrant 文件中文件的位置(有点像上面的 File.exapand)。
这样当 vagrant 运行脚本时,它会生成参数,配置脚本会获取并使用它。
您应该可以为此目的使用 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[=13= 访问你的机器]
我已经安装了 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
我想在每次 运行 vagrant up
/ vagrant destroy
。有一些插件可以执行此操作但不支持 dhcp。
我正在使用 machine_name = File.basename(File.expand_path('..', Dir.pwd)) + '.local'
构建目录名。
我遗漏的另一个难题是在 Vagrantfile 中获取 VM 的 dhcp 分配 IP 地址并更新主机上的 /etc/hosts 文件的方法。
我的目标是在不编辑 Vagrantfile 和 /etc/hosts 中的名称 and/or IP 的情况下启动虚拟机。
我正在使用 Vagrant 1.7.4、VirtualBox 5.x 和 Puppet 4.2。
有什么想法吗?
你应该可以做到这一点。
还记得 vagrant 文件是 ruby 吗?编写一个配置 shell 脚本来设置 /etc/hosts 并将其作为参数传递到 Vagrant 文件中文件的位置(有点像上面的 File.exapand)。
这样当 vagrant 运行脚本时,它会生成参数,配置脚本会获取并使用它。
您应该可以为此目的使用 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[=13= 访问你的机器]
我已经安装了 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