SUR CETTE PAGE
Exemple : contrôle des interfaces IS-IS et MPLS
Cet exemple montre comment utiliser des scripts de validation pour réduire la quantité de configuration manuelle.
Exigences
Cet exemple utilise un périphérique exécutant Junos OS.
Présentation et script de validation
Si vous souhaitez activer MPLS sur une interface, vous devez apporter des modifications au niveau de la hiérarchie et [edit protocols mpls] de la [edit interfaces] hiérarchie. Cet exemple montre comment utiliser des scripts de validation pour réduire la quantité de configuration manuelle.
Cet exemple exécute deux tâches connexes. Si une interface a [family iso] été configurée mais pas [family mpls], une modification de configuration est apportée (à l’aide du modèle) pour activer MPLS jcs:emit-change . MPLS n’étant pas valide sur les interfaces de bouclage (loX), ce script ignore les interfaces de bouclage. Deuxièmement, si l’interface n’est pas configurée au niveau de la hiérarchie, une modification est apportée pour ajouter l’interface [edit protocols mpls] . Ces deux modifications sont accompagnées de messages d’avertissement appropriés.
L’exemple de script est présenté en syntaxe XSLT et SLAX :
Syntaxe XSLT
<?xml version="1.0" standalone="yes"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:junos="http://xml.juniper.net/junos/*/junos" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm" xmlns:jcs="http://xml.juniper.net/junos/commit-scripts/1.0"> <xsl:import href="../import/junos.xsl"/> <xsl:template match="configuration"> <xsl:variable name="mpls" select="protocols/mpls"/> <xsl:for-each select="interfaces/interface[not(starts-with(name,'lo'))] /unit[family/iso]"> <xsl:variable name="ifname" select="concat(../name, '.', name)"/> <xsl:if test="not(family/mpls)"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="message"> <xsl:text>Adding 'family mpls' to ISO-enabled interface</xsl:text> </xsl:with-param> <xsl:with-param name="content"> <family> <mpls/> </family> </xsl:with-param> </xsl:call-template> </xsl:if> <xsl:if test="$mpls and not($mpls/interface[name = $ifname])"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="message"> <xsl:text>Adding ISO-enabled interface </xsl:text> <xsl:value-of select="$ifname"/> <xsl:text> to [protocols mpls]</xsl:text> </xsl:with-param> <xsl:with-param name="dot" select="$mpls"/> <xsl:with-param name="content"> <interface> <name> <xsl:value-of select="$ifname"/> </name> </interface> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Syntaxe SLAX
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 (interfaces/interface[not(starts-with(name, "lo"))]/unit[family/iso]) {
var $ifname = ../name _ '.' _ name;
if (not(family/mpls)) {
call jcs:emit-change() {
with $message = {
expr "Adding 'family mpls' to ISO-enabled interface";
}
with $content = {
<family> {
<mpls>;
}
}
}
}
if ($mpls and not($mpls/interface[name = $ifname])) {
call jcs:emit-change($dot = $mpls) {
with $message = {
expr "Adding ISO-enabled interface ";
expr $ifname;
expr " to [protocols mpls]";
}
with $content = {
<interface> {
<name> $ifname;
}
}
}
}
}
}
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 iso.xsl ou iso.slax selon le cas, puis copiez-le dans le répertoire / var/db/scripts/commit/ sur le périphérique.
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 du script, remplacez le nom de fichier au niveau de la
[edit system scripts commit file]hiérarchie par iso.slax.system { scripts { commit { file iso.xsl; } } } interfaces { lo0 { unit 0 { family iso; } } so-1/2/3 { unit 0 { family iso; } } so-1/3/2 { unit 0 { family iso; } } } protocols { mpls { enable; } }En mode configuration, exécutez la
load merge terminalcommande 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 la configuration
But
Vérifiez que le script se comporte comme prévu.
Action
Examinez la sortie de la commit commande.
[edit] user@host# commit [edit interfaces interface so-1/2/3 unit 0] warning: Adding 'family mpls' to ISO-enabled interface [edit interfaces interface so-1/2/3 unit 0] warning: Adding ISO-enabled interface so-1/2/3.0 to [protocols mpls] [edit interfaces interface so-1/3/2 unit 0] warning: Adding 'family mpls' to ISO-enabled interface [edit interfaces interface so-1/3/2 unit 0] warning: Adding ISO-enabled interface so-1/3/2.0 to [protocols mpls] commit complete
Exécutez la show interfaces commande. Vérifiez que l’interface de bouclage n’est pas modifiée et que les interfaces SONET/SDH sont modifiées.
[edit]
user@host# show interfaces
so-1/2/3 {
unit 0 {
family iso;
family mpls;
}
}
so-1/3/2 {
unit 0 {
family iso;
family mpls;
}
}
lo0 {
unit 0 {
family iso;
}
}