Build 在vagrant文件中手动指定.vagrant文件夹的位置

Build 在vagrant文件中手动指定.vagrant文件夹的位置,build,vagrant,Build,Vagrant,在构建过程中,我保存Vagrantfile的文件夹将自动生成,因此它将被清理,但我希望仍然能够使用创建的机器。最简单的方法是将.vagrant文件夹放在自动生成的文件夹之外。这可能吗?您(至少)有两种选择: 使用VAGRANT\u DOTFILE\u PATH设置存储项目特定数据的位置(默认为.VAGRANT)。请注意,路径必须是特定于项目/文件的 cd到要创建.vagrant目录的目录,并使用vagrant\u VAGRANTFILE指定生成的VAGRANTFILE的路径 我知道这是一个老问题

在构建过程中,我保存Vagrantfile的文件夹将自动生成,因此它将被清理,但我希望仍然能够使用创建的机器。最简单的方法是将.vagrant文件夹放在自动生成的文件夹之外。这可能吗?

您(至少)有两种选择:

  • 使用
    VAGRANT\u DOTFILE\u PATH
    设置存储项目特定数据的位置(默认为
    .VAGRANT
    )。请注意,路径必须是特定于项目/文件的

  • cd
    到要创建
    .vagrant
    目录的目录,并使用
    vagrant\u VAGRANTFILE
    指定生成的VAGRANTFILE的路径


  • 我知道这是一个老问题,但是对于任何通过Google来到这里的人来说,如果你真的想指定元数据目录,而不是每次都乱搞环境变量,那么有一个解决方法。只要把这个放在你的文件的顶部:

    
    VAGRANT_DOTFILE_PATH = 'custom/dotfile/path'
    if(ENV['VAGRANT_DOTFILE_PATH'].nil? && '.vagrant' != VAGRANT_DOTFILE_PATH)
        puts 'changing metadata directory to ' + VAGRANT_DOTFILE_PATH
        ENV['VAGRANT_DOTFILE_PATH'] = VAGRANT_DOTFILE_PATH
        puts 'removing default metadata directory ' + FileUtils.rm_r('.vagrant').join("\n")
        system 'vagrant ' + ARGV.join(' ')
        ENV['VAGRANT_DOTFILE_PATH'] = nil #for good measure
        abort 'Finished'
    end
    

    我希望每个提供者使用一个单独的Vagrant目录,以便能够轻松地在它们之间进行交换。我无法上班,但基于此,我最终得出以下结论:

    Vagrant.configure('2') do |config|
      config.vm.provider :lxd do |lxd, override|
        if ENV['VAGRANT_DOTFILE_PATH'].nil?
          ENV['VAGRANT_DOTFILE_PATH'] = '.vagrant-lxd'
          puts 'Removing default metadata directory ' + FileUtils.rm_r('.vagrant').join("\n")
          exec 'vagrant ' + ARGV.map{|arg| Shellwords.escape arg}.join(' ')
        end
        …
    

    这避免了无休止的递归或过早中止
    exec
    而不是
    system
    避免了每个
    vagrant
    命令的非零退出代码。

    由于我的dev目录位于nfs上,因此当多个主机尝试运行其vm时,.vagrant目录会出错。这似乎能解决问题。这对我不起作用。它打印“警告:已初始化常量VAGRANT_DOTFILE_PATH”四次,然后立即在
    中止
    行退出。根据VAGRANT_VAGRANTFILE,“不是文件路径,只是文件名。”。