vagrant - 如何分离多机集群配置的阶段?
问题描述
假设我有 4 个 Vagrant 盒子。
3 个是相同配置的变体,例如 Consul,一个具有完全不同的配置,例如数据库。
我需要在三个类似配置的 Consul 虚拟机上运行一个配置步骤,略有不同。
然后,我需要对其中 1 个 Vault VM 运行配置步骤。
只有在其中一个 VM 上运行此预置步骤后,我才能在三个类似配置的 Vault VM 上成功运行下一个预置步骤(略有不同)。
我用多台机器通读了关于 Vagrant 的文档,循环遍历 VM 定义和配置参数。该preserve_order: true
参数对我不起作用,至少不是我使用它的方式。
到目前为止,这是我一直在尝试的,匿名保护有罪者:
~ $cat Hark_TisAVagrant
Vagrant.configure("2") do |config|
## 1.
## Do This on 3 VMs
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.provision "shell",
inline: "echo FIRST from node #{i}"
node.vm.provider "docker" do |d|
d.image = "consul"
end
end
end
## 2.
## Afterwards, do this on one VM from that set
node3.vm.provision "then-this",
type: "shell",
preserve_order: true,
inline: "echo SECOND from node3!"
## 3.
## Finally, on all 3, do this
(1..3).each do |i|
config.vm.define "node-#{i}" do |node|
node.vm.provision "shell",
inline: "echo FINAL from node #{i}"
end
end
## 4.
## On the side, no order needed
config.vm.define "db" do |db|
db.vm.provision "shell", inline: "echo an irrelevant dbtard meme-ing in the peanut gallery"
db.vm.provider "docker" do |d|
d.image = "postgres"
end
end
end
我会为你省去大量的 Vagrant 日志,但我得到的相当于以下内容:
FIRST (1-Consul)
SECOND (由于缺少 3-Consul Quorum 而失败)
FINAL
FIRST
FINAL
FIRST
FINAL
DB
我正在寻找的更像是这样的:FIRST
FIRST
FIRST (3-Consul Quorum达到)
SECOND (API Call)
FINAL
FINAL
FINAL
DB
我还将使用 .yaml 文件和 Vagrantfile 层次结构进行研究。
这个答案似乎表明我正在寻找的东西不可能仅使用 Vagrantfile,但它来自 2 年前:https ://stackoverflow.com/a/25065243/2146138
这个答案起初看起来很有希望,但似乎主要集中在 Ansible 上:
至少对我来说,引发这个问题的主要问题是,所有 3 台机器都需要为 Consul 集群“Quorum”配置。
在我们获得一个 3-Consul “Quorum” 后,需要针对 Consul Cluster 的 API 进行一次调用以对其进行 ACL。
在那次调用之后,其他服务的供应可以正常继续,它们可以在新初始化和 ACL 的 Consul 集群中注册。
不过,不管我遇到的具体问题是什么,我都对 Vagrant DSL 的多机控制流功能在这种情况下的功能感到好奇,因为我怀疑这种情况会再次出现。
解决方案
推荐阅读
- octave - Octave:为什么在我的代码中使用“暂停”功能时它不起作用?
- sharepoint - 如何在英雄 WebPart 的站点模板中使用 HTML 链接的相对 URL
- log4j - Log4j 没有将日志打印到自由容器上的控制台
- django - 如何在数据库中查询用户位置一定半径内的所有点?
- javascript - 如何将带有ajax请求的php页面添加到wordpress中的另一个php?
- laravel - 语法错误,意外 ',',期待 ']'
- python - FFmpeg 确认后返回“必须指定输出”
- git - 为什么“git pull”有时会要求我提供合并请求评论?
- asp.net - ASP.NET 使用另一个控制器
- javascript - 不透明度过渡css动画从高到低工作,反之则不然