链接流浪文件

Chaining vagrant files

我已经有一个项目文件 projectpath/Vagrantfile 和一个 personal/global~/.vagrant.d/Vagrantfile

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

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

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

我怀疑我可以从全局 Vagrantfile 中执行条件 load 但想知道是否有更干净、更 vagrant-y 的方式

根据加载顺序和合并中的 doc

An important concept to understand is how Vagrant loads Vagrantfiles. Vagrant actually loads a series of Vagrantfiles, merging the settings as it goes. This allows Vagrantfiles of varying level of specificity to override prior settings. Vagrantfiles are loaded in the order shown below. Note that if a Vagrantfile is not found at any step, Vagrant continues with the next step.

  1. Vagrantfile packaged with the box that is to be used for a given machine.
  2. Vagrantfile in your Vagrant home directory (defaults to ~/.vagrant.d). This lets you specify some defaults for your system user.
  3. Vagrantfile from the project directory. This is the Vagrantfile that you'll be modifying most of the time.
  4. Multi-machine overrides if any.
  5. Provider-specific overrides, if any.

如果您与项目团队成员共享同一个盒子,1. 也不是真正的选择。

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

然后在 globalVagrantfile

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

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