SUR CETTE PAGE
Exemple : Générer un message d’erreur personnalisé
Les scripts de validation de Junos OS peuvent générer des messages d’erreur personnalisés lors d’une opération de validation pour vous alerter lorsque la configuration enfreint les règles de configuration personnalisées. L’émission d’un message d’erreur entraîne l’échec de la validation. Cet exemple crée un script de validation qui génère un message d’erreur personnalisé lorsqu’une instruction spécifique n’est pas incluse dans la configuration de l’appareil, interrompant ainsi l’opération de validation.
Exigences
Junos OS version 16.1R3 ou version ultérieure lors de l’utilisation d’un script Python.
Vue d’ensemble et script de validation
À l’aide d’un script de validation, écrivez un message d’erreur personnalisé qui s’affiche lorsque l’instruction n’est description
pas incluse au niveau de la [edit interfaces t1-fpc/pic/port]
hiérarchie :
Le script est affiché en XSLT, SAX et Python.
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="interface" select="interfaces/interface"/> <xsl:for-each select="$interface[starts-with(name, 't1-')]"> <xsl:variable name="ifname" select="."/> <xsl:if test="not(description)"> <xnm:error> <xsl:call-template name="jcs:edit-path"/> <xsl:call-template name="jcs:statement"/> <message>Missing a description for this T1 interface.</message> </xnm:error> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Syntaxe SLAX
version 1.2; 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 $interface = interfaces/interface; for-each ($interface[starts-with(name, 't1-')]) { var $ifname = .; if (not(description)) { <xnm:error> { call jcs:edit-path(); call jcs:statement(); <message> "Missing a description for this T1 interface."; } } } }
Syntaxe Python
from junos import Junos_Configuration import jcs def main(): root = Junos_Configuration for element in root.xpath( "./interfaces/interface[starts-with(name,'t1-')]"): # Missing description if element.find('description') is None: # Emit error message to console jcs.emit_error("Missing a description for this T1 interface: " + element.find('name').text) if __name__ == '__main__': main()
Configuration
Procédure
Procédure étape par étape
Télécharger, activer et tester le script : pour vérifier qu’un script de validation génère correctement un message d’erreur, assurez-vous que la configuration candidate contient la condition qui déclenche l’erreur. Pour cet exemple, assurez-vous que la configuration d’une interface T1 n’inclut pas l’instruction description
.
Pour tester l’exemple de cette rubrique, procédez comme suit :
Copiez le script dans un fichier texte, nommez le fichier description.xsl, description.slax ou description.py selon le cas, puis copiez-le dans le répertoire /var/db/scripts/commit/ de l’appareil.
Note:Les scripts Python non signés doivent appartenir à l’utilisateur 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 sur le fichier.En mode configuration, configurez l’instruction
file
et le nom de fichier du script au niveau de la[edit system scripts commit]
hiérarchie.[edit] user@host# set system scripts commit file description.xsl
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
language python3
pour qu’elle utilise Python 3 pour exécuter des scripts Python, ou configurez l’instructionlanguage python
pour qu’elle utilise Python 2.7 pour exécuter des scripts Python. Pour plus d’informations, reportez-vous à la section langue.Si la configuration de chaque interface T1 inclut l’instruction
description
, supprimez la description d’une interface T1 existante à des fins de test.[edit] user@host# delete interfaces t1–0/0/1 description
Exécutez la
commit
commande pour valider la configuration.user@host# commit
Vérification
Vérification de l’exécution d’un script
But
Vérifiez le message d’erreur généré par le script de validation.
Action
Examinez la sortie de la commit
commande. Le script de validation génère un message d’erreur pour chaque interface T1 qui n’inclut pas d’instruction description
. Toute erreur entraîne l’échec du processus de validation.
[edit] user@host# commit [edit interfaces interface t1-0/0/1] 'description' Missing a description for this T1 interface. [edit interfaces interface t1-0/0/2] 'description' Missing a description for this T1 interface. error: 2 errors reported by commit scripts error: commit script failure
Pour afficher la version au format XML du message d’erreur, exécutez la commit check | display xml
commande.
[edit interfaces t1-0/0/1] user@host# commit check | display xml <rpc-reply xmlns:junos="http://xml.juniper.net/junos/10.0R1/junos"> <commit-results> <routing-engine junos:style="normal"> <name>re0</name> <xnm:error> <edit-path> [edit interfaces interface t1-0/0/1] </edit-path> <statement> description </statement> <message> Missing a description for this T1 interface. </message> </xnm:error> <xnm:error> <edit-path> [edit interfaces interface t1-0/0/2] </edit-path> <statement> description </statement> <message> Missing a description for this T1 interface. </message> </xnm:error> <xnm:error xmlns="http://xml.juniper.net/xnm/1.1/xnm" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"> <message> 2 errors reported by commit scripts </message> </xnm:error> <xnm:error xmlns="http://xml.juniper.net/xnm/1.1/xnm" xmlns:xnm="http://xml.juniper.net/xnm/1.1/xnm"> <message> commit script failure </message> </xnm:error> </routing-engine> </commit-results> <cli> <banner>[edit interfaces]</banner> </cli> </rpc-reply>
Pour afficher une trace détaillée du traitement du script de validation, exécutez la commit check | display detail
commande.
[edit interfaces t1-0/0/1] user@host# commit check | display detail 2009-06-15 15:56:09 PDT: reading commit script configuration 2009-06-15 15:56:09 PDT: testing commit script configuration 2009-06-15 15:56:09 PDT: opening commit script '/var/db/scripts/commit/error.xsl' 2009-06-15 15:56:09 PDT: reading commit script 'error.xsl' 2009-06-15 15:56:09 PDT: running commit script 'error.xsl' 2009-06-15 15:56:09 PDT: processing commit script 'error.xsl' [edit interfaces interface t1-0/0/1] 'description' Missing a description for this T1 interface. [edit interfaces interface t1-0/0/2] 'description' Missing a description for this T1 interface. 2009-06-15 15:56:09 PDT: 2 errors from script 'error.xsl' error: 2 errors reported by commit scripts error: commit script failure