假设我有4个“无业游民”盒子。
3是具有相同配置(例如Consul)的变体,而具有完全不同的配置(例如数据库)。
我需要在三个类似配置的Consul VM上运行配置步骤,但要稍作改动。
然后,我需要对其中的Vault VM中的1个运行置备步骤。
只有在其中一个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日志,但我得到的是以下内容:
第一(领事)
第二(由于缺少三领事法定人数而失败)
最终
首先
最终
首先
最终
数据库
我正在寻找的更像是这样:
首先
首先
第一(实现三领事法定人数)
第二(API调用)
最终
最终
最终
数据库
我还将研究使用.yaml文件以及Vagrantfile层次结构进行此操作。
这个答案似乎表明,仅使用Vagrantfile不可能实现我正在寻找的东西,但这是两年前的事情:https://stackoverflow.com/a/25065243/2146138
这个答案起初看起来很有希望,但似乎主要集中在Ansible上:
Vagrant multi-machine provisioning
至少对我而言,引起这个问题的主要问题是,必须为Consul群集“ Quorum”提供所有3台计算机。
获得3-Consul“法定人数”后,需要针对Consul Cluster的API对其进行ACL调用。
在该调用之后,其他服务的设置可以正常继续,并且它们可以在新初始化的和ACL的Consul群集中注册。
但是,不管我有什么特殊的动机问题,我都对Vagrant DSL在这种情况下用于多机控制流的功能感到好奇,因为我怀疑这种情况还会再次出现。