Ejemplo: requerir y restringir las instrucciones de configuración
Los scripts de confirmación de Junos OS aplican reglas de configuración personalizadas. Cuando se confirma una configuración de candidato , cada secuencia de comandos de confirmación activa la inspecciona. En este ejemplo, se usa una secuencia de comandos de confirmación para especificar instrucciones de configuración necesarias y prohibidas.
Requisitos
En este ejemplo, se usa un dispositivo que ejecuta Junos OS que tiene la interfaz de administración Ethernet fxp0.
Descripción general y script de confirmación
En este ejemplo, se muestra cómo usar una secuencia de comandos de confirmación para especificar instrucciones de configuración necesarias y prohibidas. La siguiente secuencia de comandos de confirmación garantiza que la interfaz de administración de Ethernet (fxp0) esté configurada y detecta cuando la interfaz está deshabilitada incorrectamente. El script también detecta cuando la bgp
instrucción no se incluye en el [edit protocols]
nivel de jerarquía. En todos los casos, la secuencia de comandos genera un mensaje de error y se produce un error en la operación de confirmación.
El script de ejemplo se muestra en la sintaxis XSLT y SLAX:
Sintaxis 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:call-template name="error-if-missing"> <xsl:with-param name="must" select="interfaces/interface[name='fxp0']/ unit[name='0']/family/inet/address"/> <xsl:with-param name="statement" select="'interfaces fxp0 unit 0 family inet address'"/> </xsl:call-template> <xsl:call-template name="error-if-present"> <xsl:with-param name="must" select="interfaces/interface[name='fxp0']/disable | interfaces/interface[name='fxp0']/ unit[name='0']/disable"/> <xsl:with-param name="message"> <xsl:text>The fxp0 interface is disabled.</xsl:text> </xsl:with-param> </xsl:call-template> <xsl:call-template name="error-if-missing"> <xsl:with-param name="must" select="protocols/bgp"/> <xsl:with-param name="statement" select="'protocols bgp'"/> </xsl:call-template> </xsl:template> <xsl:template name="error-if-missing"> <xsl:param name="must"/> <xsl:param name="statement" select="'unknown'"/> <xsl:param name="message" select="'missing mandatory configuration statement'"/> <xsl:if test="not($must)"> <xnm:error> <edit-path><xsl:copy-of select="$statement"/></edit-path> <message><xsl:copy-of select="$message"/></message> </xnm:error> </xsl:if> </xsl:template> <xsl:template name="error-if-present"> <xsl:param name="must" select="1"/> <!-- error if param missing --> <xsl:param name="message" select="'invalid configuration statement'"/> <xsl:for-each select="$must"> <xnm:error> <xsl:call-template name="jcs:edit-path"/> <xsl:call-template name="jcs:statement"/> <message><xsl:copy-of select="$message"/></message> </xnm:error> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Sintaxis SLAX
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 { call error-if-missing($must = interfaces/interface[name='fxp0']/unit[name='0']/family/inet/address, $statement = 'interfaces fxp0 unit 0 family inet address'); call error-if-present($must = interfaces/interface[name='fxp0']/disable | interfaces/interface[name='fxp0']/unit[name='0']/disable) { with $message = { expr "The fxp0 interface is disabled."; } } call error-if-missing($must = protocols/bgp, $statement = 'protocols bgp'); } error-if-missing ($must, $statement = 'unknown', $message = 'missing mandatory configuration statement') { if (not($must)) { <xnm:error> { <edit-path> { copy-of $statement; } <message> { copy-of $message; } } } } error-if-present ($must = 1, $message = 'invalid configuration statement') { for-each ($must) { <xnm:error> { call jcs:edit-path(); call jcs:statement(); <message> { copy-of $message; } } } }
Configuración
Procedimiento
Procedimiento paso a paso
Para descargar, habilitar y probar el script:
Copie el script en un archivo de texto, asigne un nombre al archivo no-nukes.xsl o no-nukes.slax , según corresponda, y cópielo en el directorio /var/db/scripts/commit/ del dispositivo.
Seleccione las siguientes estrofas de configuración de prueba y presione Ctrl + c para copiarlas en el portapapeles.
Si utiliza la versión SLAX del script, cambie el nombre de archivo en el
[edit system scripts commit file]
nivel jerárquico a no-nukes.slax.system { scripts { commit { file no-nukes.xsl; } } } interfaces { fxp0 { disable; unit 0 { family inet { address 10.0.0.1/24; } } } }
En el modo de configuración, emita el
load merge terminal
comando para combinar las estrofas en la configuración del dispositivo.[edit] user@host# load merge terminal [Type ^D at a new line to end input] ... Paste the contents of the clipboard here ...
En el indicador, pegue el contenido del portapapeles con el ratón y el icono de pegar.
Presione Intro.
Presione Ctrl + d.
Confirme la configuración.
user@host# commit
Verificación
Verificar la ejecución de scripts de confirmación
Propósito
Compruebe que la secuencia de comandos se comporte como se esperaba.
Acción
Revise el resultado del commit
comando. El script requiere que la interfaz de administración de Ethernet (fxp0) esté configurada y habilitada, y que la bgp
instrucción se incluya en el [edit protocols]
nivel de jerarquía. Las estrofas de configuración de ejemplo incluyen la interfaz fxp0, pero la desactiven. Además, la bgp
instrucción no está configurada en el [edit protocols]
nivel de jerarquía. Cuando se ejecuta la secuencia de comandos, genera un error y se produce un error en la operación de confirmación. El siguiente resultado aparece después de emitir un commit
comando:
[edit] user@host# commit [edit interfaces interface fxp0 disable] 'disable;' The fxp0 interface is disabled. protocols bgp missing mandatory configuration statement error: 2 errors reported by commit scripts error: commit script failure