Ejemplo: evitar la importación de la tabla de enrutamiento completa
En la política de enrutamiento de Junos OS, si configura una política sin condiciones de coincidencia y una acción de finalización de y, a continuación, aplica la política a un protocolo de then accept
enrutamiento, el protocolo importa toda la tabla de enrutamiento. En este ejemplo, se muestra cómo usar una secuencia de comandos de confirmación para evitar este escenario.
Requisitos
En este ejemplo, se utiliza un dispositivo que ejecuta Junos OS.
Descripción general y secuencia de comandos de confirmación
En este ejemplo, se inspeccionan las import
instrucciones configuradas en los [edit protocols ospf]
niveles de jerarquía y [edit protocols isis]
para determinar si alguna de las políticas denominadas contiene un then accept
término sin condiciones de coincidencia. La secuencia de comandos protege contra la importación de la tabla de enrutamiento completa a estos protocolos de puerta de enlace interiores (IGP).
La secuencia de comandos de ejemplo se muestra en la sintaxis de XSLT y SLAX:
Sintaxis de 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:param name="po" select="commit-script-input/configuration/policy-options"/> <xsl:template match="configuration"> <xsl:apply-templates select="protocols/ospf/import"/> <xsl:apply-templates select="protocols/isis/import"/> </xsl:template> <xsl:template match="import"> <xsl:param name="test" select="."/> <xsl:for-each select="$po/policy-statement[name=$test]"> <xsl:choose> <xsl:when test="then/accept and not(to) and not(from)"> <xnm:error> <xsl:call-template name="jcs:edit-path"> <xsl:with-param name="dot" select="$test"/> </xsl:call-template> <xsl:call-template name="jcs:statement"> <xsl:with-param name="dot" select="$test"/> </xsl:call-template> <message>policy contains bare 'then accept'</message> </xnm:error> </xsl:when> </xsl:choose> </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"; param $po = commit-script-input/configuration/policy-options; match configuration { apply-templates protocols/ospf/import; apply-templates protocols/isis/import; } match import { param $test = .; for-each ($po/policy-statement[name=$test]) { if (then/accept and not(to) and not(from)) { <xnm:error> { call jcs:edit-path($dot = $test); call jcs:statement($dot = $test); <message> "policy contains bare 'then accept'"; } } } }
Configuración
Procedimiento
Procedimiento paso a paso
Para descargar, habilitar y probar la secuencia de comandos:
Copie la secuencia de comandos en un archivo de texto, asigne al archivo import.xsl o import.slax el nombre adecuado 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 usa la versión SLAX de la secuencia de comandos, cambie el nombre de archivo en el
[edit system scripts commit file]
nivel de jerarquía a import.slax.system { scripts { commit { file import.xsl; } } } protocols { ospf { import bad-news; } } policy-options { policy-statement bad-news { then accept; } }
En el modo de configuración, ejecute el
load merge terminal
comando para fusionar 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 mouse y el icono de pegar.
Presione Intro.
Presione Ctrl + d.
Confirme la configuración.
user@host# commit
Verificación
Verificar la ejecución de script de confirmación
Propósito
Compruebe que la secuencia de comandos se comporta como se esperaba.
Acción
Revise el resultado del commit
comando. La configuración de ejemplo configura una import
instrucción en el [edit protocols ospf]
nivel de jerarquía. Dado que la política contiene un then accept
término sin condiciones de coincidencia, 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 ejecutar un commit
comando:
[edit] user@host# commit [edit protocols ospf] 'import bad-news;' policy contains bare 'then accept' error: 1 error reported by commit scripts error: commit script failure