如何分隔多计算机群集置备的各个阶段?

时间:2018-09-26 22:54:41

标签: vagrant provisioning consul control-flow vagrant-provision

假设我有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在这种情况下用于多机控制流的功能感到好奇,因为我怀疑这种情况还会再次出现。

0 个答案:

没有答案