Запустить динамическое число провайдеров оболочки на одной и той же виртуальной машине в Vagrant, не меняя Vagrantfile? - PullRequest
0 голосов
/ 25 сентября 2018

Я пишу Vagrantfile для настройки виртуальной машины.Есть некоторые параметры конфигурации, которые я не хочу жестко кодировать в Vagrantfile, такие как память и количество процессоров.Как следствие, я использую файл YAML, который загружается в Vagrantfile для хранения этих параметров конфигурации.Одна вещь, которая хранится в файле YAML, - это список сценариев поставщика оболочки для запуска.Например:

---
machine_config:
  mem: 2048
  cpus: 2
  provisioners:
    -name: shell-script-1
     path: <path-to-shell-script-1>
    -name: shell-script-2
     path: <path-to-shell-script-2>
---

Число инициаторов неизвестно априори: в YAML выше их два, но это только пример.Я хотел бы иметь Vagrantfile, который может запускать всех провайдеров в файле YAML.Я имею в виду, что я хочу иметь возможность добавлять / удалять провайдеров в файл YAML, не касаясь Vagrantfile, однако Vagrantfile должен корректно запускать все провайдеры в файле YAML.Я искал в Google, и есть много примеров того, как запускать тех же жестко закодированных провайдеров на динамическом количестве виртуальных машин, но не смог найти ни одного для моей проблемы.

Что я хотел бы сделать, написано вСинтаксис псевдо-vagrantfile:

require "yaml"

current_dir = File.dirname(File.expand_path(__FILE__))
yaml_config = YAML.load_file("#{current_dir}/machine_config.yaml")
machine_config = yaml_config["machine_config"]
additional_scripts = machine_config["provisioners"]

Vagrant.configure("2") do |config|
  config.vm.box = <vm-box-to-use>

  for each item $script in additional_scripts do 
    config.vm.provision "shell", path: $script["path"] 
  end

end

, где machine_config.yaml - это файл YAML, подобный файлу в первом примере этого вопроса, а $ script - переменная, которая на каждой итерации цикла содержитПоставщик среди тех, которые описаны в machine_config.yaml.Как последнее замечание, я ничего не знаю о Ruby и синтаксисе Ruby (возможно, для кого-то с таким знанием ответ на мой вопрос тривиален, но я не могу найти его, прибегая к помощи гугла).

1 Ответ

0 голосов
/ 25 сентября 2018

Следующее будет работать

require "yaml"

current_dir = File.dirname(File.expand_path(__FILE__))
yaml_config = YAML.load_file("#{current_dir}/machine_config.yaml")
machine_config = yaml_config["machine_config"]

Vagrant.configure("2") do |config|
  config.vm.box = "<vm-box-to-use>"

  machine_config["provisioners"].each do |script|
    config.vm.provision "shell", name: script['name'], path: script['path']
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...