SUR CETTE PAGE
Exemple : création d’une syntaxe de configuration personnalisée avec des macros de script de validation
Une configuration Junos OS peut contenir des apply-macro
instructions avec une syntaxe de configuration personnalisée. En soi, la déclaration n’a apply-macro
aucun impact opérationnel sur l’appareil. Les macros de script de commit traitent la syntaxe de configuration personnalisée et l’étendent aux instructions de configuration standard de Junos OS, qui sont ensuite ajoutées en tant que modification persistante ou transitoire. Cet exemple montre comment utiliser des macros de script de commit pour inspecter apply-macro
des instructions et générer des instructions de configuration Junos OS.
Exigences
Cet exemple utilise les composants matériels et logiciels suivants :
Appareil exécutant Junos OS.
Junos OS version 16.1R3 ou ultérieure lors de l’utilisation d’un script Python.
Présentation et script de validation
Le tableau 1 présente une macro contenant une syntaxe personnalisée et l’extension correspondante de la syntaxe CLI (interface de ligne de commande) Junos OS.
Syntaxe de macro personnalisée |
Syntaxe de l’interface de ligne de commande Junos OS étendue |
---|---|
protocols { mpls { apply-macro blue-type-lsp { 10.1.1.1; 10.2.2.2; 10.3.3.3; 10.4.4.4; color blue; group-value 0; } } } |
protocols { mpls { admin-groups { blue 0; } label-switched-path blue-lsp-10.1.1.1 { to 10.1.1.1; admin-group include-any blue; } label-switched-path blue-lsp-10.2.2.2 { to 10.2.2.2; admin-group include-any blue; } label-switched-path blue-lsp-10.3.3.3 { to 10.3.3.3; admin-group include-any blue; } label-switched-path blue-lsp-10.4.4.4 { to 10.4.4.4; admin-group include-any blue; } } } |
Dans cet exemple, le processus de gestion Junos OS (mgd) inspecte la configuration à la recherche apply-macro
d’instructions. Pour chaque apply-macro
instruction dont le paramètre est inclus au niveau de la hiérarchie, le color
script génère une modification transitoire à l’aide des données fournies dans l’instruction pour développer la [edit protocols mpls]
macro dans un groupe d’administration apply-macro
Junos OS standard pour les LSP.
Pour que cet exemple fonctionne, une apply-macro
instruction doit être incluse au niveau de la [edit protocols mpls]
hiérarchie avec un ensemble d’adresses, un et un group-value
color
paramètre. Le script de validation convertit chaque adresse en configuration LSP et le script convertit le color
paramètre en groupe d’administration.
Voici les instructions de script de commit qui développent la macro dans le tableau 1 et une explication ligne par ligne du script :
Syntaxe XSLT
1 <?xml version="1.0" standalone="yes"?> 2 <xsl:stylesheet version="1.0" 3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 4 xmlns:junos="http://xml.juniper.net/junos/*/junos" 5 xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" 6 xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> 7 <xsl:import href="../import/junos.xsl"/> 8 <xsl:template match="configuration"> 9 <xsl:variable name="mpls" select="protocols/mpls"/> 10 <xsl:for-each select="$mpls/apply-macro[data/name = 'color']"> 11 <xsl:variable name="color" select="data[name = 'color']/value"/> 12 <xsl:variable name="group-value" select="data[name = \ 'group-value']/value"/> 13 <transient-change> 14 <protocols> 15 <mpls> 16 <admin-groups> 17 <name> 18 <xsl:value-of select="$color"/> 19 </name> 20 <group-value> 21 <xsl:value-of select="$group-value"/> 22 </group-value> 23 </admin-groups> 24 <xsl:for-each select="data[not(value)]/name"> 25 <label-switched-path> 26 <name> 27 <xsl:value-of select="concat($color, '-lsp-', .)"/> 28 </name> 29 <to><xsl:value-of select="."/></to> 30 <admin-group> 31 <include-any> 32 <xsl:value-of select="$color"/> 33 </include-any> 34 </admin-group> 35 </label-switched-path> 36 </xsl:for-each> 37 </mpls> 38 </protocols> 39 </transient-change> 40 </xsl:for-each> 41 </xsl:template> 42 </xsl:stylesheet>
Les lignes 1 à 8 (et les lignes 43 et 44) sont le modèle standard que vous incluez dans chaque script de commit XSLT. Par souci de concision, les lignes 1 à 8 sont omises ici.
La ligne 9 affecte le niveau hiérarchique [edit protocols mpls]
à une variable appelée mpls
.
9 <xsl:variable name="mpls" select="protocols/mpls"/>
La ligne 10 sélectionne chaque apply-macro
instruction au niveau hiérarchique [edit protocols mpls]
qui contient le color
paramètre. L’exemple de configuration du tableau 1 ne contient qu’une apply-macro
seule instruction. Par conséquent, cette <xsl:for-each>
instruction de programmation ne prend effet qu’une seule fois.
10 <xsl:for-each select="$mpls/apply-macro[data/name = 'color']">
La ligne 11 affecte la color
valeur du paramètre, dans ce cas blue
, à une variable appelée color
.
11 <xsl:variable name="color" select="data[name = 'color']/value"/>
La ligne 12 affecte la group-value
valeur du paramètre, dans ce cas 0
, à une variable appelée group-value
.
12 <xsl:variable name="group-value" select="data[name = \ 'group-value']/value"/>
Les lignes 13 à 15 génèrent un changement transitoire au niveau de la [edit protocols mpls]
hiérarchie.
13 <transient-change> 14 <protocols> 15 <mpls>
Les lignes 16 à 23 ajoutent l’instruction admin-groups
à la configuration et affectent la valeur de la variable au nom du groupe et la valeur de la variable à la color
group-value
valeur du groupe.
16 <admin-groups> 17 <name> 18 <xsl:value-of select="$color"/> 19 </name> 20 <group-value> 21 <xsl:value-of select="$group-value"/> 22 </group-value> 23 </admin-groups>
Les instructions de configuration résultantes sont les suivantes :
admin-groups { blue 0; }
La ligne 24 sélectionne le nom de chaque paramètre auquel aucune valeur n’est affectée, qui dans ce cas sont les quatre adresses IP. Cette <xsl:for-each>
instruction de programmation utilise la récursivité via la macro et sélectionne chaque adresse IP à tour de rôle. Les color
paramètres et ont chacun une valeur affectée (blue
et group-value
0
, respectivement), de sorte que cette ligne ne s’applique pas à eux.
24 <xsl:for-each select="data[not(value)]/name">
La ligne 25 ajoute l’instruction label-switched-path
dans la configuration.
25 <label-switched-path>
Les lignes 26 à 28 attribuent un label-switched-path
nom qui concatène la valeur de la variable, le texte --lsp
, et l’adresse IP actuelle actuellement sélectionnée par la color
ligne 24 (représentée par le " " .
).
26 <name> 27 <xsl:value-of select="concat($color, '-lsp-', .)"/> 28 </name>
La ligne 29 ajoute l’instruction à la configuration et définit sa valeur sur l’adresse to
IP actuellement sélectionnée par la ligne 24.
29 <to><xsl:value-of select="."/></to>
Les lignes 30 à 34 ajoutent l’instruction admin-group include-any
à la configuration et définissent sa valeur sur la valeur de la color
variable.
30 <admin-group> 31 <include-any> 32 <xsl:value-of select="$color"/> 33 </include-any> 34 </admin-group>
Les instructions de configuration résultantes (pour un passage) sont les suivantes :
label-switched-path blue-lsp-10.1.1.1 { to 10.1.1.1; admin-group include-any blue; }
Les lignes 35 à 42 sont des balises de fermeture.
35 </label-switched-path> 36 </xsl:for-each> 37 </mpls> 38 </protocols> 39 </transient-change> 40 </xsl:for-each> 41 </xsl:template> 42 </xsl:stylesheet>
Syntaxe SLAX
Le script SLAX équivalent est :
version 1.0; ns junos = "http://xml.juniper.net/junos/*/junos"; ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; import "../import/junos.xsl"; match configuration { var $mpls = protocols/mpls; for-each ($mpls/apply-macro[data/name = 'color']) { var $color = data[name = 'color']/value; var $group-value = data[name='group-value']/value; <transient-change> { <protocols> { <mpls> { <admin-groups> { <name> $color; <group-value> $group-value; } for-each (data[not(value)]/name) { <label-switched-path> { <name> $color _ '-lsp-' _ .; <to> .; <admin-group> { <include-any> $color; } } } } } } } }
Syntaxe Python
La syntaxe Python suivante produit les mêmes modifications de configuration :
from junos import Junos_Configuration import jcs def main(): # Get configuration root object root = Junos_Configuration for element in root.xpath("./protocols/mpls/ \ apply-macro[data/name='color']"): color = element.find("data[name='color']/value").text group_value = element.find("data[name='group-value']/value").text lsp_config ="" for element2 in element.xpath("data[not(value)]/name"): lsp_config = lsp_config + """ <label-switched-path> <name>{0}-lsp-{1}</name> <to>{1}</to> <admin-group> <include-any>{0}</include-any> </admin-group> </label-switched-path> """.format(color, element2.text) change_xml = """ <protocols> <mpls> <admin-groups> <name>{0}</name> <group-value>{1}</group-value> </admin-groups> {2} </mpls> </protocols> """.format(color, group_value, lsp_config).strip() jcs.emit_change(change_xml, "transient-change", "xml") if __name__ == '__main__': main()
Pour plus d’informations sur cet exemple, consultez Exemple : configurer des groupes d’administration pour les prestataires de services linguistiques.
Configuration
Procédure
Procédure étape par étape
Pour télécharger, activer et tester le script :
Copiez le script dans un fichier texte, nommez-le fichier lsp-admin.xsl, lsp-admin.slax ou lsp-admin.py selon le cas, puis copiez-le dans le répertoire /var/db/scripts/commit sur l’appareil.
Note:Les scripts Python non signés doivent appartenir à un root ou à un utilisateur de la classe de connexion Junos OS
super-user
, et seul le propriétaire du fichier peut disposer d’une autorisation d’écriture pour le fichier.Si le script est écrit en Python, activez l’exécution de scripts Python non signés.
[edit] user@host# set system scripts language python
Note:Configurez l’instruction pour utiliser Python 3 pour exécuter des scripts Python ou configurez l’instruction
language python3
pour utiliser Python 2.7 pour exécuter deslanguage python
scripts Python. Pour plus d’informations, voir langue.Sélectionnez les strophes de configuration de test suivantes, puis appuyez sur Ctrl+c pour les copier dans le Presse-papiers. Si vous utilisez la version SLAX ou Python du script, mettez à jour le nom de fichier au niveau de la
[edit system scripts commit file]
hiérarchie.system { scripts { commit { allow-transients; file lsp-admin.xsl; } } } protocols { mpls { apply-macro blue-type-lsp { 10.1.1.1; 10.2.2.2; 10.3.3.3; 10.4.4.4; color blue; group-value 0; } } }
En mode configuration, exécutez la
load merge terminal
commande pour fusionner les strophes dans la configuration de votre appareil.[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
À l’invite, collez le contenu du presse-papiers à l’aide de la souris et de l’icône Coller.
Appuyez sur Entrée.
Appuyez sur Ctrl+d.
Validez la configuration.
user@host# commit
Vérification
Vérification de l’exécution des scripts
But
Vérifiez que le script se comporte comme prévu.
Action
Pour afficher les instructions de configuration créées par le script, exécutez la show protocols mpls | display commit-scripts
commande.
[edit] user@host# show protocols mpls | display commit-scripts apply-macro blue-type-lsp { 10.1.1.1; 10.2.2.2; 10.3.3.3; 10.4.4.4; color blue; group-value 0; } admin-groups { blue 0; } label-switched-path blue-lsp-10.1.1.1 { to 10.1.1.1; admin-group include-any blue; } label-switched-path blue-lsp-10.2.2.2 { to 10.2.2.2; admin-group include-any blue; } label-switched-path blue-lsp-10.3.3.3 { to 10.3.3.3; admin-group include-any blue; } label-switched-path blue-lsp-10.4.4.4 { to 10.4.4.4; admin-group include-any blue; }