Vagrant en avant une gamme de ports

20

Existe-t-il un moyen de transférer une gamme de ports en utilisant vagrant 1.2.1 ou supérieur? Je sais que vous pouvez transférer n'importe quel nombre de ports individuellement en utilisant

config.vm.forward_port 80, 4567

Ou, la réponse est-elle simplement de ne pas utiliser vagabond pour faire une telle chose?

Gland
la source
Pas exactement. Je voulais savoir si vous pouvez spécifier une plage de ports à ouvrir, plutôt qu'un à la fois. Je vais peut-être contacter directement l'auteur.
Acorn
4
Étant donné que le Vagrantfile n'est qu'un script Ruby, vous pourrez peut-être écrire une boucle for qui exécute config.vm.forward_port pour chaque port souhaité. Je ne parle pas couramment Ruby, donc je ne peux pas vraiment vous aider avec le code.
Lasar

Réponses:

27

Si quelqu'un a besoin d'un exemple de la façon de faire la boucle dans votre Vagrantfile, c'est:

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

La boucle ci-dessus transmettra tous les ports entre 64000 et 65535 au même port exact sur l'invité (notez que 64000 et 65535 sont inclus).

ddelrio1986
la source
2
Sur mon ordinateur vagabond était un peu long pour mapper 1000 ports. Sauf si vous avez vraiment besoin d'autant de ports mappés, vous devez mapper 50 ports.
Antoine
@Antoine oui, j'ai aussi remarqué que c'est très lent. Normalement, je finis par utiliser 10 à 20 pour les boîtes de développement.
ddelrio1986
Extrêmement lent à vérifier les ports utilisés sur Windows, les erreurs disparaissent une fois que la limitation de la ligne de commande entre en jeu.
Alexander T
@AlexanderT combien de ports essayez-vous de transférer?
ddelrio1986
@ ddelrio1986 environ un millier.
Alexander T
2

Les exemples «pour» ci-dessus sont corrects pour faire une plage inclusive. Si vous souhaitez transférer un ensemble de ports spécifiques, vous devez utiliser l'opérateur Ruby .each.

Les variables peuvent aller à l'intérieur ou à l'extérieur de la boucle principale de Vagrant.configure.

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

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

Les boucles doivent aller à l'intérieur du bloc Vagrant.configure pour la machine virtuelle pour laquelle vous souhaitez les mapper (rappelez-vous que vous pouvez avoir plusieurs machines virtuelles dans un seul fichier 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
la source