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

Kat*_*ych 10 virtualbox virtual-machine vagrant vagrantfile

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

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

在Vagrantfile中执行此操作的正确方法是什么?

我已经尝试添加以下行:

config.vm.provider "virtualbox" do |vb|
   vb.customize ["createvm", "--name", "name", "--basefolder", "path"]
end
Run Code Online (Sandbox Code Playgroud)

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

我也尝试过使用群组:

config.vm.provider :virtualbox do |vb| 
  vb.customize ["modifyvm", :id, "--groups", "/subpath"] 
end
Run Code Online (Sandbox Code Playgroud)

但它只创建了一个子文件夹~/VirtualBox VMs.

请帮忙!

Fré*_*nri 6

这并不容易,但至少我学到了一件好事.即使你找不到你想要的答案,我也会把它作为答案.(提前抱歉)

首先:

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

是的,默认情况下,当您在流浪者输出中看到类似的东西时

==> default: Importing base box 'ubuntu/trusty64'...
Run Code Online (Sandbox Code Playgroud)

在幕后,vagrant运行类似的东西VBoxManage import ....,如果你还定义了一个createvm属性,除了流浪盒导入之外它还会运行它,所以它会创建重复.请注意,provider块中设置的属性不会覆盖默认属性,而是在默认值之后运行.

如此流浪儿呢VBoxManage import .... --disk /path; 从VBoxManage运行时,很容易更改为磁盘指定的路径并将VM文件保存在任何位置.

但是当你在这里查看vagrant代码target pathVBoxManage import -n /path_to_your_box_ovf_file,它会在运行时获取属性的输出,并从那里构建路径,因此它将是任何VM的相同路径文件夹.

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

VBoxManage setproperty machinefolder /my_custom_path
vagrant up
VBoxManage setproperty machinefolder default
Run Code Online (Sandbox Code Playgroud)

将在custom_path文件夹中创建VM文件,然后将VM文件夹重新初始化为其默认位置.(我没有尝试,但因为Vagrantfile是一个ruby脚本,你甚至可以VBoxManage setproperty从Vagrantfile 运行)