Как запустить командный блок в Vagrant один раз - PullRequest
0 голосов
/ 31 января 2019

Как запустить командный блок в Vagrantfile только один раз.Попробуйте использовать , если , но безуспешно.

Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

$hosts = {
    "node-1" => { memory: 1024, cpus: 2 },
    "node-2" => { memory: 4096, cpus: 2 }
}

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|      
  $hosts.each_with_index do |(hostname, parameters), index|  
    config.vm.define vm_name = hostname do |vm_config|
      vm_config.vm.hostname = hostname

      config.vm.provision "shell", inline: "echo index=#{index}"

      if index == 0
        config.vm.provision "shell", path: "./bootstrap-scripts/node-1.sh"
      end

    end
  end
end

Результат консоли:

==> node-1: Importing base box 'generic/ubuntu1804'...
...
==> node-1: Running provisioner: shell...
    node-1: Running: inline script
    node-1: index=0

==> node-2: Importing base box 'generic/ubuntu1804'...
...
==> node-2: Running provisioner: shell...
    node-2: Running: inline script
    node-2: index=0
==> node-2: Running provisioner: shell...
    node-2: Running: inline script
    node-2: index=1

Цель - запуститьСценарий «./bootstrap-scripts/control.sh» только для первой машины.

1 Ответ

0 голосов
/ 31 января 2019

Из документации vagrant :

Внутренняя часть определений нескольких машин и переопределений провайдеров загружается с отложенной загрузкой.Это может вызвать проблемы, если вы измените значение переменной, используемой в конфигах ...

Внутреннее поведение each_with_index, вероятно, вызовет документированную ошибку, поэтому ваш узел-2 проходит через обаиндексов.Поэтому попробуйте вместо этого использовать имя узла в вашем if.

Также вам нужно использовать vm_config, а не config, если вы хотите, чтобы поставщик услуг подал заявку на каждый узел.

...