如何分离多机集群配置的各个阶段?

2024-01-02

假设我有 4 个 Vagrant 盒子。

3 种是相同配置的变体,例如 Consul,而一种具有完全不同的配置,例如数据库。

我需要在三个配置相似的 Consul VM 上运行一个略有不同的配置步骤。

然后,我需要针对其中 1 个 Vault VM 运行配置步骤。

只有在其中 1 个虚拟机上运行此配置步骤后,我才能在三个配置相似的 Vault 虚拟机上成功运行下一个配置步骤(略有不同)。

我已经通读了 Vagrant 的多台机器文档、循环虚拟机定义和配置参数。这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 日志,但我得到的相当于以下内容:

第一(1-领事)
第二(由于缺乏 3 名领事法定人数而失败)
FINAL
FIRST
FINAL
FIRST
FINAL
DB

我正在寻找的更像是这样的: 第一的
FIRST
第一(达到 3 名领事法定人数)
第二(API 调用)
FINAL
FINAL
FINAL
DB

我还将研究如何使用 .yaml 文件和 Vagrantfile 层次结构来实现此目的。

这个答案似乎表明我正在寻找的内容不可能仅使用 Vagrantfile 来实现,但它来自 2 年前:https://stackoverflow.com/a/25065243/2146138 https://stackoverflow.com/a/25065243/2146138

这个答案一开始看起来很有希望,但似乎主要关注 Ansible:

Vagrant 多机配置 https://stackoverflow.com/questions/34444506/vagrant-multi-machine-provisioning

至少对我来说,引发这个问题的主要问题是所有 3 台机器都需要为 Consul 集群“Quorum”进行配置。

在我们获得 3-Consul“Quorum”后,需要针对 Consul 集群的 API 进行一次调用以对其进行 ACL。

在该调用之后,其他服务的配置可以正常继续,并且它们可以在新初始化和 ACL 的 Consul 集群中注册。

不管我的具体激励问题如何,我对 Vagrant DSL 的多机控制流功能在此类情况下的功能感到好奇,因为我怀疑这种情况会再次出现。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何分离多机集群配置的各个阶段? 的相关文章

随机推荐

  • Firebase 云消息传递是否符合 HIPAA?

    我想在医疗保健应用程序中使用 Firebase Cloud Messaging 我想知道 FCM 是否符合 HIPAA 标准并且是否提供 BAA 我们刚刚与第三方完成了使用端到端加密的 Firestore Chat 示例应用程序 iOS 和
  • Win32 No-MFC 中的消息映射

    我如何创建类似的结构来处理 Win32 消息 就像在 MFC 中一样 In MFC BEGIN MESSAGE MAP CSkinCtrlTestDlg CDialog AFX MSG MAP CSkinCtrlTestDlg ON BN
  • 有 Ruby 语法的权威参考文档吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找有关 Ruby 语法的权威文档 我知道核心 API 和标准库的权威文档 但是语法本身呢 例如
  • 如何从左侧而不是顶部滑动导航栏?

    Bootstrap 支持从顶部切换导航栏 屏幕较小时如何从左侧滑动 例如 在上面提供的屏幕截图中 当调整屏幕大小时 导航栏会切换并从顶部向下滑动 我宁愿希望导航栏从左侧滑动 在Bootstrap中如何实现这个功能呢 目前 根据代码 导航栏从
  • Keycloak 模板可用变量

    我在谷歌上搜索了一段时间 以便找到我可以在各种 Keycloak 模板中使用的所有可用的 变量 的文档 我所说的变量是指所有的 xxx yyy 我可以用它来在模板中注入一些动态值 通过文档我可以在这里和那里找到其中的一些 例如 user a
  • cypress - 访问主站点时出现 403 禁止错误

    我正在尝试 cy visit 我的单页应用程序 该应用程序需要在浏览器中加载我的证书才能正确运行 运行测试时 它失败并出现 403 禁止错误 有一个可怕的解决方法 我在 cypress chrome 浏览器窗口中打开一个新选项卡 然后直接转
  • C++ 中指针“this+1”指的是什么?

    我正在浏览代码G2P 推理 https www i6 informatik rwth aachen de web Software g2p html并发现了一行非常奇怪的代码 public const Node childrenEnd co
  • 按服务数据 UUID 进行 BLE 扫描过滤器

    我们有使用 服务数据 128 位 UUID AD 类型信标数据的设备 0x21 对于 Android 扫描 我们通过 MAC 地址过滤 BLE 设备 效果很好 因为我们需要更大的灵活性 所以我们想通过 UUID 进行过滤 我的代码仅适用于小
  • 处理数学函数中的错误

    数学相关函数中错误处理的良好做法是什么 我正在构建一个专门函数的库 模块 我的主要目的是使调用这些函数的代码更容易调试 而不是创建一个闪亮的用户友好的错误处理工具 下面是 VBA 中的一个简单示例 但我也有兴趣听到其他语言的信息 我不太确定
  • 创建帖子时创建 Woocommerce 产品

    我在我的 WordPress 网站上使用 Woocommerce 我在我的网站上销售各种物品 我想要的是 每次我创建有关特定商品的小帖子时 它还会创建一个 Woocommerce 产品页面 其中包含可供出售的商品 例如 我创建了一篇关于定制
  • 在实体框架中创建动态 linq 排序和搜索顺序语句时

    我正在尝试构建一个函数来根据某些参数动态生成不同的查询 我对 LINQ 语法有点困惑 不确定我是否做对了 字符串类型参数集是 search 用于搜索文本框值 searchfield 搜索内容 limit begin limit end 用于
  • Gradle 混合构建风味

    有没有办法在gradle中 混合 多种口味 例如 假设我有两种口味 Red and Blue 现在假设我有两种口味 我希望它们有 子口味 如果你喜欢的话 Complex and Simple 到目前为止我所知道的是 这需要我创建四种口味 R
  • Getview里面的Click方法被多次调用

    我希望 click 方法只被调用一次 我该怎么做才能得到这个结果 这是我的代码 public override View GetView int position View convertView ViewGroup parent View
  • 限制多个 MongoDB 数组大小

    我有一个文档 其中列出了按主题分隔的作者的帖子项 ID 这会产生如下所示的文档 id sdkafjsadkfjads3023 Author SomeGuy RecentPosts topic 1 Count 4 Posts postitem
  • 预定义类型 microsoft.csharp.runtimebinder 未定义或导入

    我在我的 C 项目中使用动态关键字 我收到以下错误 找不到编译动态表达式所需的一种或多种类型 下面是我的代码 我们使用 VS 2013 和 NET Framework 4 5 1 dynamic cstmDocProp Microsoft
  • 如何让JVM默认使用给定的源IP?

    在使用默认的内置 java xml SOAPConnectionFactory 时 有什么方法可以强制 JVM 使用特定的源 IP 地址吗 看起来默认最终会创建 HttpSOAPConnection 对象 sun 私有 API 然后在底层使
  • 在zend框架中设置cookie

    我是 zend 框架的新手 我已经编写了这段代码来在我的网站中设置 cookie public function setCookie data email cookie new Zend Http Cookie user email id
  • 最小的音频文件:MP3、Ogg 还是 Wav?

    我正在寻找最小类型的音频文件 以便某些 JavaScript 能够更流畅地工作 在这三个人中 Ogg通常会小于MP3 两者都会比未压缩的小得多WAV 当然 可能还有其他因素对您的网站产生影响 例如质量 对于大多数用途来说没有太大的明显差异
  • Catch 动态地将参数传递给测试用例

    我有一个 C 项目 正在使用它进行测试捕获 cpp https github com philsquared Catch 我编译并运行以下文件来运行我的测试 define CATCH CONFIG MAIN include catch hp
  • 如何分离多机集群配置的各个阶段?

    假设我有 4 个 Vagrant 盒子 3 种是相同配置的变体 例如 Consul 而一种具有完全不同的配置 例如数据库 我需要在三个配置相似的 Consul VM 上运行一个略有不同的配置步骤 然后 我需要针对其中 1 个 Vault V