SUR CETTE PAGE
Exemple : configuration de deux moteurs de routage
Si votre équipement est doté de moteurs de routage redondants (également appelés deux), la configuration de Junos OS peut être complexe. Cet exemple montre comment utiliser des scripts de validation pour simplifier et contrôler la configuration des plates-formes double moteur de routage.
Exigences
Cet exemple utilise un équipement exécutant Junos OS avec deux moteurs de routage.
Présentation et script de validation
Junos OS prend en charge deux groupes de configuration spéciaux : re0
et re1
. Lorsque ces groupes sont appliqués à l’aide de l’instruction apply-groups [ re0 re1 ]
, ils prennent effet si le nom du moteur de routage correspond au nom du groupe. Les instructions incluses au niveau de la [edit groups re0]
hiérarchie ne sont héritées que sur le moteur de routage nommé RE0, et les instructions incluses au niveau de la [edit groups re1]
hiérarchie ne sont héritées que sur le moteur de routage nommé RE1.
Cet exemple inclut deux scripts de validation. Le premier script, dual-re.xsl, génère un avertissement si l’instruction system host-name
, toute adresse d’interface IP version 4 (IPv4) ou la configuration de l’interface fxp0 sont configurées dans la configuration cible plutôt que dans un groupe de configuration.
Le deuxième script, dual-re2.xsl, vérifie d’abord si la configuration du nom de l’hôte est configurée, puis vérifie si elle est configurée dans un groupe de configuration. La otherwise
structure génère un message d’erreur si le nom de l’hôte n’est pas configuré du tout. La première when
structure permet au script de ne rien faire si le nom de l’hôte est déjà configuré dans un groupe de configuration. La seconde when
structure prend effet lorsque le nom de l’hôte est configuré dans la configuration cible. Dans ce cas, le script génère une modification transitoire qui place la configuration du nom d’hôte dans les re0
groupes de configuration et re1
copie le nom d’hôte configuré dans ces groupes, qui les remplace par un nom -RE0
d’hôte de groupe, et -RE1
désactive le nom d’hôte dans la configuration cible afin que les noms d’hôte de groupe de configuration puissent être hérités.
Les exemples de scripts sont illustrés dans les syntaxes XSLT et SLAX :
Syntaxe XSLT : script dual-re.xsl
<?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:for-each select="system/host-name | interfaces/interface/unit/family/inet/address | interfaces/interface[name = 'fxp0']"> <xsl:if test="not(@junos:group) or not(starts-with(@junos:group, 're'))"> <xnm:warning> <xsl:call-template name="jcs:edit-path"> <xsl:with-param name="dot" select=".."/> </xsl:call-template> <xsl:call-template name="jcs:statement"/> <message> <xsl:text>statement should not be in target</xsl:text> <xsl:text> configuration on dual RE system</xsl:text> </message> </xnm:warning> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Syntaxe XSLT : script dual-re2.xsl
<?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="hn" select="system/host-name"/> <xsl:choose> <xsl:when test="$hn/@junos:group"/> <xsl:when test="$hn"> <transient-change> <groups> <name>re0</name> <system> <host-name> <xsl:value-of select="concat($hn, '-RE0')"/> </host-name> </system> </groups> <groups> <name>re1</name> <system> <host-name> <xsl:value-of select="concat($hn, '-RE1')"/> </host-name> </system> </groups> <system> <host-name inactive="inactive"/> </system> </transient-change> </xsl:when> <xsl:otherwise> <xnm:error> <message>Missing [system host-name]</message> </xnm:error> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
Syntaxe SLAX : script dual-re.xsl
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 { for-each (system/host-name | interfaces/interface/unit/family/inet/address | interfaces/interface[name = 'fxp0']) { if (not(@junos:group) or not(starts-with(@junos:group, 're'))) { <xnm:warning> { call jcs:edit-path($dot = ..); call jcs:statement(); <message> { expr "statement should not be in target"; expr " configuration on dual RE system"; } } } } }
Syntaxe SLAX : script dual-re2.xsl
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 $hn = system/host-name; if ($hn/@junos:group) { } else if ($hn) { <transient-change> { <groups> { <name> "re0"; <system> { <host-name> $hn _ '-RE0'; } } <groups> { <name> "re1"; <system> { <host-name> $hn _ '-RE1'; } } <system> { <host-name inactive="inactive">; } } else { <xnm:error> { <message> "Missing [system host-name]"; } } } }
Configuration
Procédure
Procédure étape par étape
Pour télécharger, activer et exécuter les scripts :
Copiez les scripts dans deux fichiers texte, nommez les fichiers dual-re.xsl et dual-re2.xsl ou dual-re.slax et dual-re2.slax si nécessaire, puis copiez-les dans le répertoire /var/db/scripts/commit/ de l’équipement.
Sélectionnez les catégories 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 les noms de fichier au niveau de la
[edit system scripts commit file]
hiérarchie par dual-re.slax et dual-re2.slax.groups { re0 { interfaces { fxp0 { unit 0 { family inet { address 10.0.0.1/24; } } } } } } apply-groups re0; system { host-name router1; scripts { commit { file dual-re.xsl; file dual-re2.xsl; } } } interfaces { fe-0/0/0 { unit 0 { family inet { address 192.168.220.1/30; } } } }
En mode configuration, la
load merge terminal
commande permet de fusionner les catégories dans la configuration de votre équipement.[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 de collage.
Appuyez sur Entrée.
Appuyez sur Ctrl+d.
Validez la configuration.
user@host# commit
Vérification
Vérification des modifications du script de validation
But
Vérifiez que le script se comporte comme prévu.
Action
Vérifiez la sortie de la commit
commande. Une fois l’opération de validation terminée, le nom de l’hôte de l’équipement est remplacé par routeur1-RE0.
[edit] user@host# commit [edit system] 'host-name router1;' warning: statement should not be in target configuration on dual RE system [edit interfaces interface fe-0/0/0 unit 0 family inet] 'address 192.168.220.1/30;' warning: statement should not be in target configuration on dual RE system commit complete