我已经有一个项目文件projectpath/Vagrantfile
和一个
个人/全球~/.vagrant.d/Vagrantfile
我使用全局Vagrantfile设置某些synced_folder
来访问VM中的各种dotfiles。这些绝对是个人配置,不应与与团队成员共享的项目文件混合使用。
我希望能够添加某些个人的每个项目配置。具体来说,我只是为了个人需要添加额外的转发端口,但我不想为我的所有虚拟机都这样做。
我希望有一个projectpath/my_vagrantfile.rb
或类似的东西放在同一个目录中(并且会在我的全局git-ignore文件中)
我怀疑我可以在全局Vagrantfile中执行条件load
但是想知道是否有更清洁,更流浪的方式
答案 0 :(得分:1)
按照装载订单和合并的doc:
要理解的一个重要概念是Vagrant如何加载Vagrantfiles。 Vagrant实际上加载了一系列Vagrantfiles,合并设置 就这样。这允许Vagrantfiles具有不同的特异性水平 覆盖先前的设置。 Vagrantfiles按所示顺序加载 下面。请注意,如果在任何步骤中找不到Vagrantfile,则为Vagrant 继续下一步。
- Vagrantfile与用于给定计算机的盒子一起打包。
- Vagrant主目录中的Vagrantfile(默认为〜/ .vagrant.d)。这允许您为系统指定一些默认值 用户。
- 项目目录中的Vagrantfile。这是您将在大多数时间修改的Vagrant文件。
- 多机覆盖(如果有)。
- 特定于提供商的覆盖(如果有)。
醇>
如果您与项目团队成员共享同一个框,则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