我希望一般地回答这个问题,但为了说明它,这里有一个用例:
我将 Vagrant 用于一个简单的 LMAP 项目。我使用独立的 Puppet 进行配置。现在,可能有一些开发人员坐在代理后面,他们需要对 VM 进行一些额外的配置。我在 Puppet 方面有一些工作:我可以将代理 IP(如果有)作为一个事实传递给Vagrantfile
Puppet,如果它被设置,Puppet 会做出相应的反应。
我唯一的问题是:开发人员如何为他们的开发环境指定/覆盖此设置而无需更改Vagrantfile
(受版本控制并且必须保持开发环境中立)?
如果人们可以在一个名为 eg 的文件中覆盖一些 Vagrant 设置,那就太好了Vagrantfile.local
,我将通过.gitignore
.
由于 Vagrantfile 只是 Ruby,我尝试了以下方法:
# Also load per-dev custom vagrant config
custom_vagrantfile = 'Vagrantfile.local'
load custom_vagrantfile if File.exist?(custom_vagrantfile)
文件包含基本上有效,但看起来在包含的文件中,我不再处于同一个 Vagrant 上下文中......
Vagrant::Config.run do |config|
config.vm.provision :puppet do |puppet|
puppet.facter = { "proxy" => "proxy.host:80" }
end
end
...还“重置”了我在 main 中创建的所有其他 puppet 配置值Vagrantfile
,这让我觉得我在这里走错了方向。我应该注意,我是 Ruby 的菜鸟;)
任何人都可以给我一个提示,甚至是一个可行的解决方案,说明如何在这里完成每个开发者的定制?