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
fileet 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 python3pour qu’elle utilise Python 3 pour exécuter des scripts Python, ou configurez l’instructionlanguage pythonpour 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
commitcommande 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