链接流浪文件
Chaining vagrant files
我已经有一个项目文件 projectpath/Vagrantfile
和一个
personal/global~/.vagrant.d/Vagrantfile
我使用全局 Vagrantfile 设置某些 synced_folder
s 来访问我在 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.
- Vagrantfile packaged with the box that is to be used for a given machine.
- Vagrantfile in your Vagrant home directory (defaults to ~/.vagrant.d). This lets you specify some defaults for your system
user.
- Vagrantfile from the project directory. This is the Vagrantfile that you'll be modifying most of the time.
- Multi-machine overrides if any.
- 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
我已经有一个项目文件 projectpath/Vagrantfile
和一个
personal/global~/.vagrant.d/Vagrantfile
我使用全局 Vagrantfile 设置某些 synced_folder
s 来访问我在 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.
- Vagrantfile packaged with the box that is to be used for a given machine.
- Vagrantfile in your Vagrant home directory (defaults to ~/.vagrant.d). This lets you specify some defaults for your system user.
- Vagrantfile from the project directory. This is the Vagrantfile that you'll be modifying most of the time.
- Multi-machine overrides if any.
- 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