Vagrant encaminhar uma gama de portas

20

Existe uma maneira de encaminhar uma série de portas usando o vagrant 1.2.1 ou superior? Eu sei que você pode encaminhar qualquer número de portas individualmente usando

config.vm.forward_port 80, 4567

Ou a resposta simplesmente não usa vagabundos para fazer uma coisa dessas?

Bolota
fonte
Não exatamente. Queria saber se você pode especificar um intervalo de portas a serem abertas, em vez de uma por vez. Talvez eu entre em contato diretamente com o autor.
Acorn
4
Como o Vagrantfile é apenas um script Ruby, você pode escrever um loop for que executa config.vm.forward_port para todas as portas que você deseja. Eu não sou fluente em Ruby, então não posso realmente ajudá-lo com o código.
Lasar

Respostas:

27

Se alguém precisar de um exemplo de como fazer o loop no seu arquivo Vagrant, aqui está:

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

O loop acima encaminhará todas as portas entre 64000 e 65535 para a mesma porta exata no convidado (observe que 64000 e 65535 são inclusivas).

ddelrio1986
fonte
2
No meu computador, o vagrant era um pouco longo para mapear 1000 portas. A menos que você realmente precise de tantas portas mapeadas, você deve mapear 50 portas.
Antoine
@ Antonine sim, eu notei que é muito lento também. Normalmente, acabo usando de 10 a 20 para caixas de desenvolvimento.
Ddelrio1986
Extremamente lento para verificar as portas usadas em janelas, erros de uma vez a limitação de linha de comando entra em ação.
Alexander T
@AlexanderT, quantas portas você está tentando encaminhar?
Ddelrio1986
@ ddelrio1986 cerca de mil.
Alexander T
2

Os exemplos 'for' acima estão corretos para realizar um intervalo inclusivo. Se você deseja encaminhar um conjunto de portas específicas, é necessário usar o operador Ruby .each.

As variáveis ​​podem ir dentro ou fora do loop principal do Vagrant.configure.

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

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

Os loops precisam ir para dentro do bloco Vagrant.configure da VM para a qual você deseja mapeá-los (lembre-se de que você pode ter várias VMs em um único arquivo Vagrant).

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
fonte