对流浪汉摧毁的VagrantFile执行

时间:2017-07-06 10:04:46

标签: ruby date vagrant chef

每次拨打vagrant upvagrant 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机器。

我如何解决?

1 个答案:

答案 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