gpt4 book ai didi

ruby - 在本地覆盖 Vagrant 配置设置(每个开发)

转载 作者:数据小太阳 更新时间:2023-10-29 06:20:34 25 4
gpt4 key购买 nike

我希望这个问题得到一般性的回答,但为了说明这一点,这里有一个用例:

我将 Vagrant 用于一个简单的 LMAP 项目。我使用独立的 Puppet 进行配置。现在,可能有一些开发人员坐在代理后面,他们需要对 VM 进行一些额外的配置。我在 Puppet 方面有一些工作:我可以将代理 IP(如果有的话)作为事实传递给 Vagrantfile 中的 puppet,如果已设置,Puppet 会做出相应的 react 。

我唯一的问题是:开发人员如何为他们的开发环境指定/覆盖此设置,而不必更改 Vagrantfile(它在版本控制下并且必须保持开发环境中立) ?

如果人们可以覆盖文件中的一些 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

... 还“重置”了我在主要 Vagrantfile 中创建的所有其他人偶配置值,这让我觉得我走错了方向。我应该指出,我完全是 Ruby 的菜鸟 ;)

谁能给我一个提示,甚至是一个可行的解决方案,说明一般如何在这里完成按开发人员的定制?

最佳答案

Vagrantfile 只是 Ruby,所以 YAML 是另一种选择。

例如,在 Vagrantfile 中,我这样做:

# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'yaml'

settings = YAML.load_file 'vagrant.yml'
db_ip_address = settings['db']['ip_address']
api_ip_address = settings['api']['ip_address']

Vagrant.configure("2") do |config|
config.vm.box = "ffuenf/ubuntu-13.10-server-amd64"
config.vm.box_url = "https://vagrantcloud.com/ffuenf/ubuntu-13.10-server-amd64/version/4/provider/virtualbox.box"

config.vm.define "db" do |db|
db.vm.synced_folder settings['db']['artifacts_dir']['host'], settings['db']['artifacts_dir']['guest']
db.vm.network "private_network", ip: db_ip_address
... other stuff ...
end

config.vm.define "api" do |api|
api.vm.synced_folder settings['api']['artifacts_dir']['host'], settings['api']['artifacts_dir']['guest']
api.vm.network "private_network", ip: api_ip_address
api.vm.network "forwarded_port", guest: settings['api']['forwarded_port']['guest'], host: settings['api']['forwarded_port']['host']
end
end

然后我有一个 vagrant.yml 文件(我只是编造了名称;您可以使用任何您喜欢的名称)用于特定于开发人员的配置:

db:
ip_address: 192.168.4.14
artifacts_dir:
host: /Users/willie/myapp/db-scripts
guest: /opt/myapp/db

api:
ip_address: 192.168.4.15
forwarded_port:
host: 9080
guest: 8080
artifacts_dir:
host: /Users/willie/myapp/artifacts
guest: /opt/myapp/api

关于ruby - 在本地覆盖 Vagrant 配置设置(每个开发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com