将 Vagrant VM 存储在自定义文件夹中

Store Vagrant VM in custom folder

我想指定 Vagrant 将存储我的 VM 的文件夹。

我只需要一个 VM,所以我不想修改 VirtualBox.xml defaultMachineFolder 或更改 VBOX_USER_HOME 环境变量。

在 Vagrantfile 中正确的做法是什么?

我已经尝试添加以下行:

config.vm.provider "virtualbox" do |vb|
   vb.customize ["createvm", "--name", "name", "--basefolder", "path"]
end

它在我指定的路径上创建了 VM 文件夹,但它也在 ~/VirtualBox VMs 文件夹并将错误的 VM 路径添加到 VirtualBox.xml。

我也尝试过使用群组:

config.vm.provider :virtualbox do |vb| 
  vb.customize ["modifyvm", :id, "--groups", "/subpath"] 
end

但它只会在 ~/VirtualBox VMs.

中创建一个子文件夹

请帮忙!

这并不容易,但至少我学到了一件好事。即使您找不到预期的答案,我也会将其作为答案。 (提前抱歉)

首先:

It creates VM folder on the path I specified, but it also duplicate it in the ~/VirtualBox VMs folder and add the wrong VM path to the VirtualBox.xml.

是的,默认情况下,当您在 vagrant 输出中看到类似

的内容时
==> default: Importing base box 'ubuntu/trusty64'...

在幕后,vagrant 运行 类似于 VBoxManage import .... 所以如果你还定义了一个 createvm 属性,它还会 运行 它另外到 vagrant box import 以便它创建重复项。请注意 provider 块中设置的 属性 不会覆盖默认值,而是 运行 在默认值之后。

vagrant 也是如此VBoxManage import .... --disk /path; 运行从 VBoxManage 管理时,很容易更改为磁盘指定的路径并将 VM 文件保存在任何地方。

但是,当您查看 vagrant code here 时,它会在 运行 宁 VBoxManage import -n /path_to_your_box_ovf_file 时获取 target path 属性 的输出,并从那里构建路径因此对于任何 VM 来说它都是相同的路径文件夹

所以在您已经提到的方法之上,要定义路径,您可以使用 VBoxManage setproperty machinefolder

VBoxManage setproperty machinefolder /my_custom_path
vagrant up
VBoxManage setproperty machinefolder default

VM 文件将在您的 custom_path 文件夹中创建,然后您将 VM 文件夹重新初始化到其默认位置。 (我没有尝试,但由于 Vagrantfile 是一个 ruby 脚本,你甚至可以 运行 来自 Vagrantfile 的 VBoxManage setproperty