Fabric: Ajouter un contexte de tunneling à Fab

Créé le 19 août 2011  ·  13Commentaires  ·  Source: fabric/fabric

La description

Cela me serait très utile car cela me faciliterait la tâche
pour par exemple me connecter à un serveur MySQL distant en utilisant ma ligne de commande
Client MySQL.

Nous pourrions utiliser une déclaration de contexte "avec", quelque chose comme :

with tunnel(local=3307, remote=3306):
    local('mysql --port=3007 --host=localhost' mydb < db/dbdump.sql')

Cela éliminerait le besoin de télécharger le fichier de vidage mysql sur le serveur
juste pour pouvoir exécuter l'importation.

Une autre application pourrait être pour l'administration des serveurs Web Cherokee.

L'administrateur Web Cherokee par défaut n'est accessible qu'à partir du serveur qui
ça tourne. Donc, vous voulez accéder à l'administrateur, vous devez tunnel
dans le serveur et accédez à l'interface d'administration à l'aide d'un port local.
Cela pourrait également être simplifié avec cette fonctionnalité.

with tunnel(local=9090, remote=9090):
   sudo('cherokee-admin')
   prompt('Stop cherokee admin?')

Cette dernière ligne garderait le tunnel ouvert jusqu'à ce qu'il soit fermé en fournissant une entrée.


Initialement soumis par Taras Mankovski (tarasme) le 2009-11-02 à 09h30 HNE

Rapports

  • Lié à #38 : Implémenter le tunneling
Feature Network

Commentaire le plus utile

939 est toujours dans un seau de version, je l'ai juste retiré de la prochaine 1.11 parce que j'avais besoin de couper _certains_ trucs, mais il aura la priorité pour le prochain cycle de fonctionnalités. (Et il semble que # 1218 remplace # 939, donc je finirai probablement par fusionner cela et créditer # 939 dans le journal des modifications.)

Tous les 13 commentaires

Jeff Forcier ( bitprophet ) a posté :


(description modifiée pour que les blocs de code soient en retrait :))


le 2009-11-02 à 09h35 HNE

Ce serait génial si le tunnel supportait également l'inverse. Cela signifie écouter à distance et le transférer vers localhost/autre hôte disponible localement : port.

@munhitsu Je ne sais pas comment c'est un cas d'utilisation spécifique pour Fabric, cependant. Peux-tu élaborer?

Imaginez une configuration DMZ qui n'a pas d'accès http/proxy sortant.
Tout le déploiement passe par la structure.

Dans ce cas, nous pourrions utiliser la structure pour tunneler le proxy local via ssh, afin d'être temporairement accessible pour l'hôte qui vient d'être provisionné dans la DMZ. En ce moment, j'ouvre un tunnel ssh séparé sur la deuxième console, afin que le tissu fonctionne dans le "contexte" de ce tunnel.

exemple d'utilisation :

with rev_tunnel(local=8080, remote=8080):
    sudo("http_proxy='http://localhost:8080' apt-get install -y puppet")

OK, il s'agit donc d'une configuration de tunnel inversé assez standard après tout, je suppose, et votre désir est que Fabric s'occupe de faire le tunnel plutôt que de devoir exécuter par exemple local(ssh -R ...) .

J'ai fait des allers-retours pour savoir si cela valait vraiment la peine d'être intégré au noyau, mais il serait vraiment logique qu'il soit pris en charge dans Fabric proprement dit; les autres solutions sont hacky (par exemple, un thread ou un sous-processus exécutant ssh - comment bien faire cela, assurez-vous qu'il s'arrête lorsque Fab le fait, etc.) et je vois la validité du cas d'utilisation (partage local ressources avec l'extrémité distante pendant l'exécution.)

Le principal obstacle est que je ne suis pas sûr que la bibliothèque SSH le supporte encore ; nous devrons comprendre cela et quelqu'un devrait le mettre en œuvre si ce n'est pas le cas. (Je pense que ce serait un bon ajout à ladite bibliothèque, cependant, par rapport à la solidification de la solution de contournement ssh -R susmentionnée.)

EDIT: # 38 discute de la mise en œuvre et des correctifs, etc. Il serait peut-être préférable de fermer cela et de simplement noter qu'une fois implémenté, il devrait être possible de déclencher avec un gestionnaire de contexte si possible.

Je suis tout à fait d'accord pour dire qu'il est délicat de l'implémenter pour que nous entrions, quittions des contextes ou, pire encore, plusieurs niveaux de contextes.

Concernant EDIT : Tout ce qui nous rapproche de cette fonctionnalité est une bonne idée.

Pour l'instant, je vais laisser cela ouvert, juste pour garder les choses granulaires. Attribué à 1.4 donc je n'oublie pas, cependant. Il y a de fortes chances que j'essaie d'éliminer cela comme je le fais #38. Mettra à jour ici quand il sera en master, merci.

Ce n'est en fait pas aussi lié au n ° 38 que je le pensais, car ses modifications concernent uniquement la passerelle du trafic SSH lui-même, et non la tunnellisation de ports supplémentaires via la connexion SSH. Cela nécessitera une solution différente (ou du moins supplémentaire). Punting pour l'instant, désolé :) (Ce qui signifie : toujours ouvert, mais n'arrivera tout simplement pas en 1.5.)

J'ai récemment eu besoin de cette fonctionnalité pour synchroniser avec un serveur rsync distant dont le port n'est pas directement accessible et j'ai découvert que le code de démonstration forward.py de paramiko avait un exemple de code que je pouvais utiliser, j'ai donc trouvé une solution qui fonctionnait bien pour moi et moi l'a soumis en tant que correctif pour forward.py ici : https://github.com/paramiko/paramiko/pull/504/

Nous pourrions ajouter ForwardServer partir de ce correctif et avoir un local_tunnel() qui renvoie simplement une instance de ForwardServer . Conformément à la recommandation de @bitprophet sur la demande d'extraction, je vais travailler sur un correctif pour Fabric.

En fait, je ne m'en étais pas rendu compte, mais il existe déjà un correctif pour local_tunnel() , bien que je ne sois pas entièrement sûr de son statut. Que dois-je faire?

@haridsv Si vous le pouvez, testez-le et mentionnez que vous l'avez utilisé avec succès, sur ce patch (# 939), cela aiderait, sinon ayez juste de la patience :) merci!

Existe-t-il un plan pour résoudre ce problème ? Il y a deux demandes d'extraction en attente qui résolvent ensemble ce problème, mais elles n'ont pas été examinées ? Comment pourrions-nous accélérer les choses ?

939, #1218

J'ai utilisé le code dans # 1218 sans problème.

939 est toujours dans un seau de version, je l'ai juste retiré de la prochaine 1.11 parce que j'avais besoin de couper _certains_ trucs, mais il aura la priorité pour le prochain cycle de fonctionnalités. (Et il semble que # 1218 remplace # 939, donc je finirai probablement par fusionner cela et créditer # 939 dans le journal des modifications.)

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

SamuelMarks picture SamuelMarks  ·  3Commentaires

supriyopaul picture supriyopaul  ·  4Commentaires

TimotheeJeannin picture TimotheeJeannin  ·  3Commentaires

jamesob picture jamesob  ·  3Commentaires

26huitailang picture 26huitailang  ·  3Commentaires