Mes débuts avec le Python

Dernièrement, dans le but de commencer à comprendre tout ce qui tourne autour de l’automatisation du réseau, j’ai testé LE langage qu’il faut connaitre en ce moment: Python. Pas le serpent, mais bien du langage de programmation. Ayant de bonnes bases de PHP, je n’ai pas été dérouté et j’ai pu faire quelques petits tests assez puissants très rapidement (en trouvant facilement des exemples via Google) sans devoir monter des usines à Gaz. Voici quelques informations pour ceux qui voudraient s’y mettre.

Pourquoi Python ?

Pourquoi s’intéresser au python, plutôt qu’un autre langage ?
– Il est simple à apprendre (c’est très proche de ce que j’ai pu faire en PHP donc je ne suis pas dans un monde inconnu).
– Il est rapide à écrire – C’est un langage interprété, il n’est donc pas nécessaire de le compiler afin d’avoir le résultat (tout comme PHP, ce qui me convient très bien car mes expériences passées avec le Java et le C# ne sont pas des plus agréables).
– Il est mature et largement supporté – Des milliers de packages existent et python existe depuis des années (1991, il est donc presque aussi vieux que moi) et surtout beaucoup de packages intéressants pour nous les ingénieurs réseaux tel que CiscoConfParse que je viens de découvrir (une tuerie !).
– Il est supporté par de nombreux vendeurs – Dont Cisco et Juniper qui fournissent des API Python pour leurs OS, et c’est le point qui m’intéresse le plus coté pro car je m’intéresse à l’automatisation des Nexus 9k en ce moment, c’est LE langage à connaitre pour les ingénieurs réseaux.

Que faire avec Python ?

De nombreuses choses, dont notamment des scripts de configurations qui vous éviterons de nombreux copié/collé. J’utilisais beaucoup Excel jusqu’ici pour les templates de gros déploiements, mais Python peut faire ce genre de travail très simplement.

Vous pouvez aussi envoyer/recevoir des mails, consulter et envoyer des informations dans une base de donnée, envoyer/recevoir et créer des paquets avec Scapy (http://packetlife.net/blog/2011/may/23/introduction-scapy/), récupérer une table de routage sur un Nexus 9000 avec NX-API (http://keepingitclassless.net/2014/02/cisco-aci-nexus-9000-nxapi/) .

Je parlais dans le paragraphe précédent de CiscoConfParse (disponible ici: https://pypi.python.org/pypi/ciscoconfparse/ et le site de l’auteur avec la documentation est ici), avec cet outil, vous pouvez par exemple standardiser la configuration des ports d’accès de centaines, ou milliers Switchs en quelques secondes ! Par exemple ajouter la commande « spanning-tree portfast » sur tous les ports étant en mode « access » qui n’ont pas déjà cette commande. Imaginez le temps qu’il est possible de gagner! Vous n’avez qu’a récupérer les show run des Switchs existants en INPUT, et il vous fournis la configuration à pousser en OUTPUT. En allant un peu plus loin, il doit être possible d’automatiser facilement le processus en ajoutant un peu de code pour se connecter en SSH, récupérer le « show run » et envoyer les modifications automatiquement.

Comment apprendre ?

J’utilise le cours de Google for Education disponible gratuitement ici: https://developers.google.com/edu/python. J’ai pu apprendre comment installer le package sur Windows et tester mes premiers scripts, apprivoiser la syntaxe (plutôt simple au premier abord). Les mini labs de Google sont vraiment bien faits et vous permettent d’apprivoiser le protocole très rapidement.

De nombreux autres sites recommandent le site « Learn Python the Hard Way » disponible ici http://learnpythonthehardway.org/ , il à le mérite d’être disponible gratuitement en ligne, il existe aussi en version papier sur Amazon. Mais j’ai trouvé le Google for Education très bien fait au premier abord, à vous de voir.

Comment l’installer ?

Allez télécharger le package ici: https://www.python.org/downloads/

Pour plus de simplicité par la suite, il va falloir modifier la variable d’environnement dans Windows 7 (c’est ce que j’ai sur mon PC), cela va vous permettre de pouvoir exécuter des scripts en tapant directement « Python » dans le prompt. Voici comment faire:
1. Clic droit sur l’ordinateur > Propriétés > Propriétés Avancées > Variables d’environnements. Aller dans la partie System variables, trouver la variable « PATH » et cliquer sur « Edit ».
2. Aller a la fin de la ligne et y ajouter « ;C:\Python34″ (Attention le nom du dossier change en fonction de la version que vous installez, vérifiez au préalable le numéro de votre dossier dans C:)

Pour aller plus loin

De nombreuses « stars » du réseau sont présentes sur le site Github, un site qui propose de partager du code entre amis, vous pouvez y déposer vos propres librairies et les exposer au monde entier. Mais vous pouvez surtout y trouver du code facilement, open-source! L’occasion pour les débutants comme moi de voir à quoi ressemblent de vrais scripts.

Voici quelques références à suivre :

Si vous êtes sur Github, n’hésitez pas à le dire dans les commentaires, je vous ajouterais dans cette liste!
Le miens est encore vide, mais je compte bien y poster mes premiers bouts de codes dans quelques jours.

Si vous codez vous-même en Python et que vous avez pris la peine de lire jusqu’au bout, merci, et n’hésitez pas à me laisser en commentaire vos meilleurs ressources pour aller plus loin avec ce langage ;)

Sources
Packetlife : http://packetlife.net/blog/2014/mar/27/learn-python/
Python: https://www.python.org/downloads/
Google for Education: https://developers.google.com/edu/python

Benoit

Network engineer CCIE #47705, focused on R&S, Data Center and SDN.

More Posts - Website

Follow Me:
TwitterLinkedIn

5 Comments

  1. Clucas 7 mai 2015

    Ça peut être sympa avec scappy aussi ;-p

    A+
    Christophe

  2. CASSERT Maxence 11 mai 2015

    Bonjour,

    Je te conseille les cours gratuits de Kirk Byers dédiés aux ingénieurs réseaux (https://pynet.twb-tech.com).

    Bonne continuation.

  3. Benoit 11 mai 2015

    Effectivement, je n’en ai pas parlé dans l’article mais Kirk propose de très bons articles sur son site, et également des cours (payants il me semble).

  4. Alex 11 mai 2015

    Salut,

    Petite correction pour commencer Python est un langage et non un protocole (je sais on a été traumatisé mais un chat reste un chat)

    Coup de pouce pour « En allant un peu plus loin, il doit être possible d’automatiser facilement le processus en ajoutant un peu de code pour se connecter en SSH, récupérer le « show run » et envoyer les modifications automatiquement. »

    Sous Windows tu as les utilitaires plink et psftp (programmes complémentaires de putty http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
    psftp te permet d’effectuer des opérations … ftp via ssh dans un terminal (poser / récupérer des fichiers)
    plink te permet d’exécuter tes commandes distantes depuis ton poste sur l’Unix/Linux distant (je te laisse lire la doc elle est courte)

    Sous python si tu veux t’amuser à exécuter des process de façon propre et qui te permettent d’avoir ce que tu veux (le résultat de ta commande, son retour ou autre) tu peux utiliser subprocess https://docs.python.org/3/library/subprocess.html?highlight=subprocess#module-subprocess

    Et bravo pour ta CCIE.

    Alex.

  5. Benoit 11 mai 2015

    Merci Alex pour ce commentaire constructif! Pour le « protocole » je modifie ça dès que possible, c’est effectivement une erreur.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>