[PYTHON] Comment utiliser Template Engine pour Network Engineer

Aperçu

Lorsque je travaille sur un réseau, je fais parfois beaucoup de configurations de routeur en modifiant uniquement les valeurs telles que l'adresse IP aux mêmes paramètres.

Vous pouvez les copier et les coller un par un à la main, mais vous pouvez facilement insérer des valeurs en utilisant le moteur de modèle fourni dans le langage de programmation.

Ici, créons une configuration de routeur en utilisant un moteur de template appelé Jinja2 qui est souvent utilisé en Python.

Veuillez d'abord installer jinja2 comme étape de préparation.

pip install jinja2

Si vous n'avez jamais utilisé pip, veuillez installer pip en vous référant à cet article.

Les premiers packages à inclure dans Python setuptools et pip http://www.lifewithpython.com/2012/11/Python-package-setuptools-pip.html

Étape 1. Incorporez une valeur dans une ligne de configuration

Tout d'abord, essayez de créer une configuration sur une ligne (en fait une commande) appelée «show bgp summary | inc (numéro AS)». Si vous utilisez Jinja2, vous pouvez l'appeler ainsi.

easy_jinja2.py


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

from jinja2 import Template

template = Template( 'show bgp summary | inc {{ asn }}'  )

output_str = template.render( asn='65001' )

print output_str

Une fois exécuté, ce qui suit sera affiché.

%python easy_jinja2.py

show bgp summary | inc 65001

Comme mentionné ci-dessus, Jinja2 reconnaît la chaîne de caractères incluse dans {{}} comme un nom de variable et peut incorporer la valeur réelle en utilisant la fonction de rendu.

En utilisant le moteur de modèle de cette manière, vous pouvez facilement créer un fichier texte avec des valeurs arbitraires incorporées.

Étape 2. Incorporer plusieurs valeurs dans une configuration multiligne

Ensuite, créons une configuration avec quelques lignes supplémentaires. Pour incorporer une valeur dans une variable de type chaîne, écrivez-la à l'aide de la classe Environment.

easy_jinja2.py


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

from jinja2 import Template, Environment

input_str = '''
router bgp 65000
neighbor {{ ip4 }}
shutdown

router bgp 65000
neighbor {{ ip6 }}
shutdown

show bgp summary | inc {{ asn }}
'''

template = Environment().from_string(input_str)

output_str = template.render( ip4='10.1.1.1', ip6='2000::1:1', asn='65001' )

print output_str

Une fois exécuté, ce qui suit sera affiché.

% python easy_jinja2.py

router bgp 65000
neighbor 10.1.1.1
shutdown

router bgp 65000
neighbor 2000::1:1
shutdown

show bgp summary | inc 65001

Étape 3.Faites un grand nombre de configurations avec plusieurs valeurs intégrées

Enfin, créons la configuration précédente en incorporant des valeurs telles que plusieurs adresses IP. Cependant, l'utilisation du moteur de modèle lui-même est la même qu'auparavant. Ici, le type de dictionnaire et l'instruction for sont utilisés pour insérer la valeur dans le moteur de modèle.

easy_jinja2.py


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

from jinja2 import Template, Environment

input_str = '''
router bgp 65000
neighbor {{ ip4 }}
shutdown

router bgp 65000
neighbor {{ ip6 }}
shutdown
'''
input_str_2 = 'show bgp summary | inc {{  asn }} '

neighbor_info= [
    {
        'ip4' : '10.1.1.1',
        'ip6' : '2000::1:1',
        'asn' : '65001',
    },
    {
        'ip4' : '10.1.1.2',
        'ip6' : '2000::1:2',
        'asn' : '65002',
    },
    {
        'ip4' : '10.1.1.3',
        'ip6' : '2000::1:3',
        'asn' : '65003',
    },
    {
        'ip4' : '10.1.1.4',
        'ip6' : '2000::1:4',
        'asn' : '65004',
    },
    {
        'ip4' : '10.1.1.5',
        'ip6' : '2000::1:5',
        'asn' : '65005',
    },
]

template = Environment().from_string(input_str)

for neighbor in neighbor_info:
    output_str = template.render(  ip4=neighbor['ip4'] , ip6=neighbor['ip6'] )
    print output_str

template = Environment().from_string(input_str_2)

for neighbor in neighbor_info:
    output_str = template.render(  asn=neighbor['asn']  )
    print output_str

Le résultat de l'exécution est le suivant.

% python easy_jinja2.py

router bgp 65000
neighbor 10.1.1.1
shutdown

router bgp 65000
neighbor 2000::1:1
shutdown

router bgp 65000
neighbor 10.1.1.2
shutdown

router bgp 65000
neighbor 2000::1:2
shutdown

router bgp 65000
neighbor 10.1.1.3
shutdown

router bgp 65000
neighbor 2000::1:3
shutdown

router bgp 65000
neighbor 10.1.1.4
shutdown

router bgp 65000
neighbor 2000::1:4
shutdown

router bgp 65000
neighbor 10.1.1.5
shutdown

router bgp 65000
neighbor 2000::1:5
shutdown
show bgp summary | inc 65001
show bgp summary | inc 65002
show bgp summary | inc 65003
show bgp summary | inc 65004
show bgp summary | inc 65005

Comme mentionné ci-dessus, vous pouvez facilement créer une configuration similaire tout en modifiant la valeur à l'aide du moteur de modèle.

finalement

Lorsqu'une tâche avec de nombreuses répétitions comme celle-ci se trouve devant moi, je ne sais souvent pas s'il est plus rapide de copier et coller à la main ou de créer un outil et de le concevoir.

Lorsque j'essaie de créer un outil avec une taille lourde, je dis souvent: "J'ai pu le faire en un temps étonnamment court!" Quand j'ai réellement écrit cet outil, je ne pouvais l'écrire que dans le train sur lequel je me suis assis. C'était juste 30 minutes. Une fois créé, il peut souvent être réutilisé pour d'autres tâches, et il existe des situations où il peut être utilisé n'importe où, pas seulement pour la création de configuration.

Si vous faites une erreur dans un endroit inattendu lorsque vous créez manuellement la configuration du routeur, ou si vous rencontrez un petit problème tel que "Je l'ai compris, il y avait un caractère supplémentaire dans chacun d'eux!" Il est nécessaire de le réparer un par un à plusieurs reprises, mais si vous utilisez le moteur de modèle, vous n'avez besoin de fixer qu'un seul endroit et la correction est terminée! Dans de nombreux cas, le travail lui-même peut être simplifié.

Si vous avez un travail pour faire beaucoup de configurations de routeur qui vont vous briser le cœur, veuillez essayer le moteur de modèle une fois.

Recommended Posts

Comment utiliser Template Engine pour Network Engineer
Comment utiliser le moteur de modèle dans une application de fichier de Pyramid
Utiliser Jinja2 pour le moteur de modèle PasteScript
Comment utiliser le réseau de développeurs cybozu.com (partie 2)
[Python] Organisation de l'utilisation des instructions
Comment utiliser "deque" pour les données Python
Comment utiliser l'authentification par empreinte digitale pour KDE
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser MkDocs pour la première fois
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment utiliser Pandas 2
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment utiliser pytest_report_header
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser les outils d'analyse de données pour les débutants
Comment utiliser IPython
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment utiliser OptParse
Comment utiliser le retour
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
[BigQuery] Comment utiliser l'API de BigQuery pour Python -Création de table-
[Pour les débutants] Comment utiliser la commande say avec python!
Comment utiliser Django avec Google App Engine / Python
Comment utiliser Qt Designer
Comment utiliser la recherche triée
[gensim] Comment utiliser Doc2Vec
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment utiliser FastAPI ③ OpenAPI
Comment utiliser Python Argparse
Comment utiliser IPython Notebook
Comment utiliser Pandas Rolling
[Note] Comment utiliser virtualenv
Comment utiliser les dictionnaires redis-py
Python: comment utiliser pydub
[Python] Comment utiliser checkio