Бродяга вперед целый ряд портов

20

Есть ли способ переадресации диапазона портов с помощью vagrant 1.2.1 или выше? Я знаю, что вы можете перенаправить любое количество портов по отдельности, используя

config.vm.forward_port 80, 4567

Или ответ просто не использовать vagrant, чтобы сделать такую ​​вещь?

Желудь
источник
Не совсем. Хотел узнать, можете ли вы указать диапазон портов, которые должны быть открыты, а не по одному за раз. Возможно, я свяжусь с автором напрямую.
Желудь
4
Поскольку Vagrantfile - это всего лишь скрипт Ruby, вы можете написать цикл for, который выполняет config.vm.forward_port для каждого порта, который вы хотите. Я не бегло говорю на Ruby, поэтому не могу помочь вам с кодом.
Ласар

Ответы:

27

Если кому-то нужен пример того, как сделать цикл в вашем Vagrantfile, вот он:

for i in 64000..65535
    config.vm.network :forwarded_port, guest: i, host: i
end

Вышеуказанный цикл перенаправит все порты между 64000 и 65535 на один и тот же порт гостевой системы (обратите внимание, что 64000 и 65535 включительно).

ddelrio1986
источник
2
На моем компьютере vagrant было немного долго, чтобы отобразить 1000 портов. Если вам действительно не нужно так много подключенных портов, вы должны сопоставить 50 портов.
Антуан
@ Антуан: Да, я заметил, что это тоже очень медленно. Я обычно заканчиваю тем, что использую от 10 до 20 для блоков разработки.
ddelrio1986
Чрезвычайно медленно проверять используемые порты на окнах, ошибки появляются, когда ограничение командной строки вступает в силу.
Александр T
@AlexanderT сколько портов ты пытаешься переадресовать?
ddelrio1986
@ ddelrio1986 около тысячи.
Александр Т
2

Приведенные выше примеры 'for' правильны для инклюзивного диапазона. Если вы хотите перенаправить набор определенных портов, вам нужно использовать оператор Ruby .each.

Переменные могут находиться внутри или снаружи основного цикла Vagrant.configure.

UDP_PORTS_LIST={
  "5000" => 5000, # Some service
}

TCP_PORTS_LIST={
  "5900" => 5900, # VNC
}

Циклы должны находиться внутри блока Vagrant.configure для виртуальной машины, для которой вы хотите отобразить их (помните, что вы можете иметь несколько виртуальных машин в одном Vagrantfile).

UDP_PORTS_LIST.each do |guest, host|
  config.vm.network "forwarded_port", guest: "#{guest}", host: "#{host}", protocol: "udp"
end
TCP_PORTS_LIST.each do |guest, host|
  config.vm.network "forwarded_port", guest: "#{guest}", host: "#{host}", protocol: "tcp"
end
dragon788
источник