03.08.2023 IT Automation
Geht es um Network Automation, dann müssen Konfigurationen von Routern und Switches oftmals regelmäßig gesichert werden, um im Fehlerfall das Backup schnell einspielen zu können. Hierzu bieten größere Netzwerkmanagementsysteme Funktionen, die mit höheren Kosten verbunden sind und zumeist auch deutlich komplexer zu bedienen sind, als dies z. B. mit einem relativ einfachen Python Skript möglich ist. Im Prinzip lassen sich viele Aufgaben der Network Automation mit Hilfe eines passenden Python Skriptes realisieren.

Im folgenden Beispiel zeigen wir, wie ein Python Skript eingesetzt wird, um Konfigurationen von Cisco Systemen zu sichern.
In Python nutzen wir dafür das Modul „netmiko“, um Befehle im IOS bzw. NX-OS auszuführen. Der Zugriff erfolgt über Telnet oder SSH.
Unser Beispiel zeigt, wie wir Konfigurationen aus einem Testnetzwerk auf einen TFTP Server übertragen. Das dazu verwendete Python Skript wurde in eine ausführbare EXE-Datei cconfig.exe umgewandelt. Die Zugangsdaten werden in einer Textdatei config1.yml abgelegt, die man sehr leicht an seine Umgebung anpassen kann.
tftp_server: 10.0.0.198
filename_ende: 20230627
devices:
- ip: 10.10.201.91
username: admin
password: 1234Qwer
secret: 1234Qwer
connection: ssh
platform: cisco_nxos
- ip: 10.10.201.92
username: admin
password: 1234Qwer
secret: 1234Qwer
connection: telnet
platform: cisco_nxos
- ip: 10.0.0.90
username: admin
password: 1234Qwer
secret: 1234Qwer
connection: ssh
platform: cisco_ios
- ip: 10.0.0.91
username: admin
password: 1234Qwer
secret: 1234Qwer
connection: telnet
platform: cisco_ios
Das Programm cconfig.exe beinhaltet auch eine Hilfefunktion:

Man ruft das Programm mit der zugehörigen YML-Datei auf und der Rest läuft automatisch ab. Die Files werden in unserem Beispiel auf den TFTP Server mit der IP-Adresse 10.0.0.198 übertragen.


Wenn die Zugangsdaten oder das Kommunikationsprotokoll nicht passen, gibt das Programm eine Fehlermeldung aus, setzt aber die Arbeit fort und versucht das nächste Gerät zu erreichen.

Das Tool cconfig

Die Datei cconfig.py bildet den sogenannten Entry Point für unser Tool. Diese Datei wird ausgeführt, wenn wir das Tool anwenden. Sie liest die oben erwähnte YAML-Datei ein, in der u.a. die IP-Adressen der Netzgeräte und des TFTP Servers enthalten sind. Sie wurde mit dem argparser-Modul geschrieben – ein Framework für Kommandozeilen-Tools, das in der Standardbibliothek enthalten ist. Das ermöglicht uns, mit cconfig -h oder cconfig --help die Hilfe aufzurufen oder mit cconfig config.yml die entsprechende YAML-Datei bekannt zu geben.

Die Funktionalitäten zum Erzeugen eines Backups der Geräte-Configs finden sich in der Datei cisco_device.py. Diese verwendet das Paket netmiko, welches CLI-Kommandos über eine SSH-Session überträgt. Ab Zeile 29 wird die YAML-Datei mit Hilfe der open-Funktion eingelesen. Das Modul cisco_device.py wird in Zeile 5 importiert, damit die dort definierten Klassen genutzt werden können.

Aus dem Modul cisco_device.py wird in Zeile 37 die Funktion create_device genutzt. Diese generiert ein Objekt, das wiederum die config_to_tftp-Methode bietet, welche in Zeile 45 aufgerufen wird. Wenn mit einem Gerät nicht erfolgreich kommuniziert werden kann, weil es nicht erreichbar ist oder weil die Authentifizierung fehlschlägt, würde das Skript beendet werden und die Config-Sicherung abbrechen. Damit das nicht passiert, sondern das Skript einfach mit dem nächsten Gerät fortsetzt, werden die entsprechenden Fehler/Exceptions in den Zeilen 48 und 51 abgefangen.

Das Modul cconfig.py (der Entry Point) verwendet aus dem Modul cisco_device.py die Funktion create_device. Diese hat die Aufgabe, ein Objekt der entsprechenden Klasse zu generieren. Es gibt eine Klasse für die Kommunikation mit einem Cisco IOS-Gerät und eine für die mit einem Cisco NX-OS-Gerät. Beide Klassen erben von der Klasse CiscoDevice. Diese definiert die Eigenschaften wie username und password, die für die SSH-Verbindung benötigt werden. Durch die Vererbung müssen diese nur einmal (in der Klasse CiscoDevice) definiert werden und nicht in den beiden Klassen (für IOS und NX-OS). Außerdem schreibt CiscoDevice den Subklassen über den Dekorator abstractmethod vor, dass eine config_to_tftp-Methode implementiert werden muss.

Die Klasse CiscoIos verwendet intern die CLI-Befehle des IOS.

Die Klasse CiscoNxos verwendet intern die CLI-Befehle des NX-OS.

Sie können das vorgestellte Skript auch weiterentwickeln und weitere eigene Funktionalitäten integrieren. Probieren Sie es einfach aus!
Weitere interessante Themen im Bereich Automatisierung mit Python und den nötigen Programmier-Background finden Sie hierzu in unseren Kursen Python für Einsteiger - Einführung in die Programmierung und Python für Netzwerker - Praktische Anwendung im Netzwerk.
Das könnte Sie auch interessieren
Python Schulung bei ExperTeach – eine Übersicht unseres Kurs-Angebots im Bereich Python
Warum Sie Python lernen sollten! – ein Blog-Artikel, der Sie an Python heranführt
Log Files mit Python auswerten – ein Blog Artikel mit beispielhaftem Vorgehen
Python ist ja ganz nett, aber ist C nicht besser und überhaupt was soll dieses Einrücken? – Python Skript der Rheinischen Friedrich-Wilhelms-Universität Bonn
Stackoverflow.com – eine der wichtigsten Python Communities