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.
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.
Dieses Mal versuche ich es in der folgenden Umgebung.
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!
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
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.
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