Boilerplate requis pour les scripts SNMP
Les scripts SNMP de Junos OS peuvent être écrits en XSLT (Extensible Stylesheet Language Transformations), en SAX (Stylesheet Language Alternative) ou en Python. Les scripts SNMP doivent inclure le standard requis pour ce langage de script pour les fonctionnalités de script de base, ainsi que pour toutes les fonctionnalités facultatives utilisées dans le script, telles que les fonctions d’extension Junos OS et les modèles nommés. Cette rubrique fournit un modèle standard standard qui peut être utilisé dans les scripts SNMP XSLT, SAX et Python.
Passe-partout SLAX pour les scripts SNMP
Le script SNMP standard de SLAX est le suivant :
1 version 1.2; 2 ns junos = "http://xml.juniper.net/junos/*/junos"; 3 ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; 4 ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; 5 ns dyn = "http://exslt.org/dynamic"; 6 ns snmp extension = "http://exslt.org/functions"; 7 match / { 8 <snmp-script-results> { 9 var $snmp-action = snmp-script-input/snmp-action; 10 var $snmp-oid = snmp-script-input/snmp-oid; <!-- ... insert your code here ... --> 11 <snmp-oid> $snmp-oid; 12 <snmp-type> $snmp-type; 13 <snmp-value> $snmp-value; } }
Les scripts SNMP SLAX et XSLT sont basés sur Junos XML et sur des éléments de balise de protocole Junos XML. Comme tous les éléments XML, les chevrons entourent le nom d’un élément de balise de protocole Junos XML ou Junos XML dans ses balises d’ouverture et de fermeture. Il s’agit d’une convention XML, et les crochets sont une partie obligatoire du nom complet de l’élément de balise. Elles ne doivent pas être confondues avec les chevrons utilisés dans la documentation pour indiquer les parties facultatives des chaînes de commande CLI de Junos OS.
La ligne 1 spécifie que la version SLAX est 1.2.
1 version 1.2;
Les lignes 2 à 6 listent tous les mappages d’espaces de noms couramment utilisés dans les scripts SNMP. Tous ces préfixes ne sont pas utilisés dans cet exemple. La liste de tous les mappages d’espaces de noms évite les erreurs si les mappages sont utilisés dans des versions ultérieures du script. Ces mappages d’espaces de noms vous permettent d’utiliser des fonctions d’extension et des modèles nommés dans vos scripts. Ces fonctions d’extension et modèles nommés sont abordés dans Présentation des fonctions d’extension dans les scripts d’automatisation Junos OS et Présentation des modèles nommés dans les scripts d’automatisation Junos OS.
Les lignes 5 et 6 ont des mappages d’espaces de noms EXSLT. Les fonctions d’extension SNMP sont définies dans l’espace de noms avec le http://exslt.org/functions d’URI associé. La ligne 6 enregistre l’espace de noms de l’extension snmp
avec l’espace de noms des fonctions EXSLT, ce qui vous permet de définir des fonctions personnalisées en utilisant snmp
comme préfixe dans votre script SLAX. Pour plus d’informations sur l’espace de noms EXSLT, consultez http://exslt.org/func/index.html.
2 ns junos = "http://xml.juniper.net/junos/*/junos"; 3 ns xnm = "http://xml.juniper.net/xnm/1.1/xnm"; 4 ns jcs = "http://xml.juniper.net/junos/commit-scripts/1.0"; 5 ns dyn = "http://exslt.org/dynamic"; 6 ns snmp extension = "http://exslt.org/functions";
La ligne 7 définit un modèle sans nom, match /
, qui représente le niveau supérieur de la hiérarchie de configuration. Toutes les expressions XPath ( XML Path Language ) du script doivent commencer par l’élément de niveau supérieur de la hiérarchie de configuration. Cela permet au script d’accéder à tous les appels de procédure à distance (RPC) de protocole Junos XML et Junos XML. Pour plus d’informations, consultez Vue d’ensemble de XPath.
7 match / {
Après l’élément de match /
balise, la <snmp-script-results>
balise de conteneur doit être la balise enfant de niveau supérieur, comme indiqué à la ligne 8. La valeur de ce conteneur est renvoyée au demandeur d’OID.
8 <snmp-script-results> {
Les lignes 9 et 10 définissent des variables en fonction des éléments correspondants que vous pouvez utiliser dans votre code pour déterminer si l’action est get ou get-next, et la valeur de l’OID.
9 var $snmp-action = snmp-script-input/snmp-action; 10 var $snmp-oid = snmp-script-input/snmp-oid;
Entre la ligne 10 et la ligne 11, vous pouvez définir du code supplémentaire qui inclut des modèles XSLT appelés à partir match /
du modèle.
Les lignes 11 à 13 définissent les valeurs renvoyées par le script SNMP au demandeur OID. La valeur de <snmp-oid>
est extraite de la valeur d’entrée de snmp-script-input/snmp-oid
. Pour la fonctionnalité de script SNMP, les types d’identificateurs d’objet suivants sont <snmp-type>
pris en charge :
Counter32
Counter64
Integer32
Unsigned32
Octet String
Vous définissez le <snmp-value>
sur la valeur de retour du script.
11 <snmp-oid> $snmp-oid; 12 <snmp-type> $snmp-type; 13 <snmp-value> $snmp-value;
XSLT Boilerplate pour les scripts SNMP
Le standard XSLT est le suivant :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xsl:stylesheet 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" xmlns:dyn="http://exslt.org/dynamic" xmlns:snmp="http://exslt.org/functions" version="1.0" extension-element-prefixes="snmp"> <xsl:template match="/"> <snmp-script-results> <xsl:variable name="snmp-action" select="snmp-script-input/snmp-action"/> <xsl:variable name="snmp-oid" select="snmp-script-input/snmp-oid"/> <!-- Insert your code here --> <snmp-oid> <xsl:value-of select="$snmp-oid"/> </snmp-oid> <snmp-type> <xsl:value-of select="$snmp-type"/> </snmp-type> <snmp-value> <xsl:value-of select="$snmp-value"/> </snmp-value> </snmp-script-results> </xsl:template> </xsl:stylesheet>
Python Boilerplate pour les scripts SNMP
Les scripts SNMP Python n’ont pas de boilerplate obligatoire, mais ils doivent importer tous les objets utilisés dans le script. Les scripts SNMP Python doivent inclure l’instruction import jcs
afin d’utiliser les get_snmp_action()
fonctions , get_snmp_oid()
, et emit_snmp_attributes()
qui récupèrent les valeurs d’action et d’OID transmises au script et renvoient les données de l’objet MIB demandé.
import jcs if __name__ == '__main__':
Les scripts d’automatisation Python n’ont pas besoin d’inclure une ligne de directive d’interpréteur (#!/usr/bin/env python
) au début du script. Cependant, le programme s’exécutera toujours correctement s’il y en a un.