Vagrant przekazuje szereg portów

20

Czy istnieje sposób na przekazanie szeregu portów za pomocą Vagrant 1.2.1 lub nowszego? Wiem, że możesz przekierowywać dowolną liczbę portów indywidualnie, używając

config.vm.forward_port 80, 4567

A może odpowiedź jest prosta: nie używaj włóczęgi do robienia takich rzeczy?

Żołądź
źródło
Nie dokładnie. Chciałem wiedzieć, czy możesz określić zakres portów, które mają być otwarte, a nie jeden na raz. Być może skontaktuję się bezpośrednio z autorem.
Acorn
4
Ponieważ plik Vagrantfile jest tylko skryptem Ruby, możesz być w stanie napisać pętlę for wykonującą config.vm.forward_port dla każdego portu, który chcesz. Nie mówię płynnie w Ruby, więc nie mogę ci pomóc w kodzie.
Lasar

Odpowiedzi:

27

Jeśli ktoś potrzebuje przykładu wykonania pętli w pliku Vagrantf tutaj:

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

Powyższa pętla przekieruje wszystkie porty między 64000 a 65535 do dokładnie tego samego portu gościa (zauważ, że 64000 i 65535 są włącznie).

ddelrio1986
źródło
2
Na moim komputerze włóczęga trochę zmapował 1000 portów. O ile tak naprawdę nie potrzebujesz tak wielu mapowanych portów, powinieneś zmapować 50 portów.
Antoine,
@Antoine tak Zauważyłem, że jest również bardzo wolny. Zwykle używam od 10 do 20 na pudełka programistyczne.
ddelrio1986,
Niezwykle wolno sprawdza się używane porty w systemie Windows, błędy znikają po uruchomieniu ograniczenia wiersza poleceń.
Alexander T
@AlexanderT ile portów próbujesz przekazać?
ddelrio1986
@ ddelrio1986 około tysiąca.
Alexander T
2

Powyższe przykłady „for” są poprawne dla wykonania zakresu obejmującego. Jeśli chcesz przekazać zestaw określonych portów, musisz użyć operatora Ruby .each.

Zmienne mogą wchodzić do lub poza główną pętlę Vagrant.configure.

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

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

Pętle muszą wejść do bloku Vagrant.configure dla maszyny wirtualnej, dla której chcesz je zamapować (pamiętaj, że możesz mieć wiele maszyn wirtualnych w jednym pliku 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
źródło