Допустим, у меня есть 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 для управления несколькими машинами в подобных случаях, потому что я подозреваю, что это снова возникнет.