Как разделить этапы подготовки кластера с несколькими машинами? - PullRequest
0 голосов
/ 27 сентября 2018

Допустим, у меня есть 4 ячейки Vagrant.

3 - варианты одной и той же конфигурации, скажем, Consul, и одна имеет совершенно другую конфигурацию, скажем, базу данных.

Мне нужно выполнить этап подготовки с небольшими изменениями на трех одинаково настроенных виртуальных машинах Consul.

Затем мне нужно выполнить этап подготовки к одной из этих виртуальных машин Vault.

Только после выполнения этого шага инициализации на 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-Консул)
ФИНАЛЬНЫЙ
ПЕРВЫЙ
ФИНАЛЬНЫЙ
ПЕРВЫЙ
ФИНАЛЬНЫЙ
DB

То, что я ищу, больше похоже на это: FIRST
FIRST
FIRST (достигнут кворум с 3 консулами)
SECOND (вызов API)
FINAL
FINAL
FINAL
DB

Я также собираюсь исследовать это с помощью файла .yaml и иерархий Vagrantfile.

Этот ответ, кажется, указывает на то, что то, что я ищу, невозможно с помощью простого Vagrantfile, но это было 2 года назад: https://stackoverflow.com/a/25065243/2146138

И этот ответ на первый взгляд выглядел многообещающим, но, кажется, фокусируется в основном на Ansible:

Vagrant multi-machine Provisioning

Основная проблема, мотивирующая этот вопрос, для меня, по крайней мере, состоит в том, что все 3 машинынеобходимо подготовить для Консульского кластера "Кворум".

После получения «Кворума» с тремя консулами необходимо выполнить один вызов для API-интерфейса кластера консулов, чтобы получить ACL-доступ к нему.

После этого вызова предоставление других услуг может продолжаться должным образом,и они могут зарегистрироваться во вновь инициализированном и ACL'd Consul Cluster.

Несмотря на мою конкретную проблему с мотивацией, мне любопытно узнать о возможностях функций Vagrant DSL для управления несколькими машинами в подобных случаях, потому что я подозреваю, что это снова возникнет.

...