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

时间:2014-02-13 18:49:54

标签: build vagrant

我在构建期间自动生成Vagrantfile的文件夹,因此它会被清理,但我仍然可以使用创建的机器。最简单的方法是将.vagrant文​​件夹放在自动生成的文件夹之外的某个位置。这可能吗?

3 个答案:

答案 0 :(得分:9)

你有(至少)两个选择:

  1. 使用VAGRANT_DOTFILE_PATH设置项目特定数据的存储位置(默认为.vagrant)。请注意,路径必须是project / Vagrantfile特定的。

  2. cd到您希望创建.vagrant目录的目录,并使用VAGRANT_VAGRANTFILE指定生成的Vagrantfile的路径。

答案 1 :(得分:4)

我知道这是一个老问题,但是对于通过Google到达此处的任何人来说,如果您真的想要指定元数据目录而不是每次都不知道环境变量,那么就有一种解决方法。只需将它放在Vagrantfile的顶部:


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

答案 2 :(得分:0)

我希望每个提供程序都使用一个单独的Vagrant目录,以便能够在它们之间轻松地进行交换。我无法@hairraisin's solution工作,但基于此,我得出以下结论:

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
    …

这避免了无限递归或abort太早出现。 exec而非system避免了每个vagrant命令的非零退出代码。