2017-07-06 157 views
0

每當您撥打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,我得到這裏是diferent的一個定義在廚師身上,所以我無法刪除廚師服務器上的虛擬機。

我該如何解決它?

回答

1

是的,當您執行vagrant命令時,它會讀取整個Vagrantfile並將其放入內存以瞭解如何使用機器。所以在你的情況下,即使配置塊被讀取(並執行),然後當你將重新啓動虛擬機,主機名將改變

我相信你可以找到關於處理動態主機名的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 
+0

我已經改變了File.exists與File.exist讀?因爲這個錯誤:'未定義的方法'存在'爲文件:類(NoMethodError)' – Lechucico

+0

謝謝,從我身邊的錯字 –