【发布时间】:2017-09-28 03:13:08
【问题描述】:
Vagrant Multi-Machine 功能看起来很酷,但是让我困扰(或者不是立即显现)的一件事是,似乎没有一种在“父”Vagrantfile 和 Vagrantfile 之间共享配置选项的好方法“儿童”流浪文件。有没有办法在父母和孩子之间有效且可维护地共享配置选项?举个例子可能会更清楚。
假设我有一个由 3 个应用/服务组成的平台:API、Web 和 Worker。
假设目录结构如下:
/some_platform
/api
# app code...
Vagrantfile
/web
# app code...
Vagrantfile
/worker
# app code...
Vagrantfile
Vagrantfile
假设/some_platform/api/Vagrantfile 看起来像:
Vagrant.configure("2") do |config|
config.vm.box = "debian/jessie64"
end
大概 web 和 worker Vagrantfiles 看起来很相似。
现在,使用 Multi-Machine 的奇迹,我依靠 Vagrant 协调这些 VM,/some_platform/Vagrantfile 看起来像:
Vagrant.configure("2") do |config|
config.vm.define "web" do |api|
api.vm.box = "debian/jessie64"
end
config.vm.define "web" do |web|
web.vm.box = "debian/jessie64"
end
config.vm.define "web" do |worker|
worker.vm.box = "debian/jessie64"
end
end
我知道这个例子是人为的,但是很容易看出,一旦你得到越来越复杂的配置声明,在两个地方重复该配置是很烦人和危险的。
您可能想知道“为什么每个项目都有自己的 Vagrantfile?”这样做为应该如何设置应用程序运行的服务器提供了单一的事实来源。我意识到您可以使用一些供应商(我会使用它们),但您仍然需要声明一些其他的东西,我想保持 DRY 以便我可以通过 Multi-机器,或者我可以在单个应用程序上工作并更改它的虚拟机/服务器设置。
我真正喜欢的是一种将其他 Vagrantfile 合并到“父”文件中的方法。
这可能吗?还是我为尝试而疯狂?关于如何实现这一目标的任何聪明想法?我已经用一些 yaml 文件和 PORO 来解决这个问题,但没有一个 hack 让我感到非常满意。
【问题讨论】:
标签: vagrant vagrantfile