Versuchen Sie es mit Junos 'On-Box Python # 1 Op Script

Überblick

Dies ist der Artikel am 11. Tag von NetOpsCoding Adventskalender 2016.

Dieses Mal möchte ich Ihnen die Verwendung von On-Box Python vorstellen, das von Junos 16.1 installiert wurde.

Über Junoscript

Junoscript ist eine Skriptumgebung, die auf dem Junos-Router ausgeführt wird. Abhängig vom Zeitpunkt des Betriebs werden Op Script (wird zu jedem Zeitpunkt ausgeführt), Commit Script (wird ausgeführt, wenn die Einstellungen festgeschrieben werden) und Event Script (werden als Reaktion auf ein Ereignis ausgeführt). Da ist einer. Bisher war es für die Verwendung von Junoscript erforderlich, ein leicht eindeutiges Skript in XSLT oder SLAX zu schreiben. Ab Junos 16.1 können diese jedoch in Python geschrieben werden. On-Box-Python baut auf der bereits vorhandenen einfachen PyEZ-basierten Operation auf und erweitert die bisher mit Junoscript möglichen Funktionen.

Diesmal ist es eine Berührung, also möchte ich ein Op-Skript schreiben und es ausprobieren.

Weitere Informationen finden Sie unter Offizielle Dokumente. Ich werde.

Umgebung

Dieses Mal versuche ich es in der folgenden Umgebung.

Aufbau

On-Box-Python ist standardmäßig nicht aktiviert. Um es zu aktivieren, müssen Sie die folgenden Einstellungen eingeben.

set system scripts language python

Auf diese Weise können Sie ein in Python geschriebenes Skript im Skript op / event / commit angeben.

In Junoscript muss aus Sicherheitsgründen das Skript, das Sie ausführen möchten, in der Konfiguration angegeben werden. Selbst wenn es sich um ein OP-Skript handelt, das jederzeit ausgeführt werden kann, sind die folgenden Einstellungen erforderlich.

set system scripts op file test.py



 Die hier angegebene Skriptdatei muss in `` `/ var / db / scripts / op /` `` gespeichert werden.

 Hello, world!

 Nachdem die Vorbereitungen abgeschlossen sind, möchte ich sofort ein entsprechendes Skript schreiben.
 Zuallererst ist es ein Klassiker, also hat es nichts zu bedeuten, aber schreiben wir Hello World und verschieben es.


#### **`/var/db/scripts/op/Zu testen.Platzieren Sie das folgende Skript mit dem Namen py.`**
```Platzieren Sie das folgende Skript mit dem Namen py.



#### **`test.py`**
```py

def main():
    print "Hello, world!"

if __name__ == "__main__":
    main()

Wie oben erwähnt, ist es zum Ausführen des Skripts erforderlich, den Dateinamen des Skripts in der Konfiguration zu definieren. Geben Sie ihn daher wie im obigen Beispiel an und schreiben Sie ihn fest.

Wenn die Einstellungen und Inhalte des Skripts korrekt sind, sollte das Skript in der folgenden Form ausgeführt werden können.

root@vmx1> op test.py
Hello, world!

Versuchen Sie, Informationen zu erhalten

Das Ausführen von Hello World hat nichts zu bedeuten. Probieren wir also etwas Praktischeres aus. In On-Box Python kann PyEZ (py-junos-eznc) verwendet werden, daher werde ich versuchen, geeignete Informationen abzurufen und anzuzeigen.

Führen Sie beispielsweise get-interface-information RPC aus und schreiben Sie Code, der die Schnittstellennamen auflistet.

test.py


from jnpr.junos import Device

def main():
    dev = Device()
    dev.open()

    interfaces = dev.rpc.get_interface_information(terse=True)

    for ifd in interfaces.getiterator("physical-interface"):
        print ifd.find("name").text.strip()

if __name__ == "__main__":
    main()

Es ist ein sehr einfacher Code. Das Ergebnis ist wie folgt.

root@vmx1> op test.py
ge-0/0/0
lc-0/0/0
pfe-0/0/0
pfh-0/0/0
ge-0/0/1
ge-0/0/2
ge-0/0/3
ge-0/0/4
ge-0/0/5
ge-0/0/6
ge-0/0/7
ge-0/0/8
ge-0/0/9
cbp0
demux0
dsc
em1
esi
fxp0
gre
ipip
irb
jsrv
lo0
lsi
mtun
pimd
pime
pip0
pp0
rbeb
tap
vtep

Versuchen Sie, die Einstellungen zu ändern

Als nächstes versuchen wir, die Einstellungen zu ändern. Dies ist auch sehr einfach, da es auf PyEZ basiert.

Hier schreiben wir als Beispiel ein Skript, das die Schnittstelle ge-0 / 0/0 deaktiviert.

test.py


from jnpr.junos import Device
from jnpr.junos.utils.config import Config

def main():
    dev = Device()
    dev.open()
    dev.bind(cu=Config)

    config = "set interfaces ge-0/0/0 disable"

    dev.cu.lock()

    dev.cu.load(config, format="set", merge=True)

    dev.cu.commit()
    dev.cu.unlock()

    dev.close()


if __name__ == "__main__":
    main()

Das Ergebnis sieht folgendermaßen aus:

root@vmx1> show configuration interfaces ge-0/0/0 | display set
set interfaces ge-0/0/0 vlan-tagging
set interfaces ge-0/0/0 unit 1001 vlan-id 1001
set interfaces ge-0/0/0 unit 1001 family inet address 10.0.1.1/24

root@vmx1> op test.py

root@vmx1> show configuration interfaces ge-0/0/0 | display set
set interfaces ge-0/0/0 disable
set interfaces ge-0/0/0 vlan-tagging
set interfaces ge-0/0/0 unit 1001 vlan-id 1001
set interfaces ge-0/0/0 unit 1001 family inet address 10.0.1.1/24

Sie können sehen, dass die Ungültigkeitseinstellung von ge-0 / 0/0 eingegeben wurde.

Schließlich

Ein Beispiel für die Verwendung von On-Box-Python ist, dass die zuvor in PyEZ auf dem Server geschriebenen Skripts jetzt auf dem Gerät ausgeführt werden können.

Wie oben erwähnt, kann On-Box-Python jedoch das vorhandene Junoscript ersetzen, sodass seine wahre Leistungsfähigkeit demonstriert werden kann, indem es als Sprache zum Schreiben von Commit-Skripten und Ereignisskripten verwendet wird.

In Nächstes Mal möchte ich Beispiele für Commit-Skript und Ereignisskript vorstellen.

Recommended Posts

Versuchen Sie es mit Junos 'On-Box Python # 1 Op Script
Versuchen Sie es mit Junos 'On-Box Python # 2 Commit Script
Versuchen Sie es mit Tweepy [Python2.7]
Versuchen Sie es mit Kubernetes Client -Python-
Versuchen Sie es mit Junos 'On-Box Python #Bonus 1 So etwas wie ChatOps / Commit und posten Sie es bei Slack
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Versuchen Sie es mit LevelDB mit Python (plyvel)
Versuchen Sie es mit der Aktions-API von Python argparse
Versuchen Sie es mit dem Python Cmd-Modul
Versuchen Sie es mit LeapMotion mit Python
Versuchen Sie es mit Amazon DynamoDB von Python
Versuchen Sie Python
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie eine Formel mit Σ mit Python
Dialogflow (früher: API.AI) Verwenden Sie das Python SDK #dialogflow
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Versuchen Sie, Excel mit Python (Xlwings) zu betreiben.
Versuchen Sie es mit Tkinter
Skript-Python-Datei
Versuchen Sie es mit Docker-Py
Python-Skript-Skelett
Versuchen Sie es mit einem Ausstecher
Versuchen Sie es mit PDFMiner
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Python-Skript-Profilerstellung
Python: Versuchen Sie, die Benutzeroberfläche von Pythonista 3 auf dem iPad zu verwenden
Starten Sie Python
Versuchen Sie es mit Geopandas
Importieren Sie ein Python-Skript
Versuchen Sie es mit Selen
Versuchen Sie es mit scipy
Python> try: / außer:
Versuchen Sie es mit dem Python-Webframework Tornado Part 1
Versuchen Sie es mit pandas.DataFrame
Hinweis zum Ausprobieren von Juniper JUNOS PyEz (Python-Bibliothek) 1 ~ PyEz Übersicht ~
Versuchen Sie es mit Tensorflow. ① Erstellen Sie eine Python-Umgebung und führen Sie Tensorflow ein
Versuchen Sie es mit Django-Swiftbrowser
Versuchen Sie es mit matplotlib
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
Versuchen Sie es mit tf.metrics
Versuchen Sie es mit PyODE
Führen Sie Python-Skripte in Excel aus (mit xlwings).
Scraping mit Python
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
Versuchen Sie, hochfrequente Wörter mit NLTK (Python) zu extrahieren.
Versuchen Sie es mit Python.
Bearbeiten Sie Redmine mit Python Redmine
Fibonacci-Sequenz mit Python
Python versuchen ~ außer ~ sonst
Versuchen Sie es mit virtualenv (virtualenvwrapper)
Datenbereinigung mit Python
[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Verwenden von Python # externen Paketen
DynamoDB Script Memo (Python)
WiringPi-SPI-Kommunikation mit Python