链接流浪文件

时间:2015-12-22 20:27:37

标签: vagrant vagrantfile

我已经有一个项目文件projectpath/Vagrantfile和一个 个人/全球~/.vagrant.d/Vagrantfile

我使用全局Vagrantfile设置某些synced_folder来访问VM中的各种dotfiles。这些绝对是个人配置,不应与与团队成员共享的项目文件混合使用。

我希望能够添加某些个人的每个项目配置。具体来说,我只是为了个人需要添加额外的转发端口,但我不想为我的所有虚拟机都这样做。

我希望有一个projectpath/my_vagrantfile.rb或类似的东西放在同一个目录中(并且会在我的全局git-ignore文件中)

我怀疑我可以在全局Vagrantfile中执行条件load但是想知道是否有更清洁,更流浪的方式

1 个答案:

答案 0 :(得分:1)

按照装载订单和合并的doc

  

要理解的一个重要概念是Vagrant如何加载Vagrantfiles。   Vagrant实际上加载了一系列Vagrantfiles,合并设置   就这样。这允许Vagrantfiles具有不同的特异性水平   覆盖先前的设置。 Vagrantfiles按所示顺序加载   下面。请注意,如果在任何步骤中找不到Vagrantfile,则为Vagrant   继续下一步。

     
      
  1. Vagrantfile与用于给定计算机的盒子一起打包。
  2.   
  3. Vagrant主目录中的Vagrantfile(默认为〜/ .vagrant.d)。这允许您为系统指定一些默认值   用户。
  4.   
  5. 项目目录中的Vagrantfile。这是您将在大多数时间修改的Vagrant文​​件。
  6.   
  7. 多机覆盖(如果有)。
  8.   
  9. 特定于提供商的覆盖(如果有)。
  10.   

如果您与项目团队成员共享同一个框,则1.实际上也不是一个选项。

一种解决方案是创建此projectpath/my_vagrantfile.rb(假设projectpath /是项目的文件夹,其中包含Vagrantfile和.vagrant /目录及VM信息)。

然后在全局 Vagrantfile

中添加以下内容
if File.file?("#{Dir.pwd}/my_vagrantfile.rb")
  eval File.read("#{Dir.pwd}/my_vagrantfile.rb")
end

一个缺点是,只有当您从vagrant目录运行projectpath时它才会起作用,因为Dir.pwd将引用此文件夹。 (即 以字符串形式返回此进程当前工作目录的路径。) 如果您运行vagrant up指定VM Id或从projectpath的子文件夹调用它将无法引用自定义my_vagrantfile.rb