[PYTHON] Tool zum Konvertieren der Juniper-Konfiguration

Überblick

In Juniper Router haben wir ein Tool veröffentlicht, das die vom Befehl "show configration" ausgegebene Konfigurationsdatei in das Befehlsformat "set / edit" konvertiert, das tatsächlich in den Router eingegeben werden kann. https://github.com/taijiji/junos_config_converter

Motivation gemacht

Bei einem Cisco-Router können Sie dies festlegen, indem Sie einfach die Ergebnisausgabe mit dem Befehl "show running-config" kopieren. Bei einem Juniper-Router können Sie die Ergebnisausgabe mit dem Befehl "show configuration" in den Router eingeben. Es war ärgerlich, weil ich die Formatkonvertierung "Set / Edit" manuell ändern musste. Also habe ich es mit großer Dynamik geschafft, einschließlich des Studiums von Python.

Code

Ich konnte es schnell schaffen, ohne etwas Schwieriges zu tun. Hier wird das Programm implementiert, das im Format einschließlich "set / edit" ausgibt, das im Router aus der Konfiguration des durch den Befehl "show configuration" auf dem Juniper-Router ausgegebenen Formats festgelegt werden kann. Im Gegenteil, das Programm, das die Formatkonfiguration "set / edit" in das Format "show configuration" konvertiert, wurde nicht implementiert.

junos_config_converter/convert_config.py


#! /usr/bin/env python
# -*- coding: utf-8 -*-

def convert_from_show_to_set(input_text):
    output_text = ''
    indent = ''
    for line in input_text.splitlines():
        if line == '':
            output_text += '\n'
        elif line[-1] == '{':
            output_text += indent + 'edit ' + line[:-1].strip() + '\n'
            indent += ' ' * 4
        elif line[-1] == ';':
            output_text += indent + 'set  ' + line[:-1].strip() + '\n'
        elif line[-1] == '}':
            indent = indent[:-4]
            output_text += indent + 'up\n'
        elif '; ## SECRET-DATA' in line:
            # ignore sentence of "## SECRET-DATA"
            output_text += indent + 'set ' + line.strip('; ## SECRET-DATA') + '\n'
        else:
            output_text += line + '\n'
    return output_text

Wie benutzt man

Es ist einfach zu bedienen, rufen Sie einfach die Funktion convert_from_show_to_set () auf.

junos_config_converter/sample/sample_config_show.txt


system {
    host-name R1;
    time-zone Asia/Tokyo;
    root-authentication {
        encrypted-password "$1$9kcwd00g$YDqr8sBMaAh8SOCjQ2f4b0"; ## SECRET-DATA
    }
}
interfaces {
    fe-0/0/0 {
        unit 0 {
            family inet {
                address 192.168.1.1/24;
            }
        }
    }
}

junos_config_converter/sample/sample_from_show_to_set.py



#! /usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
import datetime
from convert_config import convert_from_show_to_set

sys.path.append(os.getcwd())

file_input = open('sample_config_show.txt', 'r')
input_text = file_input.read()
file_input.close()

output_text = convert_from_show_to_set( input_text )

# example: 20150405_2151
current_date_str = datetime.datetime.today().strftime( '%Y%m%d_%H%M' )

file_output = open ('output' + current_date_str + '.txt', 'w')
file_output.write( output_text )
file_output.close

junos_config_converter/sample/output20150405_2151.txt


edit system
    set  host-name R1
    set  time-zone Asia/Tokyo
    edit root-authentication
        set encrypted-password "$1$9kcwd00g$YDqr8sBMaAh8SOCjQ2f4b0"
    up
up
edit interfaces
    edit fe-0/0/0
        edit unit 0
            edit family inet
                set  address 192.168.1.1/24
            up
        up
    up
up

Entwicklungsstatus

Derzeit ist nur die Konvertierung von "show configration" -> "set / edit" implementiert. (Funktion convert_from_show_to_set) Ich bin gerade dabei, die Konvertierung von "set / edit" -> "show configration" (Funktion convert_from_set_to_show) zu implementieren, aber es fällt mir schwer, da ich die Struktur der JUNOS-Konfiguration analysieren muss, um sie zu implementieren.

Wenn die Eingabe von set / edit beispielsweise die folgende Konfiguration hat, muss ermittelt werden, welches Wort ein JUNOS-spezifisches festes Wort oder eine benutzerdefinierte Variable ist. (Es kann implementiert werden, indem feste JUNOS-Wörter in solider Schrift definiert werden, aber es ist ein bisschen schmerzhaft.)

--Eingang

set routing-options rib inet.0 static route 192.168.2.1/24  next-hop 192.168.1.1

--Ausgabe

routing-options {
            rib inet.0 {
                static {
                    route 192.168.2.1/24 next-hop 192.168.1.1;
                }
            }
}

Als persönliches Gefühl wird die Konvertierung von "Show Configration" -> "Set / Edit" häufig hauptsächlich zum Erstellen von Verfahrenshandbüchern verwendet, aber die Konvertierung von "Set / Edit" -> "Show Configration" ist in der Arbeit des Netzwerkbetriebs. Es gibt nur wenige Möglichkeiten, es zu nutzen, und die Motivation für die Implementierung selbst ist gering. Wenn Sie es implementieren müssen, kommentieren Sie bitte.

Recommended Posts

Tool zum Konvertieren der Juniper-Konfiguration
Konvertieren Sie A4 PDF alle 2 Seiten in A3
Konvertieren Sie eine Zeichenfolge in ein Bild
So erstellen Sie eine Konfigurationsdatei
Erstellen Sie ein Befehlszeilenprogramm, um mit Python Dollar in Yen umzurechnen
Zum HSV konvertieren
Ich habe ein CLI-Tool erstellt, um Bilder in jedem Verzeichnis in PDF zu konvertieren
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Ich habe ein Router-Konfigurationssammlungstool Config Collecor erstellt
Konvertieren Sie eine mehrdimensionale Liste (Array) in eine Dimension
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Schreiben Sie ein Skript, um einen MySQL-Dump in TSV zu konvertieren
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Konvertieren Sie das Slice-Objekt in eine Liste mit Indexnummern
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Konvertiere Kanji in Kana
Konvertieren Sie eine Textdatei mit hexadezimalen Werten in eine Binärdatei
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
Jupyter in py umwandeln
Konvertiere keras-yolo3 in onnx
Ich habe einen Code erstellt, um illustration2vec in ein Keras-Modell zu konvertieren
Erstellung von Schabewerkzeugen
Dikt in Array konvertieren
So konvertieren Sie ein Mel-Spektrogramm zurück in eine WAV-Datei
[Python] Erstellt eine Methode zum Konvertieren von Radix in 1 Sekunde
Konvertieren Sie json in Excel
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Tool zum zentralen Erfassen der Konfiguration des Cisco / Juniper-Routers
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Konvertieren Sie die vorliegenden Bilddaten (png) in ein .pbm-Bild
[Titan Craft] Ich habe ein Werkzeug gemacht, um einen Riesen nach Minecraft zu rufen
Konvertieren Sie eine hexadezimale Zeichenfolge in eine Binärzeichenfolge
[Python] Datum in Zeichenfolge konvertieren
Konvertieren Sie numpy int64 in python int
[Python] Liste in Pandas konvertieren [Pandas]
Ein Weg zum mittleren Python
Konvertieren Sie HTML in eine Textdatei
Fügen Sie MeCab ein Wörterbuch hinzu
So rufen Sie eine Funktion auf
Tool zum Überprüfen des Codestils
Laden Sie eine Datei in Dropbox hoch
Senden Sie ein Signal an den Unterprozess
Wie man ein Terminal hackt
Konvertieren Sie das Scratch-Projekt in Python
[Python] Konvertieren Sie Shift_JIS in UTF-8
Konvertieren Sie die IP-Adresse in eine Dezimalzahl
Konvertieren Sie SDF schnell in CSV
Versuchen Sie, eine Sprache auszuwählen
Konvertieren Sie die Genbank-Datei in die GFF-Datei
Konvertieren Sie Python 3.x-Code in Python 2.x.
Konvertieren Sie in eine Zeichenfolge, während Sie die Standardausgabe mit dem Python-Unterprozess ausgeben
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe versucht, eine Python-Datei in eine EXE-Datei zu verwandeln (Rekursionsfehler unterstützt)
Ich wollte mein Gesichtsfoto in einen Yuyu-Stil umwandeln.
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Konvertieren Sie eine große Anzahl von PDF-Dateien mit pdfminer in Textdateien
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen