如何在Vagrant上获取VM的目录

时间:2019-03-02 04:23:52

标签: ruby vagrant virtualbox provisioning vagrantfile

我需要根据一些外部配置在VirtualBox VM上创建一些额外的磁盘,但是这些磁盘必须是独立的,在VM的目录下。我成功地做到了这一点,但是,强制使用虚拟机名称(使其可预测),但是,由于某些限制,我不能在我的环境中强制使用该名称。某些人将在不同的分支和目录中同时工作,对于这种特殊情况,强行使用名称不是一个好主意,它必须是动态的。解决该问题的任何想法将不胜感激。

Vagrant.require_version ">= 1.9.7"

Vagrant.configure('2') do |config|

  config.vm.define "mylinux-vm", autostart: false do |this|

    this.vm.box = "ubuntu/xenial64"
    this.vm.hostname = "my-linuxvm"
    this.vm.provider :virtualbox do |vb|
      vb.memory = 2048; 
      vb.cpus = 2

      # What is the directory where this VM is going to be created?
      # I need to create other disk files under the VM directory
      # is going to be something like:
      #    $HOME/VirtualBox VMs/<current_dir_name>_mylinux-vm_<timestamp>
      # How can I get this directory?
    end
  end
end

1 个答案:

答案 0 :(得分:1)

您可以通过执行以下操作来设置该文件夹的名称,并在您的Vagrantfile中对其进行引用:

vb_memory = 2048
vb_cpus = 2
vb_name = "mylinuxvm-foobar-mem#{vb_memory}-cpu#{vb_cpus}"

...

this.vm.provider :virtualbox do |vb|
  vb.memory = vb_memory; 
  vb.cpus = vb_cpus
  vb.name = vb_name  
  # Setting the above would create a directory like this : 
  # $HOME/VirtualBox VMs/mylinuxvm-foobar-mem2048-cpu2
end

这将使文件夹的名称保持唯一,您也可以在整个Vagrantfile中将其称为vb_name