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
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.
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
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
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