[PYTHON] Outil pour convertir la configuration Juniper

Aperçu

Nous avons publié un outil qui convertit la sortie du fichier de configuration par la commande "show configration" sur le routeur Juniper dans le format de commande "set / edit" qui peut être entré dans le routeur. https://github.com/taijiji/junos_config_converter

Motivation faite

Avec un routeur Cisco, vous pouvez le configurer en copiant simplement la sortie du résultat par la commande "show running-config", mais avec un routeur Juniper, vous pouvez entrer la sortie du résultat par la commande "show configuration" vers le routeur. C'était ennuyeux parce que je devais modifier manuellement la conversion de format "set / edit". Je l'ai donc fait avec un grand élan, notamment en étudiant le python.

--Supplément 20150412 Sur le routeur Juniper, si vous entrez "show configuration | display set", la configuration en cours de définition sera sortie au format set / edit, et si vous entrez "load merge terminal", la configuration de configuration au format "show configuration" sera acceptée. Il a une fonction. Le but de cet outil est de créer facilement une configuration de configuration sans utiliser de routeur dans les situations où les commandes de configuration et les manuels de procédure sont créés à l'avance.

code

J'ai pu y arriver rapidement sans rien faire de difficile. Ici, le programme qui sort au format comprenant "set / edit" qui peut être défini dans le routeur à partir de la configuration du format sorti par la commande "show configuration" sur le routeur Juniper est implémenté. Cependant, au contraire, le programme qui convertit la configuration du format «set / edit» en format «show configuration» n'a pas été implémenté.

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

Comment utiliser

C'est facile à utiliser, il suffit d'appeler la fonction convert_from_show_to_set ().

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

--Exemple de sortie (définir / modifier le format)

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

Statut de développement

Actuellement, seule la conversion de "show configration" -> "set / edit" est implémentée. (fonction convert_from_show_to_set) Je suis en train d'implémenter la conversion de "set / edit" -> "show configration" (fonction convert_from_set_to_show), mais j'ai du mal car j'ai besoin d'analyser la structure de la configuration JUNOS pour l'implémenter.

Par exemple, si l'entrée de set / edit a la configuration suivante, il est nécessaire de déterminer quel mot est un mot fixe spécifique à JUNOS ou une variable définie par l'utilisateur. (Il peut être implémenté en définissant des mots fixes JUNOS en écriture solide, mais c'est un peu pénible.)

--Contribution

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

--Production

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

En tant que sentiment personnel, la conversion de "show configration" -> "set / edit" est souvent utilisée principalement pour créer des manuels de procédure, mais la conversion de "set / edit" -> "show configration" est dans le travail de fonctionnement du réseau. Il y a peu de possibilités de l'utiliser et la motivation pour la mise en œuvre elle-même est faible. Si vous avez besoin de le mettre en œuvre, veuillez commenter.

Recommended Posts

Outil pour convertir la configuration Juniper
Convertir un PDF A4 en A3 toutes les 2 pages
Convertir une chaîne en image
Comment créer un fichier de configuration
Créez un outil de ligne de commande pour convertir des dollars en yens en utilisant Python
Convertir en HSV
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
J'ai créé un outil de collecte de configuration de routeur Config Collecor
Convertir une liste multidimensionnelle (tableau) en une dimension
J'ai créé un outil pour compiler nativement Hy
Ecrire un script pour convertir un vidage MySQL en TSV
J'ai créé un outil pour obtenir de nouveaux articles
Comment convertir / restaurer une chaîne avec [] en python
Convertir un objet de tranche en liste de numéros d'index
Convertir 202003 en 2020-03 avec les pandas
Faisons un outil de veille de commande avec python
Convertir les kanji en kana
Convertir un fichier texte avec des valeurs hexadécimales en fichier binaire
Comment convertir un objet de classe en dictionnaire avec SQLAlchemy
Convertir jupyter en py
Convertir keras-yolo3 en ONNX
J'ai créé un code pour convertir illustration2vec en modèle Keras
Création d'outils de grattage
Convertir dict en tableau
Comment convertir un spectrogramme Mel en un fichier wav
[Python] Création d'une méthode pour convertir la base en 1 seconde
Convertir json en Excel
Comment convertir un tableau en dictionnaire avec Python [Application]
Outil pour acquérir de manière centralisée la configuration du routeur Cisco / Juniper
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
Convertissez les données d'image (png) à portée de main en une image .pbm
[Titan Craft] J'ai créé un outil pour invoquer un géant sur Minecraft
Convertir une chaîne hexadécimale en binaire
[python] Convertir la date en chaîne
Convertir numpy int64 en python int
[Python] Convertir la liste en Pandas [Pandas]
Une route vers Python intermédiaire
Convertir le HTML en fichier texte
Ajouter un dictionnaire à MeCab
Comment appeler une fonction
Outil pour vérifier le style de code
Télécharger un fichier sur Dropbox
Envoyer un signal au sous-processus
Comment pirater un terminal
Convertir le projet Scratch en Python
[Python] Convertir Shift_JIS en UTF-8
Convertir l'adresse IP en décimal
Convertissez rapidement SDF en CSV
Essayez de sélectionner une langue
Convertir le fichier genbank en fichier gff
Convertir le code python 3.x en python 2.x
Convertir en chaîne lors de la sortie de la sortie standard avec le sous-processus Python
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
J'ai essayé de transformer un fichier Python en un EXE (erreur de récursivité prise en charge)
Je voulais convertir ma photo de visage en un style Yuyu.
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
Convertissez un grand nombre de fichiers PDF en fichiers texte à l'aide de pdfminer
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python