Créer une syntaxe de configuration personnalisée avec les macros de script de validation
Les macros de script de validation vous permettent de créer une syntaxe de configuration personnalisée et de l’étendre à des instructions de configuration Junos OS standard. Votre syntaxe personnalisée sert d’entrée à un script de validation. Le script de validation est la syntaxe de configuration junos OS standard, comme illustré en figure 1. Les instructions Junos OS standard sont ajoutées à la configuration pour entraîner les modifications opérationnelles prévues.

Les macros utilisent des éléments de modification persistants ou transitoires pour étendre votre syntaxe personnalisée en instructions de configuration Junos OS standard. Si vous utilisez des modifications persistantes, la syntaxe personnalisée et la syntaxe Junos OS standard apparaissent dans la configuration du candidat. Si vous utilisez des modifications transitoires, la syntaxe personnalisée apparaît dans la configuration du candidat et la syntaxe Junos OS standard est copiée dans la configuration de paiement uniquement.
Cette section aborde les sujets suivants :
Création d’une syntaxe personnalisée
Les macros fonctionnent en localisant apply-macro
les déclarations dans la configuration du candidat et en utilisant les valeurs spécifiées dans l’instruction apply-macro
comme paramètres à un ensemble d’instructions définies dans un script de validation. En effet, votre syntaxe de configuration personnalisée sert un double objectif. La syntaxe vous permet de simplifier vos tâches de configuration et fournit au script les données nécessaires à la création d’une configuration complexe.
Pour entrer une syntaxe personnalisée, vous incluez l’instruction apply-macro
à n’importe quel niveau hiérarchique et spécifiez toutes les données que vous souhaitez dans l’instruction apply-macro
, par exemple :
apply-macro macro-name { parameter-name parameter-value; }
Vous pouvez inclure l’instruction apply-macro
à n’importe quel niveau de la hiérarchie de configuration. En ce sens, l’énoncé apply-macro
est similaire à l’énoncé apply-groups
. Chaque apply-macro
instruction doit être nommée de manière unique, par rapport aux autres apply-macro
déclarations du même niveau hiérarchique.
Une apply-macro
instruction peut contenir un ensemble de paramètres avec des valeurs facultatives. Le script de validation correspondant peut faire référence au nom de la macro, à ses paramètres ou aux valeurs des paramètres. Lorsque le script inspecte la configuration et trouve les données, il effectue les actions spécifiées par la modification persistante ou transitoire correspondante.
Par exemple, compte tenu de la strophe de configuration suivante, vous pouvez écrire des instructions de script pour générer une configuration standard basée sur le nom du paramètre :
protocols { mpls { apply-macro blue-type-lsp { color blue; } } }
L’instruction de programmation suivante <xsl:for-each>
trouve les apply-macro
déclarations au niveau de la [edit protocols mpls]
hiérarchie qui contiennent un paramètre nommé color
:
<xsl:for-each select="protocols/mpls/apply-macro[data/name = 'color']">
L’instruction suivante crée une variable nommée color
et attribue à la variable la valeur du color
paramètre, qui est dans ce cas blue
:
<xsl:variable name="color" select="data[name = 'color']/value"/>
L’instruction suivante ajoute l’instruction admin-groups
à la configuration et attribue la valeur de la color
variable au nom du groupe :
<transient-change> <protocols> <mpls> <admin-groups> <name> <xsl:value-of select="$color"/> </name> </admin-groups> </mpls> </protocols> </transient-change>
Les instructions de configuration qui en résultent sont les suivantes :
protocols { mpls { admin-groups { blue; } } }
<>étélément
Dans le rendu XML de la syntaxe personnalisée dans une apply-macro
instruction, les paramètres et leurs valeurs sont contenus dans <name>
et <value>
des éléments, respectivement. Les <name>
éléments sont <value>
des enfants frères et soeurs de l’élément <data>
. Par exemple, l’instruction apply-macro blue-type-lsp
contient six paramètres, comme suit :
[edit 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; }
Les paramètres et les valeurs sont rendus dans les éléments de balise XML Junos comme suit :
[edit protocols mpls] user@host# show | display xml <rpc-reply xmlns:junos="http://xml.juniper.net/junos/10.0R1/junos"> <configuration> <protocols> <mpls> <apply-macro> <name>blue-type-lsp</name> <data> <name>10.1.1.1</name> </data> <data> <name>10.2.2.2</name> </data> <data> <name>10.3.3.3</name> </data> <data> <name>10.4.4.4</name> </data> <data> <name>color</name> <value>blue</value> </data> <data> <name>group-value</name> <value>0</value> </data> </apply-macro> </mpls> </protocols> </configuration> </rpc-reply>
Lorsque vous écrivez des macros de script de validation, vous pouvez extraire et manipuler les paramètres contenus dans les instructions en apply-macro
vous référant au <data>
, <name>
et aux <value>
éléments.
Dans l’exemple suivant, l’expression XPath de l’attribut select
extrait le texte contenu dans l’élément <value>
qui est un enfant d’un <data>
élément qui contient également un <name>
élément enfant avec le texte color
. La déclaration de variable attribue le texte de l’élément <value>
à une variable nommée color
.
<xsl:variable name="color" select="data[name = 'color']/value"/>
L’équivalent SLAX est :
var $color = ./data[name='color']/value;
L’équivalent Python, qui suppose qu’il element
a sélectionné un apply-macro
élément, est :
color = element.find("data[name='color']/value").text
Extension de la syntaxe personnalisée
Dans le script de validation correspondant, vous incluez une ou plusieurs instructions de programmation qui inspectent la configuration de l’instruction apply-macro
à un niveau hiérarchique spécifié. Vous pouvez également utiliser l’expression data/name
pour sélectionner un paramètre dans l’instruction apply-macro
.
<xsl:for-each select="xpath-expression/apply-macro[data/name = 'parameter-name']">
Par exemple, l’instruction de programmation XSLT suivante sélectionne chaque apply-macro
instruction qui contient le color
paramètre et qui apparaît au niveau de la [edit protocols mpls]
hiérarchie :
<xsl:for-each select="protocols/mpls/apply-macro[data/name = 'color']">
L’équivalent SLAX est :
for-each (protocols/mpls/apply-macro[data/name = 'color']) {
L’équivalent Python, qui s’étend sur plusieurs lignes pour la lisibilité, est :
for element in Junos_Configuration.xpath \ ("./protocols/mpls/apply-macro[data/name='color']"):
Lors de l’extension des macros, une instruction de programmation particulièrement utile dans les scripts XSLT est l’instruction <xsl:value-of>
. Cette instruction sélectionne une valeur de paramètre et l’utilise pour créer des valeurs d’option pour les instructions Junos OS. Par exemple, l’instruction suivante concaténe la valeur de la color
variable, du texte -lsp-
et du nœud de contexte actuel (représenté par " .
) pour créer un nom pour un LSP.
<label-switched-path> <name> <xsl:value-of select="concat($color, '-lsp-', .)"/> </name> </label-switched-path>
SLAX utilise le trait de soulignement (_
) pour concaténer des valeurs.
<label-switched-path> { <name> $color _ '-lsp-' _ .; }
Lorsque le script comprend des instructions pour trouver les données nécessaires, vous pouvez fournir du contenu pour une modification persistante ou transitoire qui utilise les données pour construire une configuration Junos OS standard.
La modification transitoire suivante crée un groupe d’administration et ajoute l’instruction label-switched-path
à la configuration. Le chemin de commutation d’étiquettes se voit attribuer un nom qui concatène la valeur de la color
variable, du texte -lsp-
et de l’adresse IP actuellement sélectionnée, représentée par le point («.
»). La modification transitoire ajoute également l’instruction to
et attribue l’adresse IP actuellement sélectionnée. Enfin, la modification transitoire ajoute l’instruction admin-group include-any
et attribue la valeur de la color
variable.
<transient-change> <protocols> <mpls> <admin-groups> <name><xsl:value-of select="$color"/></name> <group-value><xsl:value-of select="$group-value"/></group-value> </admin-groups> <xsl:for-each select="data[not(value)]/name"> <label-switched-path> <name><xsl:value-of select="concat($color, '-lsp-', .)"/></name> <to><xsl:value-of select="."/></to> <admin-group> <include-any><xsl:value-of select="$color"/></include-any> </admin-group> </label-switched-path> </xsl:for-each> </mpls> </protocols> </transient-change>
L’équivalent SLAX est :
<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; } } } } } }
De même dans Python :
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")
L’exemple illustré ici est partiel. Pour obtenir un exemple complet, voir Exemple : création d’une syntaxe de configuration personnalisée avec des macros de script de validation.
Une fois la configuration engagée, le script s’exécute, et la configuration complète qui en résulte ressemble à ceci :
[edit] 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; } } }
L’exemple précédent montre comment vous pouvez utiliser une syntaxe personnalisée simplifiée pour configurer des chemins de commutation d’étiquettes (LSP). Si la conception de votre réseau nécessite un grand nombre de LSP à configurer, l’utilisation d’une macro de script de validation peut gagner du temps, garantir la cohérence et éviter les erreurs de configuration.
Autres méthodes d’utilisation des macros
L’exemple abordé dans Création d’une syntaxe personnalisée montre une macro qui utilise des modifications transitoires pour créer l’impact opérationnel prévu. Vous pouvez également créer un script de validation qui utilise des modifications persistantes pour ajouter les déclarations Junos OS standard à la configuration du candidat et supprimer entièrement votre syntaxe personnalisée. De cette façon, un opérateur réseau qui n’est peut-être pas familier avec votre syntaxe personnalisée peut consulter le fichier de configuration et voir la configuration complète rendue sous la forme d’instructions Junos OS standard. Néanmoins, comme la macro de script de validation reste en vigueur, vous pouvez rapidement et facilement créer une configuration complexe à l’aide de votre syntaxe personnalisée.
Outre le type d’application abordé dans Créer une syntaxe personnalisée, vous pouvez également utiliser des macros pour empêcher un script de validation d’exécuter une tâche. Par exemple, un script de validation de base qui ajoute automatiquement une configuration MPLS aux interfaces peut faire une exception pour les interfaces que vous balisez explicitement comme n’ayant pas besoin de MPLS, en testant la présence d’une apply-macro
instruction nommée no-mpls
. Pour obtenir un exemple de cette utilisation des macros, voir Exemple : Configuration LDP de contrôle.
Vous pouvez utiliser l’instruction apply-macro
comme lieu de stockage de données externes. Le script de validation n’inspecte pas l’instruction apply-macro
, de sorte que l’instruction apply-macro
n’a pas d’impact opérationnel sur l’équipement, mais les données peuvent être transportées dans le fichier de configuration pour être utilisées par des applications externes.