每次拨打vagrant up
或vagrant destroy
VagrantFile都会被执行?
这是因为我遇到了以下问题。在vagrant up
上,我使用以下参数配置机器:
config.vm.provision "chef_client" do |chef|
chef.node_name = 'living-dev-'+Time.new.strftime("%H%M%S")
config.vm.hostname = chef.node_name
end
当我执行vagrant destroy
时,执行以下代码:
config.trigger.after :destroy do
info "Attempting to remove node #{config.vm.hostname}"
run "knife node show #{config.vm.hostname} -c c:/chef/knife.rb"
if $?.to_i == 0
info "Removing node #{config.vm.hostname}"
"knife node delete #{config.vm.hostname} -y -c c:/chef/knife.rb"
end
end
我在这里获得的 config.vm.hostname 与在chef上定义的那个不同,所以我无法在Chef服务器上删除vm机器。
我如何解决?
答案 0 :(得分:1)
是的,当您执行vagrant
命令时,它会读取整个Vagrantfile并放入内存以了解如何使用该计算机。因此,在您的情况下,甚至会读取(并执行)配置块,然后当您重新启动VM时,主机名将会更改
我相信你可以在SO上找到关于处理动态主机名的问题,但基本上你需要保留这些信息,所以你需要在文件中定义主机名然后从这个文件中读取
If File.exist?(".vagrant/machines/default/virtualbox/hostname")
File.open(".vagrant/machines/default/virtualbox/hostname", "rb")
hostname = File.read
else
hostname = 'living-dev-'+Time.new.strftime("%H%M%S")
File.open(".vagrant/machines/default/virtualbox/hostname" ,'w') do |f|
f.write "#{hostname}]"
end
end