Попытка перебрать хеш для 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
Другие вопросы по тегам