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