[PYTHON] Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 1: Übersicht

Dies ist der erste Tagesartikel von NetOpsCoding AdventCalendar2016. Es ist noch Platz vorhanden. Wenn also jemand einen Artikel schreiben kann, machen Sie mit! NetOpsCoding Advent Calendar 2016

Es muss nicht schwierig sein. Es kann ein emotionaler Artikel voller Leidenschaft sein. Es spielt keine Rolle, ob es sich um einen einfachen und kleinen Tipp handelt. (Eher kleine Tipps sind erwünscht). Wenn jemand mit dem Netzwerkbetrieb frustriert ist, würde ich mich als Person in NetOps Coding sehr freuen, wenn Sie den ersten Schritt der Automatisierung als einen der Auslöser nehmen könnten.

Überblick

Wir haben Juniper eingeladen, dies am 1. Dezember bei einer Veranstaltung namens "Juniper Cloud Builder Community 2016" bekannt zu geben.

Was den Inhalt der Ankündigung betrifft, PyEZ und JSNAPy, die Juniper als offene Software veröffentlicht hat ) Wird verwendet, um zu überprüfen, ob es am tatsächlichen Netzwerkbetriebsstandort des ISP verwendet werden kann.

Die für die Präsentation verwendeten Materialien finden Sie hier. Möglichkeit des Netzwerkbetriebs der nächsten Generation mit JSNAPy und PyEZ

Da die Ankündigung 25 Minuten dauerte, konnte ich die Details der Tools und des Beispielcodes kaum vorstellen, daher werde ich die Details in diesem Blog vorstellen.

Zunächst einmal sind PyEZ und JSNAPy Software zur Automatisierung der Routerkonfiguration und sehr leistungsfähige Tools. Software kann fast das gleiche Verfahren wie manuelle Arbeit ersetzen.

Als ich die Beispiele und das Know-how schrieb, war die Menge zu groß, deshalb schreibe ich den Blog in den folgenden vier Teilen.

Schließlich habe ich das folgende Demo-Programm gemacht. Die rechte Seite des Bildschirms ist das Zielgerät Firefly (die obere rechte Seite Firefly1 ist das Einstellungsziel) und die linke Seite des Bildschirms ist das Automatisierungswerkzeug. Eingeführt in "Teil 4: Automatisieren der ISP-Setup-Arbeit mit PyEZ und JSNAPy".

demo_v4.gif

PyEZ-Übersicht

PyEZ ist eine Python-Bibliothek zum Neukonfigurieren von JUNOS-Routern. Zusätzlich zum Laden und Festschreiben der Konfiguration hat sie genau die gleichen Funktionen wie das manuelle Einstellen des Routers.

Bei der Automatisierung von Router-Einstellungen gibt es viele Anforderungen, z. B. "Ich möchte automatische Einstellungen mit genau dem gleichen Verfahren wie manuelle Einstellungen durchführen". Daher bin ich sehr dankbar, dass "ich genau das Gleiche tun kann wie manuelle Einstellungen, ohne sie zu beeinträchtigen". .. (Unerwarteterweise gibt es viele Automatisierungstools, bei denen die verfügbaren Funktionen und Einstellungsmethoden eingeschränkt sind.)

JSNAPy-Übersicht

JSNAPy ist ein Tool, das den Status des JUNOS-Routers als Snapshot verwendet und verwaltet und feststellt, ob er den vordefinierten Bedingungen entspricht. Einfach ausgedrückt, JSNAPy erleichtert die Implementierung von Testtools. "Gibt" Bestanden "zurück, wenn die Schnittstelle xe-0 / 0/0 aktiv ist." "Fehlgeschlagen", wenn die Routeninformationen von Zustand 2 für Zustand 1 stärker als erwartet ansteigen. Sie können "pass") "return" sagen.

Das Schreiben von Tests ist sehr leistungsfähig bei der Automatisierung der Routerkonfiguration. Es versteht sich von selbst, dass es wichtig ist, zu bestätigen, dass "der Status nach der Einstellung normal funktioniert" in der Router-Einstellungsarbeit. Da der Service-Impact-Bereich des Routers groß ist, ist schwer zu erkennen, ob "die Einstellung fehlgeschlagen ist und das Netzwerk verschwunden ist".

Die Automatisierung dieses Normalisierungsprozesses ist jedoch eine sehr, sehr mühsame Aufgabe. "Definieren Sie für alle von der Router-CLI eingegebenen Router-Befehle alle Muster der Ausgabeergebnisse, die vom Router zurückgegeben werden können, extrahieren Sie die Zielzeichenfolge mit einem regulären Ausdruck und bestimmen Sie, ob sie den vordefinierten Bedingungen entspricht. Das ist alles, was zu sagen ist: "Die Anzahl der Muster, die zum Zeitpunkt eines Fehlers ausgegeben werden können, ist riesig und kann nicht definiert werden." "Das Ausgabeergebnis unterscheidet sich geringfügig je nach Modell / Betriebssystemversion." "Das Programm ist ein Stapel regulärer Ausdrücke." Es gibt viele Hindernisse wie "Es wird für niemanden außer dem Implementierer unmöglich, es aufrechtzuerhalten", und es bleibt keine andere Wahl, als es mit taktischen Operationen auf menschlichem Meer zu überwinden. Wenn Sie an den Schwierigkeiten interessiert sind, die damit verbunden sind, lesen Sie bitte, wie es auf @ stereocats Blog vorgestellt wurde. (Wenn ich es mir nur ansehe, tut mir der Magen weh.) Schlechtes Know-how für CLI-basierte NW-Automatisierung

Durch die Verwendung von JSNAPy können Sie die Probleme bei der Implementierung von Testtools beseitigen. Daher bin ich Ihnen sehr dankbar. Es ist schwer zu sagen, ob alle zuvor erwähnten Aufgaben einfacher sein werden, aber ich bin sicher, dass die meisten einfacher sein werden.

Das Fehlen einer Router-Version, die dem Test-Tool Serverspec in Bezug auf Server entspricht, ist einer der Hauptfaktoren, die es heute schwierig machen, den Netzwerkbetrieb zu automatisieren. Ich freue mich sehr auf das Erscheinen eines Testtools wie dieses JSNAPy.

Konzept von Multi-Vendor

Bevor ich PyEZ und JSNAPy im Detail vorstelle, möchte ich ein wenig über Automatisierung sprechen.

Einige Organisationen, die das Netzwerk betreiben, kritisieren möglicherweise, dass "die Automatisierung mit dem dedizierten Juniper-Tool nicht halb so effektiv ist, wenn es nicht von den Routern anderer Unternehmen betrieben werden kann". Das ist genau richtig. Die oben vorgestellten Tools funktionieren nur mit JUNOS-Routern. Natürlich gibt es in meiner Organisation viele andere Netzwerkgeräte als Juniper. Natürlich können die oben genannten Juniper-Tools nicht alle Geräte unterstützen.

Bei der Automatisierung des Netzwerkbetriebs ist es derzeit jedoch eine sehr schwierige Aufgabe, darauf zu zielen, dass alle Anbieter plötzlich reagieren. Dies liegt daran, dass derzeit nicht für alle Produkte mit mehreren Anbietern viel offene Software verfügbar ist. (Im Moment scheinen APIs von Drittanbietern wie Ansible und NAPALM diese Position anzustreben, aber Sie müssen vorsichtig sein, da jedes Gerät die funktionalen Anforderungen erfüllt, die Sie automatisieren möchten.)

Ich denke, dass jeder seine eigenen Ideen zur Realisierung von Support für mehrere Anbieter hat, daher werde ich hier nicht darauf eingehen, aber als meine persönliche Idee werde ich im Moment mit der Prüfung und Verifizierung gemäß dem folgenden Ablauf fortfahren. Ich denke, dass es gut vorankommen wird.

  1. Konzentrieren Sie sich zunächst auf ein Produkt und untersuchen Sie den Mechanismus zur Automatisierung der Betriebsarbeit -> Implementierung -> Überprüfen und Festlegen der Betriebsrichtlinie. --Wählen Sie ein Zielprodukt basierend auf der Häufigkeit der Arbeit und der einfachen Automatisierung. ――Verwenden Sie zu diesem Zeitpunkt die vom Anbieter bereitgestellten APIs und Bibliotheken, um dies zu vereinfachen. ――Während wir die Automatisierung in einem Produkt implementieren, werden wir mit der Überprüfung fortfahren und uns immer den Support mehrerer Anbieter vorstellen, ob er auf Produkte anderer Unternehmen angewendet werden kann und wenn ja, wie das System für die Migration entworfen werden soll
  2. Wenn Sie nach der Implementierung 1. mit der Richtlinie zur Arbeitsautomatisierung vertraut sind, prüfen Sie, ob derselbe Mechanismus auf Produkte anderer Anbieter angewendet werden kann-> Implementierung-> Überprüfen.
  3. Wenn die vorhandene Methode in 2. nicht funktioniert, versuchen Sie, die alternative Version zu implementieren, indem Sie den in 1 verwendeten Mechanismus imitieren. Wenn es schwierig ist, von einer Person implementiert zu werden, suchen Sie einen Mitarbeiter innerhalb und außerhalb des Unternehmens

Wie oben erwähnt, stelle ich mir vor, dass die Implementierung von herstellerkompatiblen Tools voranschreiten wird, wenn wir mit dem Teil beginnen können, der einfach zu automatisieren ist, und schließlich einen Fluss in der Nähe der Open-Source-Softwareentwicklung erstellen können. Tatsächlich gibt es auch ein Tool namens NAPALM als herstellerkompatible Bibliothek, das mit solchen Ideen implementiert wird.

NAPALM wurde in früheren Blogs eingeführt. Schauen Sie also bitte vorbei, wenn Sie interessiert sind.

Basierend auf dieser Idee in meinem Fall

  1. Erstellen Sie zunächst einen Mechanismus zum Ausprobieren und Überprüfen der Automatisierung mit Juniper-Produkten, die über zahlreiche Mechanismen und Dokumente zur Netzwerkautomatisierung verfügen. (Diese Ankündigung / Blog ist hier gerichtet)
  2. Sobald die Automatisierungsmethode für Juniper-Produkte verfeinert wurde, werden wir nach Möglichkeiten suchen, den Mechanismus auf Produkte anderer Anbieter zu erweitern / anzuwenden.
  1. Wenn die Aussicht auf eine Einführung der Produktion in den Netzwerkbetrieb besteht, vertiefen Sie die Diskussionen innerhalb und außerhalb des Unternehmens, indem Sie Ideen und Überprüfungsergebnisse in der externen Community offenlegen und die Ideen und Implementierungsmethoden weiter verfeinern.

Mit dieser Idee treiben wir die Politik der automatisierten Entwicklung voran.

Obwohl die Einführung lang geworden ist, werde ich ab dem nächsten Mal die spezifische Verwendung von PyEZ und JSNAPy vorstellen.

Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 2: Ich habe versucht, PyEZ zu verwenden

Recommended Posts

Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 1: Übersicht
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 2: Ich habe versucht, PyEZ zu verwenden
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 4: Automatisieren Sie die ISP-Einrichtung mit PyEZ und JSNAPy
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, Google Test und CMake in C zu verwenden
Ich habe versucht, CPython ein Post-Inkrement hinzuzufügen. Übersicht und Zusammenfassung
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, RandomForest zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Ich habe versucht, Magenta / TensorFlow zu verwenden
Ich habe versucht, AWS Chalice zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
Ich habe versucht, den Pferderennplatz Teil 2 zu kriechen und abzukratzen
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Ich habe versucht, Rotrics Dex Arm zu verwenden
Ich habe versucht, GrabCut von OpenCV zu verwenden
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
Ich habe versucht, mit dem Server-Client über tmux zu kommunizieren
Ich habe versucht, mit PyBrain verstärkt zu lernen
Ich habe versucht, mit Theano tief zu lernen
Ich habe irgendwie versucht, ein Jupyter-Notebook zu verwenden
[Kaggle] Ich habe versucht, mit unausgeglichenem Lernen zu unterabtasten
Ich habe versucht, mit OpenPose eine Schildkrötenwelle zu schießen
Ich habe versucht, die checkio-API zu verwenden
Ich habe versucht, asynchrone Verarbeitung mit Asyncio
Ich habe versucht, die Docomo-Spracherkennungs-API und die Google Speech-API in Java zu verwenden