Попытка перебрать хеш для Vagrant-боксов, не удалось
Хорошо, я очень новичок в Ruby (я из PHP, Symfony2 и AngularJS) и относительно нов в правильном написании Vagrantfiles. Я пытаюсь создать среду с несколькими машинами, стараясь придерживаться принципов СУХОЙ.
Когда я прочитал, что Vagrantfiles понимают синтаксис Ruby, я увидел, как Ruby определяет ассоциативные массивы. Это оказалось довольно легко, по-видимому, нет.
Мой Vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
#hash for boxes: 'box_name' => 'last_ip_octet'
boxes = {
'frontend' => '10',
'qp' => '11'
}
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "chef/ubuntu-14.04"
#All machines, see the hash defined in top of the Vagrantfile for all the boxes
boxes.each do |key, value|
config.vm.define "#{key}.qp" do |#{key}_qp|
#{key}_qp.vm.network "private_network", ip: "192.168.51.#{value}"
#{key}_qp.vm.provision "shell", path: "../provisioning/agentinstall.sh"
#{key}_qp.vm.synced_folder "./share/#{key}.qp", "/var/www/html"
end
end
end
Моя проблема гласит следующее:
There is a syntax error in the following Vagrantfile. The syntax error
message is reproduced below for convenience:
/Users/Zowie/Documents/vagrant/project/temp/Vagrantfile:30: syntax error, unexpected keyword_end, expecting '|'
end
^
К сожалению, я не могу найти никакой информации об использовании Хэшей или чего-либо подобного в Vagrantfiles. Я действительно надеюсь, что вы можете мне помочь, потому что я не чувствую себя хорошо, когда пишу супер-длинный Vagrantfile с большим количеством повторений...
Заранее спасибо!
1 ответ
Сайт Stackru ответил на мой вопрос для меня! Благодаря функции блока кода Stackru, я заметил, что мои машинные конфигурации были закомментированы, потому что я использовал '#'.
Я исправил это, используя следующий синтаксис в моем цикле (который также легче читать):
boxes.each do |key, value|
config.vm.define "#{key}.qp" do |node|
node.vm.network "private_network", ip: "192.168.51.#{value}"
node.vm.provision "shell", path: "../provisioning/agentinstall.sh"
node.vm.synced_folder "./share/#{key}.qp", "/var/www/html"
end
end