【问题标题】:VagrantFile execution on vagrant destroyVagrantFile 在 vagrant destroy 上执行
【发布时间】:2017-07-06 18:53:12
【问题描述】:

每次调用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机器。

我该如何解决?

【问题讨论】:

    标签: ruby date vagrant chef-infra


    【解决方案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
    

    【讨论】:

    • 我已将 File.exists 更改为 File.exist?因为这个错误:undefined method 'exists' for File:Class (NoMethodError)
    猜你喜欢
    • 2023-04-05
    • 2018-10-27
    • 2014-01-18
    • 2020-03-01
    • 2020-10-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多