从触发器访问机器ID

时间:2014-11-18 02:28:34

标签: ruby vagrant virtualbox vagrantfile

我希望触发器(通过vagrant-triggers plugin)仅对Virtualbox提供程序有效。在这种情况下,应从计算机配置中删除第二个虚拟磁盘。以下是我Vagrantfile的摘录:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provider "virtualbox" do |vb, override|
    # Use VBoxManage to customize the VM. For example to change memory:
    vb.customize ["modifyvm", :id, "--memory", "1536"]

    override.trigger.after :halt, :append_to_path => ENV["VBOX_INSTALL_PATH"] do
      run "VBoxManage storageattach " +
        File.read(".vagrant/machines/default/virtualbox/id") +
        " --storagectl SATA --port 1 --medium none"
    end
  end
end

在上面的例子中,我可以在设置内存大小时使用:id来引用机器ID;但我只在this answer找到冒险的黑客来获取after触发器中的机器ID。

似乎我只能在触发器定义中使用run方法,调用customize不起作用。有没有更好的方法来访问触发器中的机器ID?

1 个答案:

答案 0 :(得分:1)

正如ticket solution中所述,您可以使用@machine.id。一个例子:

config.trigger.after :halt do
  info "Machine ID: #{@machine.id}"
end