[PYTHON] J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 1: Aperçu

Ceci est l'article du premier jour de NetOpsCoding AdventCalendar2016. Il reste de la place, donc si quelqu'un peut écrire un article, rejoignez-nous! NetOpsCoding Advent Calendar 2016

Cela ne doit pas être difficile. Cela peut être un article émotionnel plein de passion. Peu importe que ce soit une simple et petite astuce. (Des pourboires plutôt petits sont appréciés). S'il y a des gens qui sont frustrés par le fonctionnement du réseau, je serais très heureux en tant que personne du codage NetOps si vous pouviez faire le premier pas de l'automatisation comme l'un des déclencheurs.

Aperçu

Nous avons invité Juniper à l'annoncer le 1er décembre lors d'un événement appelé "Juniper Cloud Builder Community 2016".

Quant au contenu de l'annonce, PyEZ et JSNAPy que Juniper a publié en tant que logiciel ouvert ) Est utilisé pour vérifier s'il peut être utilisé dans le site d'exploitation réseau réel du FAI.

Les matériaux utilisés pour la présentation sont ici. Possibilité de fonctionnement réseau de nouvelle génération avec JSNAPy et PyEZ

Étant donné que l'annonce a pris 25 minutes, je pouvais à peine présenter les détails des outils et des exemples de code, je vais donc en présenter les détails dans ce blog.

Pour conclure d'abord, PyEZ et JSNAPy sont des logiciels d'automatisation du travail de configuration des routeurs et sont des outils très puissants. Le logiciel peut remplacer presque la même procédure que le travail manuel.

Lorsque j'ai rédigé les échantillons et le savoir-faire, le montant était trop important, alors j'écris le blog dans les quatre parties suivantes.

Enfin, j'ai réalisé le programme de démonstration suivant. Le côté droit de l'écran est le périphérique cible Firefly (le côté supérieur droit de Firefly1 est la cible de réglage), et le côté gauche de l'écran est l'outil d'automatisation. Introduit dans la "Partie 4: Automatisation du travail de configuration du FAI avec PyEZ et JSNAPy".

demo_v4.gif

Présentation de PyEZ

PyEZ est une bibliothèque Python pour la reconfiguration des routeurs JUNOS. En plus de charger et de valider la configuration, il a exactement les mêmes fonctions que la procédure de configuration manuelle du routeur.

Lors de l'automatisation des paramètres du routeur, il existe de nombreux besoins tels que «Je veux effectuer des paramètres automatiques avec exactement la même procédure que les paramètres manuels», donc je suis très reconnaissant de «pouvoir faire exactement la même chose que les paramètres manuels sans dégrader». .. (De manière inattendue, il existe de nombreux outils d'automatisation qui ont des restrictions sur les fonctions disponibles et les méthodes de réglage.)

Présentation de JSNAPy

JSNAPy est un outil qui prend et gère l'état du routeur JUNOS comme un instantané et détermine s'il correspond aux conditions prédéfinies. En termes simples, JSNAPy facilite la mise en œuvre d'outils de test. "Renvoie" Réussi "lorsque l'interface xe-0 / 0/0 est active" "Échec" lorsque les informations d'itinéraire de l'état 2 augmentent plus que prévu pour l'état 1. Vous pouvez dire «passer») «retourner».

Etre capable d'écrire des tests est très puissant pour automatiser la configuration du routeur. Il va sans dire qu'il est important de confirmer que "l'état après le réglage fonctionne normalement" dans le travail de réglage du routeur. Étant donné que la portée d'impact du service du routeur est grande, il est difficile de voir si "le paramètre a échoué et le réseau a disparu".

Cependant, l'automatisation de ce processus de normalisation est en fait une tâche très, très laborieuse. «Pour toutes les commandes de routeur entrées par l'interface de ligne de commande du routeur, définissez tous les modèles de résultats de sortie qui peuvent être renvoyés par le routeur, extrayez la chaîne de caractères cible avec une expression régulière et déterminez si elle correspond aux conditions prédéfinies. C'est tout ce qu'il y a à dire, "Le nombre de modèles qui peuvent être générés au moment d'une erreur est énorme et ne peut pas être défini." "Le résultat de sortie diffère légèrement selon le modèle / la version du système d'exploitation." "Le programme est un tas d'expressions régulières." Il existe de nombreux obstacles, tels que "Il sera impossible pour quiconque autre que le réalisateur de le maintenir". Si vous êtes intéressé par les difficultés autour de cela, veuillez vous y référer tel qu'il a été présenté sur le blog de @ stéréocat. (Le simple fait de le regarder me fait mal au ventre) Mauvais savoir-faire en matière d'automatisation NW basée sur CLI

Je suis très reconnaissant que l'utilisation de JSNAPy éliminera la difficulté d'implémentation d'outils de test. Il est difficile de dire si tous les défis que j'ai mentionnés plus tôt seront plus faciles, mais je suis sûr que la plupart seront plus faciles.

L'absence d'une version de routeur équivalente à l'outil de test Serverspec en termes de serveurs est l'un des facteurs majeurs qui rendent aujourd'hui difficile l'automatisation des opérations réseau. J'attends donc vraiment avec impatience l'apparition d'un outil de test comme celui-ci JSNAPy.

Concept de multi-fournisseur

Avant de présenter PyEZ et JSNAPy en détail, je voudrais parler un peu de l'automatisation.

Certaines organisations exploitant le réseau peuvent critiquer que «l'automatisation avec l'outil dédié de Juniper ne sera pas deux fois moins efficace si elle ne peut pas être exploitée par les routeurs d'autres entreprises». C'est exactement ça. Les outils présentés ci-dessus ne fonctionneront qu'avec les routeurs JUNOS. Bien sûr, il existe de nombreux périphériques réseau autres que Juniper dans mon organisation. Bien entendu, les outils Juniper ci-dessus ne peuvent pas prendre en charge tous les appareils.

Cependant, dans l'automatisation des opérations réseau, il est très difficile à ce stade de viser à ce que tous les fournisseurs répondent soudainement. C'est parce qu'il n'y a pas beaucoup de logiciels ouverts disponibles pour tous les produits multifournisseurs à l'heure actuelle. (Pour le moment, il semble que des API tierces comme Ansible et NAPALM visent cette position, mais vous devez faire attention car chaque appareil est apte à répondre aux exigences fonctionnelles que vous souhaitez automatiser.)

Je pense que chacun a ses propres idées sur la façon de réaliser un support multi-fournisseurs, donc je ne vais pas en discuter ici, mais comme mon idée personnelle pour le moment, je vais procéder à l'examen et à la vérification selon le flux suivant. Je pense que ça ira bien.

  1. Tout d'abord, concentrez-vous sur un produit et examinez le mécanisme d'automatisation du travail de l'opération-> mise en œuvre-> vérifier et établir la politique d'exploitation.
  1. Après la mise en œuvre 1., si vous êtes sûr de la politique d'automatisation du travail, envisagez-> implémentation-> vérifiez si le même mécanisme peut être appliqué aux produits d'autres fournisseurs.
  2. Si la méthode existante ne fonctionne pas dans 2., essayez d'implémenter la version alternative en imitant le mécanisme utilisé dans 1. S'il est difficile à mettre en œuvre par une seule personne, trouver un collaborateur à la fois à l'intérieur et à l'extérieur de l'entreprise

Comme mentionné ci-dessus, j'imagine que la mise en œuvre d'outils compatibles multi-fournisseurs progressera si l'on peut commencer par la partie qui est facile à automatiser et enfin créer un flux proche du développement logiciel open source. En fait, il existe également un outil appelé NAPALM en tant que bibliothèque compatible avec plusieurs fournisseurs qui est implémentée avec de telles idées.

NAPALM a été introduit dans les blogs précédents, alors jetez un œil si vous êtes intéressé.

Sur la base de cette idée, dans mon cas

  1. Tout d'abord, créez un mécanisme pour essayer et vérifier l'automatisation avec les produits Juniper, qui disposent d'un mécanisme et de documents d'automatisation réseau abondants. (Cette annonce / blog est ciblée ici)
  2. Une fois que la méthode d'automatisation des produits Juniper aura été affinée, nous chercherons des moyens d'étendre / d'appliquer le mécanisme à d'autres produits de fournisseurs.
  1. Lorsque la perspective de l'introduction de la production au fonctionnement du réseau est établie, approfondissez les discussions à l'intérieur et à l'extérieur de l'entreprise en divulguant des idées et des résultats de vérification à la communauté externe, et affinez encore les idées et les méthodes de mise en œuvre.

Avec cette idée, nous faisons progresser la politique de développement automatisé.

Bien que l'introduction soit devenue longue, je présenterai l'usage spécifique de PyEZ et JSNAPy à partir de la prochaine fois.

J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 2: J'ai essayé d'utiliser PyEZ

Recommended Posts

J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 1: Aperçu
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 2: J'ai essayé d'utiliser PyEZ
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 4: Automatisez la configuration du FAI avec PyEZ et JSNAPy
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé d'utiliser aiomysql
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé d'utiliser google test et CMake en C
J'ai essayé d'ajouter un post-incrément à CPython. Présentation et résumé
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé d'utiliser git inspector
J'ai essayé d'utiliser magenta / TensorFlow
J'ai essayé d'utiliser AWS Chalice
J'ai essayé d'utiliser l'émojinateur Slack
J'ai essayé d'obtenir les informations du Web en utilisant "Requests" et "lxml"
J'ai essayé de ramper et de gratter le site de courses de chevaux Partie 2
J'ai essayé d'utiliser Rotrics Dex Arm # 2
J'ai essayé d'utiliser Rotrics Dex Arm
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé de communiquer avec le client serveur en utilisant tmux
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'utiliser le notebook jupyter d'une manière ou d'une autre
[Kaggle] J'ai essayé le sous-échantillonnage en utilisant un apprentissage déséquilibré
J'ai essayé de photographier une vague de tortue en utilisant OpenPose
J'ai essayé d'utiliser l'API checkio
J'ai essayé le traitement asynchrone en utilisant asyncio
J'ai essayé d'utiliser l'API de reconnaissance vocale docomo et l'API Google Speech en Java