Generar una advertencia, un error o un mensaje de registro del sistema personalizados en scripts de confirmación
Los scripts de confirmación de Junos OS pueden generar advertencias, errores o mensajes de registro del sistema personalizados durante una operación de confirmación para alertarle cuando la configuración no cumpla con las reglas de configuración personalizadas. La generación de un error también provoca un error en la operación de confirmación. Para generar una advertencia, un error o un mensaje de registro del sistema personalizados en un script de confirmación:
Incluya la plantilla de script de confirmación adecuada de Required Boilerplate for Commit Scripts. Se reproduce aquí para mayor comodidad:
Plantilla 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"> <!-- ... insert your code here ... --> </xsl:template> </xsl:stylesheet>
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 { /* * insert your code here */ }
from junos import Junos_Configuration import jcs if __name__ == '__main__': # insert your code here
En la posición indicada por el comentario "insert your code here," incluya una o más instrucciones de programación XSLT o sus equivalentes SLAX o Python. Entre las construcciones XSLT más utilizadas se incluyen las siguientes:
<xsl:choose> <xsl:when> <xsl:otherwise>
—Construcción condicional que hace que se procesen diferentes instrucciones en diferentes circunstancias. La<xsl:choose>
instrucción contiene uno o más<xsl:when>
elementos, cada uno de los cuales prueba una expresión XPath . Si la prueba se evalúa como verdadera, el procesador XSLT ejecuta las instrucciones del<xsl:when>
elemento. El procesador XSLT procesa sólo las instrucciones contenidas en el primer<xsl:when>
elemento cuyotest
atributo se evalúa como verdadero. Si ninguno de los atributos de los<xsl:when>
test
elementos se evalúa como verdadero, se procesa el contenido del<xsl:otherwise>
elemento, si lo hay.<xsl:for-each select="xpath-expression">
—Instrucción de programación que indica al procesador XSLT que reúna un conjunto de nodos y los procese uno por uno. Los nodos se seleccionan mediante la expresión XPath (Lenguaje de marcado extensible (XML) en elselect
atributo. Cada uno de los nodos se procesa de acuerdo con las instrucciones contenidas en la<xsl:for-each>
instrucción. El código dentro de una<xsl:for-each>
instrucción se evalúa recursivamente para cada nodo que coincide con la expresión XPath. El contexto se mueve al nodo durante cada pasada.<xsl:if test="xpath-expression">
: construcción condicional que hace que se procesen instrucciones si la expresión XPath deltest
atributo se evalúa comotrue
.Por ejemplo, la siguiente instrucción de programación se evalúa como verdadera cuando la
host-name
instrucción no se incluye en el nivel de[edit system]
jerarquía:<xsl:if test="not(system/host-name)">
En SLAX, el
if
constructo se ve así:if (not(system/host-name))
Del mismo modo, en Python:
if not(Junos_Configuration.xpath("./system/host-name")):
Incluya las construcciones adecuadas para generar una advertencia, un error o un mensaje de registro del sistema.
En los scripts SLAX y XSLT, incluya
<xnm:warning>
,<xnm:error>
o<syslog>
elementos con un<message>
elemento secundario que especifique el contenido del mensaje. Para los mensajes de advertencia y error, puede incluir otros elementos secundarios, como lasjcs:edit-path
plantillas yjcs:statement
, que hacen que el mensaje de advertencia o error incluya la jerarquía de configuración relevante y la información de la instrucción, como se muestra en los ejemplos siguientes.En scripts de Python, incluya
jcs.emit_warning()
,jcs.emit_error()
, ojcs.syslog()
funciones, e incluya la cadena de mensaje en la lista de argumentos.Por ejemplo, cuando una secuencia de comandos de confirmación XSLT genera una advertencia utilizando el siguiente
<xnm:warning>
elemento:<xnm:warning> <xsl:call-template name="jcs:edit-path"> <xsl:with-param name="dot" select="chassis"/> </xsl:call-template> <message>IP source-route processing is not enabled.</message> </xnm:warning>
Emite la siguiente salida durante la
commit
operación:[edit chassis] warning: IP source-route processing is not enabled. commit complete
Del mismo modo, cuando un script de confirmación XSLT genera un error utilizando el siguiente
<xnm:error>
elemento:<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>
Emite la siguiente salida durante la
commit
operación:[edit interfaces interface t1-0/0/0] 'interface t1-0/0/0;' Missing a description for this T1 interface. error: 1 error reported by commit scripts error: commit script failure
Nota:En los scripts SLAX y XSLT, si incluye un mensaje de advertencia junto con un cambio de configuración generado por un script, puede generar la advertencia incluyendo el
message
parámetro con lajcs:emit-change
plantilla. El parámetro message hace que lajcs:emit-change
plantilla llame a la<xnm:warning>
plantilla, que envía una notificación de advertencia a la CLI. (Para obtener más información, consulte Información general sobre la generación de cambios de configuración persistentes o transitorios mediante scripts de confirmación).Para los mensajes de registro del sistema, el único elemento secundario admitido es
<message>
:<syslog> <message>syslog-string</message> </syslog>
Para obtener una descripción de todas las etiquetas y atributos XSLT que puede incluir, consulte Elementos de etiqueta de script de confirmación de SLAX y XSLT para usar al generar mensajes.
Para conocer las versiones SLAX de estas construcciones, consulte Ejemplo: generar un mensaje de advertencia personalizado, Ejemplo: generar un mensaje de error personalizado y Ejemplo: Generar un mensaje de registro del sistema personalizado.
Guarde el script con un nombre significativo.
Copie el script en el directorio /var/db/scripts/commit del disco duro o en el directorio /config/scripts/commit de la unidad flash.
Para obtener información acerca de cómo configurar la ubicación de almacenamiento para los scripts de confirmación, consulte Almacenar y habilitar scripts de automatización de Junos y Almacenar scripts en la memoria flash.
Habilite el script incluyendo la
file filename
instrucción en el nivel de[edit system scripts commit]
jerarquía.[edit system scripts commit] user@host# set file filename
Si el script está escrito en Python, habilite la ejecución de scripts de Python sin firmar.
[edit] user@host# set system scripts language (python | python3)
Confirme la configuración.
[edit] user@host# commit and-quit
Nota:Si el dispositivo tiene motores de enrutamiento duales y desea que la secuencia de comandos surta efecto en ambas, puede emitir el
commit synchronize scripts
comando para sincronizar la configuración y copiar las secuencias de comandos en el otro motor de enrutamiento como parte de la operación de confirmación.