Ejemplo: Anteponer una política global
En este ejemplo de script de confirmación, se garantiza que se aplique una política de importación global de BGP a todas las importaciones del BGP antes de que se apliquen otras políticas de importación.
Requisitos
En este ejemplo, se utiliza un dispositivo que ejecuta Junos OS.
Descripción general y secuencia de comandos de confirmación
Para la mayoría de los objetos de configuración, el orden en que se crea el objeto o sus elementos secundarios no es significativo, ya que el software de administración de configuración de Junos OS almacena y muestra objetos de configuración en posiciones predeterminadas en la jerarquía de configuración. Sin embargo, algunos objetos de configuración,como las políticas de enrutamiento y los filtros de firewall, se componen de elementos que se deben procesar y analizar secuencialmente para producir el comportamiento de enrutamiento deseado.
Este script de confirmación de ejemplo garantiza que se aplique una política de importación global del BGP a todas las importaciones del BGP antes de que se apliquen otras políticas de importación.
En este ejemplo, se antepone automáticamente a la bgp_global_import
política frente a cualquier otra política de importación de BGP. Si la bgp_global_import
instrucción de política no se incluye en la configuración, se genera un mensaje de error y se produce un error en la operación de confirmación.
De lo contrario, la secuencia de comandos de confirmación utiliza el atributo de insert="before"
protocolo XML junos y la position()
función XSLT para controlar la posición de la política bgp global en relación con cualquier otra política aplicada. El insert="before"
atributo inserta la bgp_global_import
política delante de la primera política de importación bgp preexistente.
Si no hay ninguna política de importación de BGP predeterminada preexistente, la política global se incluye en la configuración.
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:template match="configuration"> <xsl:if test="not(policy-options/policy-statement[name='bgp_global_import'])"> <xnm:error> <message>Policy error: Policy bgp_global_import required</message> </xnm:error> </xsl:if> <xsl:for-each select="protocols/bgp | protocols/bgp/group | protocols/bgp/group/neighbor"> <xsl:variable name="first" select="import[position() = 1]"/> <xsl:if test="$first"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="tag" select="'transient-change'"/> <xsl:with-param name="content"> <import insert="before" name="{$first}">bgp_global_import</import> </xsl:with-param> </xsl:call-template> </xsl:if> </xsl:for-each> <xsl:for-each select="protocols/bgp"> <xsl:if test="not(import)"> <xsl:call-template name="jcs:emit-change"> <xsl:with-param name="tag" select="'transient-change'"/> <xsl:with-param name="content"> <import>bgp_global_import</import> </xsl:with-param> </xsl:call-template> </xsl:if> </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 { if (not(policy-options/policy-statement[name='bgp_global_import'])) { <xnm:error> { <message> "Policy error: Policy bgp_global_import required"; } } for-each (protocols/bgp | protocols/bgp/group | protocols/bgp/group/neighbor) { var $first = import[position() = 1]; if ($first) { call jcs:emit-change($tag = 'transient-change') { with $content = { <import insert="before" name="{$first}"> "bgp_global_import"; } } } } for-each (protocols/bgp) { if (not(import)) { call jcs:emit-change($tag = 'transient-change') { with $content = { <import> "bgp_global_import"; } } } } }
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 el nombre bgp-global-import.xsl o bgp-global-import.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 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 bgp-global-import.slax.system { scripts { commit { allow-transients; file bgp-global-import.xsl; } } } interfaces { fe-0/0/0 { unit 0 { family inet { address 192.168.16.2/24; } family inet6 { address 2002:18a5:e996:beef::2/64; } } } } routing-options { autonomous-system 64500; } protocols { bgp { group fish { neighbor 192.168.16.4 { import [ blue green ]; peer-as 64501; } neighbor 192.168.16.6 { peer-as 64502; } } } } policy-options { policy-statement blue { from protocol bgp; then accept; } policy-statement green { then accept; } policy-statement bgp_global_import { 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 configuración
Propósito
Compruebe que la secuencia de comandos se comporta como se esperaba.
Acción
Cuando se ejecuta el comando de show protocols
modo de configuración, no se muestra la bgp_global_import
política de importación, ya que se agrega como un cambio transitorio.
[edit] user@host# show protocols bgp { group fish { neighbor 192.168.16.4 { import [ blue green ]; peer-as 64501; } neighbor 192.168.16.6 { peer-as 64502; } } }
La secuencia de comandos de confirmación agrega la import bgp_global_import
instrucción en el [edit protocols bgp]
nivel de jerarquía y antepone la bgp_global_import
política a la cadena de políticas de vecino 192.168.16.4. Emita el show protocols | display commit-scripts
para ver todas las instrucciones de configuración, incluidos los cambios transitorios.
[edit] user@host# show protocols | display commit-scripts bgp { import bgp_global_import; group fish { neighbor 192.168.16.4 { import [ bgp_global_import blue green ]; peer-as 64501; } neighbor 192.168.16.6 { peer-as 64502; } } }
Después de agregar una política al vecino 192.168.16.6, que anteriormente no tenía ninguna política aplicada, la bgp_global_import
política se antepone. Ejecute el show protocols | display commit-scripts
comando para ver todas las instrucciones de configuración, incluidos los cambios transitorios.
[edit] user@host# set protocols bgp group fish neighbor 192.168.16.6 import green [edit] user@host# show protocols | display commit-scripts bgp { import bgp_global_import; group fish { neighbor 192.168.16.4 { import [ bgp_global_import blue green ]; peer-as 64501; } neighbor 192.168.16.6 { import [ bgp_global_import green ]; peer-as 64502; } } }