Versuchen Sie Juniper JUNOS PyEz (Python-Bibliothek) Memo 3 ~ Ändern Sie die Einstellungen mit PyEz ~

Ich habe noch etwas Zeit, aber da ich die Umgebung erstellt und JUNOS-Informationen von letztes Mal erhalten habe, werde ich diesmal versuchen, die JUNOS-Einstellungen zu ändern. ..

1. Übersicht

Mithilfe des Moduls jnpr.junos.utils.config.Config von PyEz können Sie ASCII-Text-, Junos XML- oder Junos OS-Befehlsdateien festlegen, Einstellungen ändern und vorlagenbasierte Einstellungen mithilfe von Jinja2-Vorlagenobjekten festlegen. Kann gewechselt werden.

Wenn Sie die Einstellungen ändern, gehen Sie wie folgt vor: Lesen Sie die Einstellungen und spiegeln Sie sie durch Commit wider, genau wie bei der JUNOS CLI.

Configuration Process

Geben Sie zum Zeitpunkt des Festschreibens Option an Sie können auch einen Kommentar hinterlassen oder synchronisieren, wenn RE redundant ist.

Geben Sie zum Lesen der Einstellungen, wie z. B. Laden ersetzen, Zusammenführen laden oder Überschreiben von JUNOS CLI laden, Überschreiben an oder fügen Sie die Einstellungen hinzu und ändern Sie sie. Geben Sie während des Ladevorgangs die Parameter zum Zusammenführen und Überschreiben an (https://www.juniper.net/techpubs/en_US/junos-pyez1.2/topics/reference/general/junos-pyez-configuration- Kann ausgewählt werden durch (process-and-data-formats.html).

Dieses Mal werde ich die Methode zum Lesen einer ASCII-Textdatei und zum Hinzufügen von Einstellungen sowie die Methode zum Hinzufügen von vorlagenbasierten Einstellungen mit Jinja2 ausprobieren.

2. Lesen Sie die Konfiguration aus der Datei

Erweiterung zum Laden der Datei (https://www.juniper.net/techpubs/en_US/junos-pyez1.2/topics/task/program/junos-pyez-program-configuration-data-loading.html) Geben Sie ASCII-Text (.conf, .text, .txt), Junos-Befehl set (.set) und XML (.xml) als untergeordnete Elemente an.

Zum Zeitpunkt des Lesens wird die Datei gelesen, indem der Pfad der Datei mit dem Parameter path angegeben wird. Zum Beispiel

conf_file = "configs/junos-config-add-syslog-ntp.conf"
cu.load(path=conf_file, format="text", merge=True)

Als Beispiel wird der Fall gezeigt, in dem das Hinzufügen der NTP-Benachrichtigungseinstellung von Syslog von PyEz durchgeführt wird. Bereiten Sie zusätzlich zur Python-Datei eine Konfigurationsdatei zum Lesen vor.

junos-config-add-syslog-ntp.conf


system {
    syslog {
        file messages {
            ntp notice;
        }
    }
}

Hier ist ein Python-Beispiel.

ch-config-ntp.py


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

conf_file = 'configs/junos-config-add-syslog-ntp.conf'

# open a connection with the device and start a NETCONF session
dev = Device(host='10.0.0.243', user='xxx', password='xxx', port='22', gather_facts=False)
dev.open()
dev.bind(cu=Config)

# Lock the configuration, load configuration changes, and commit as load merge
print "Locking the configuration"
dev.cu.lock()

print "Loading configuration changes"
dev.cu.load(path=conf_file, merge=True)

print "Committing the configuration"
dev.cu.commit(comment='Loaded by example.')

print "Unlocking the configuration"
dev.cu.unlock()

# End the NETCONF session and close the connection
dev.close()

Eine Ausnahme ist auch im Modul jnpr.junos.exception verfügbar. Um den Fehler zu überprüfen, wenn er nicht ausgeführt werden konnte, sehen Sie ihn daher wie folgt aus, wenn Sie ihn in jedem Prozess ausschließen.

ch-config-ntp-exception.py


from jnpr.junos import Device
from jnpr.junos.utils.config import Config
from jnpr.junos.exception import ConnectError
from jnpr.junos.exception import LockError
from jnpr.junos.exception import UnlockError
from jnpr.junos.exception import ConfigLoadError
from jnpr.junos.exception import CommitError

conf_file = 'configs/junos-config-add-syslog-ntp.conf'


def main():
    # open a connection with the device and start a NETCONF session
    try:
        dev = Device(host='10.0.0.243', user='xxxx', password='xxxx', port='22
', gather_facts=False)
        dev.open()
    except ConnectError as err:
        print "Cannot connect to device: {0}".format(err)
        return

    dev.bind(cu=Config)

    # Lock the configuration, load configuration changes, and commit
    print "Locking the configuration"
    try:
        dev.cu.lock()
    except LockError as err:
        print "Unable to lock configuration: {0}".format(err)
        dev.close()
        return

    print "Loading configuration changes"
    try:
        dev.cu.load(path=conf_file, merge=True)
    except (ConfigLoadError, Exception) as err:
        print "Unable to load configuration changes: {0}".format(err)
        print "Unlocking the configuration"
        try:
                dev.cu.unlock()
        except UnlockError:
            print "Unable to unlock configuration: {0}".format(err)
        dev.close()
        return

    print "Committing the configuration"
    try:
        dev.cu.commit(comment='Loaded by example.')
    except CommitError as err:
        print "Unable to commit configuration: {0}".format(err)
        print "Unlocking the configuration"
        try:
            dev.cu.unlock()
        except UnlockError as err:
            print "Unable to unlock configuration: {0}".format(err)
        dev.close()
        return

    print "Unlocking the configuration"
    try:
        dev.cu.unlock()
    except UnlockError as err:
        print "Unable to unlock configuration: {0}".format(err)

    # End the NETCONF session and close the connection
    dev.close()

if __name__ == "__main__":
        main()

3. Verwendung der Jinja2-Vorlage

Mit Jinja2 können Sie auf einfache Weise ähnliche Konfigurationen mithilfe von Vorlagen erstellen. Jinja2 ist eine Python-Vorlagen-Engine, und Herkunft des Namens scheint eine Vorlage ⇒ Tempel ⇒ Schrein zu sein. Jinja2-Vorlagen verwenden ASCII-Text, Junos XML-Elemente und Junos OS-Set-Befehle in unterstützten Formaten, genau wie das Lesen von Dateien. Im Format der Jinja-Vorlage sind {% ...%} und {{...}} variable Teile. Und alle anderen Teile sind feste Sätze. {% ...%} führt die Deklaration / Zuweisung von Variablen, die Schleifenverarbeitung usw. aus. {{...}} ist die Ergebnisanzeige Siehe hier für die Kontrollstrukturen, die für {% verwendet werden.

Verwenden Sie zur Verwendung der Vorlage die load () -Methode [Options](https://www.juniper.net/techpubs/en_US/junos-pyez1.2/topics/task/program/junos-pyez-program-configuration- Geben Sie die Vorlage in data-load.html an. Geben Sie die Vorlagendatei mit template_path an und geben Sie die Parameter mit template_vars an.

cu.load(template_path=conf_file, template_vars=config, merge=True)

Verwenden Sie dieses Mal eine Vorlage, die jeder Schnittstelle Einstellungen für MPLs und Rsvp hinzufügt, und lesen Sie die Namen der Parameterschnittstellen usw. in einer yaml-Datei. Die Vorlage ist auch ASCII-Text.

Klicken Sie hier für die Vorlagendatei

junos-config-interfaces-mpls.conf


interfaces {
    {% for item in interfaces %}
    {{ item }} {
        description "{{ description }}";
        unit 0 {
            family {{ family }};
        }
    } {% endfor %}
}
protocols {
    mpls {
        {% for item in interfaces %}
        interface {{ item }};
        {% endfor %}
    }
    rsvp {
        {% for item in interfaces %}
        interface {{ item }};
        {% endfor %}
    }

}

Klicken Sie hier für die Parameterdatei

mpls_interface.yml


---
interfaces:
    - ge-0/0/0
    - ge-0/0/1
description: 'MPLS interface'
family: mpls

Grundsätzlich werden basierend auf demselben Skript (ch-config-ntp-exception.py) wie beim Lesen der Datei nur die Vorlage und die Parameter von load () angegeben, sodass nur die verschiedenen Teile extrahiert werden.

add-config-mpls-template.py Auszug



import yaml

conf_file = 'configs/junos-config-interfaces-mpls.conf'
yml_config = yaml.load(open('configs/mpls_interface.yml'))

dev.cu.load(template_path=conf_file, template_vars=yml_config, merge=Tru
e)

Damit können die Einstellungen von mpls und rsvp für die angegebene Schnittstelle hinzugefügt werden.

4. Zusammenfassung

Diesmal habe ich viel geschrieben, aber ich konnte bestätigen, dass die JUNOS-Einstellungen mit PyEz geändert werden können. In PyEz sind neben der Erfassung und Änderung von Informationen auch ein Konfigurationsvergleich, ein Betriebssystem-Upgrade, eine Dateiübertragung per SCP usw. möglich.

Es mag schwierig sein, JUNOS und PyEz zu verstehen, aber selbst Ingenieure, die nicht mit Python vertraut sind, können die erforderlichen Parameter leicht überprüfen und die Einstellungen ändern. Wenn Sie einen Mechanismus erstellen, mit dem Sie mit diesen auf das Web zugreifen können, können auch nicht erfahrene Netzwerktechniker dies überprüfen und ändern. Durch die Verknüpfung mit anderen Systemen können Sie die Einstellungen je nach Situation dynamisch ändern. Die Verwendungsmethoden werden wahrscheinlich in Abhängigkeit von Ideen wie der Schaffung einer Infrastruktur erweitert.

In Zukunft plane ich, andere Automation Stacks unregelmäßig auszuprobieren.

Recommended Posts

Versuchen Sie Juniper JUNOS PyEz (Python-Bibliothek) Memo 3 ~ Ändern Sie die Einstellungen mit PyEz ~
Probieren Sie Juniper JUNOS PyEz (Python-Bibliothek) aus. Hinweis 2 ~ Informationen mit PyEz ~ abrufen ~
Hinweis zum Ausprobieren von Juniper JUNOS PyEz (Python-Bibliothek) 1 ~ PyEz Übersicht ~
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
[Persönliches Memo] julia - Verwenden Sie die Python-Bibliothek mit julia unter Verwendung von PyCall
Versuchen Sie es mit Python.
Ändern Sie die IP-Einstellungen mit Python in ACL von conoha
Twitter-Grafiknotiz mit Python
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
[Python] Ändere den Typ mit Pandas
Ändern Sie die Wiederholungseinstellungen mit boto3
Versuchen Sie die Gesichtserkennung mit Python
Ändern Sie die Einstellungen eines Knotens in einem Superknoten mit dem Python-Skript SPSS Modeler
Versuchen Sie es mit Python + Beautiful Soup
Versuchen Sie, Facebook mit Python zu betreiben
Python-Memo - Geben Sie die Optionen mit getopt an
Versuchen Sie die Singularwertzerlegung mit Python
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
[HyperledgerIroha] Abfrage mit Python-Bibliothek
"Scraping & maschinelles Lernen mit Python" Lernnotiz
[Memo] Tweet auf Twitter mit Python
Ein Hinweis, mit dem Sie die Python-Umgebung von Pineapple mit pyenv ändern können
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Ändern Sie die Python 64-Bit-Umgebung mit Anaconda in eine 32-Bit-Umgebung
Konvertieren Sie Memos sofort mit Python 2to3
Versuchen Sie eine Formel mit Σ mit Python
Ändern Sie die Batch-Einstellungen mit dem Befehl withlist von Mailman
Memo, um nach KPI mit Python zu fragen
Versuchen Sie, mit Binärdaten in Python zu arbeiten
"Systemhandel beginnt mit Python3" Lesememo
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Versuchen Sie es mit Junos 'On-Box Python # 2 Commit Script
Verwenden Sie die Verschlüsselung der Verschlüsselungsbibliothek mit dem Python-Image von Docker
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Python-Standardbibliothek: zweite Hälfte (Python-Lernnotiz ⑨)
Veröffentlichen Sie Ihre eigene Python-Bibliothek auf Homebrew
Versuchen Sie es mit Junos 'On-Box Python # 1 Op Script
Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen
[Fortsetzung] Versuchen Sie den Zugriff auf das SPS-Register mit Python
Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Python-Standardbibliothek: Erste Hälfte (Python-Lernnotiz ⑧)
Anzeige von Positionsinformationsdaten in Python - Versuchen Sie, mit der Kartenanzeigebibliothek (Folium) zu zeichnen -