Vagrant dhcp: получить IP-адреса

Добрый день!
Я хочу подключить несколько узлов с помощью DHCP. Но я также хочу получить ip-адреса этих узлов и записать их в файл. Документы Vagrant говорят: «IP-адрес можно определить, используя бродячий ssh ​​для SSH на машине и используя соответствующий инструмент командной строки для поиска IP, например, ifconfig».

Поэтому я создал простой bash-скрипт для мастера.

`vagrant ssh master -c 'ifconfig | grep -oP "inet addr:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | grep -oP "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | tail -n 2 | head -n 1'`

и такие же скрипты для других узлов.

Я хочу поместить эти скрипты в Vagrantfile. Какой плагин мне следует использовать? Я пытаюсь использовать https://github.com/emyl/vagrant-triggers.

config.trigger.after :up do
   ipAddr = `vagrant ssh master -c 'ifconfig | grep -oP "inet addr:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | grep -oP "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | tail -n 2 | head -n 1'`
   puts "master ipAddr #{ipAddr}"
   ipAddr = `vagrant ssh slave01 -c 'ifconfig | grep -oP "inet addr:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | grep -oP "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | tail -n 2 | head -n 1'`
   puts "slave01 ipAddr #{ipAddr}"
end

Но он срабатывает, когда работает один из узлов, а не оба.


person V. Artyukhov    schedule 23.04.2014    source источник


Ответы (1)


Я изменил ваш подход к работе с многоблочной установкой с помощью плагина vagrant-triggers. Вот что сработало для меня:

# Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network :private_network, type: "dhcp"
  config.vm.define "test-web"
  config.vm.define "test-db"
  config.vm.define "test-dual"
  config.trigger.after :up, :stdout => false, :stderr => false do
    get_ip_address = %Q(vagrant ssh #{@machine.name} -c 'ifconfig | grep -oP "inet addr:\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | grep -oP "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}" | tail -n 2 | head -n 1')
    @logger.debug "Running `#{get_ip_address}`"
    output = `#{get_ip_address}`
    @logger.debug "Output received:\n----\n#{output}\n----"
    puts "==> #{@machine.name}: Available on DHCP IP address #{output.strip}"
    @logger.debug "Finished running :after trigger"
  end  
end

# Console:
$ vagrant up test-web
Bringing machine 'test-web' up with 'virtualbox' provider...
==> test-web: Checking if box 'ubuntu/trusty64' is up to date...
==> test-web: Resuming suspended VM...
==> test-web: Booting VM...
==> test-web: Waiting for machine to boot. This may take a few minutes...
    test-web: SSH address: 127.0.0.1:2222
    test-web: SSH username: vagrant
    test-web: SSH auth method: private key
    test-web: Warning: Connection refused. Retrying...
==> test-web: Machine booted and ready!
==> test-web: Running triggers after up...
Connection to 127.0.0.1 closed.
==> test-web: Available on DHCP IP address 172.28.128.3
person Chris Bloom    schedule 03.03.2015
comment
Привет, Крис. Когда я запускаю приведенный выше код, я получаю следующую ошибку. У вас есть идеи? code vagrant validate Не удалось инициализировать Vagrant на очень ранней стадии: произошла ошибка при загрузке Vagrantfile. Загружаемый файл и сообщение об ошибке показаны ниже. Обычно это вызвано недопустимой или неопределенной переменной. Путь: /Users/Sunil/Vagrantfile Номер строки: 0 Сообщение: неопределенное имя метода - person Sunil Gajula; 16.01.2019
comment
бродячая версия Установленная версия: 2.1.5 Последняя версия: 2.2.3 @stackoverflow.com/users/83743/chris-bloom - person Sunil Gajula; 16.01.2019