我希望能够得到一般性的答案,但为了举例,这里有一个用例:
我正在使用 Vagrant 进行简单的 LMAP 项目,使用独立的 Puppet 进行配置。现在,有些开发人员可能会坐在代理后面,他们需要对 VM 进行一些额外的配置。对于 Puppet 配置方面,我已经解决了问题:我可以将代理 IP(如果有)作为事实传递给 Puppet,在 Vagrantfile 中进行相应的设置。
我唯一遇到的问题是:如何让开发人员在不更改 Vagrantfile 的情况下指定/覆盖其开发环境中的某些设置(Vagrantfile 受版本控制,必须保持开发环境中立)?
如果人们可以在名为 e.g. Vagrantfile.local 的文件中覆盖一些 Vagrant 设置,那将是很棒的,我将通过 .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
...还重置了我在主Vagrantfile
中设置的所有其他木偶配置值,这让我觉得我在这方面走错了方向。需要注意的是,我对Ruby完全不熟悉 ;)
有没有人能够给我一些提示或者通用的解决方案,来实现开发者自定义呢?