Usando las Macros de JunOS

( redes / junos )

Los artículos que he hecho acerca de JunOS hasta ahora todos tienen que ver con un tema único: Reducir el riesgo operativo. Las características que me gusta de JunOS son las características que ayudan a evitar que la cague en la configuración. Como he dicho en los últimos artículos y, sin duda, diré muchas veces de nuevo, la principal causa de interrupciones de red no son fallos de hardware o software, si no que la gente haciendo cambios en la configuración.

Una práctica general, es asegurarse de que cada configuración en cada router en su red sigue una política estándar de configuración lo que reducirá los errores. Lo qué esa política es puede variar de una red a otra, pero una política coherente y ejecutiva dentro de la red significa que todo el mundo que configure un router conoce las reglas para la creación de la configuración. Todo el mundo que resuelva problemas de la red sabe qué información espera encontrar en cualquier configuración.

En el anterior artículo que escribí acerca de cómo crear un script que ejecuta comprobaciones de una configuración candidata de JunOS cuando el comando commit se ejecuta, e impide que la configuración se convierta en activa si el script encuentra algo fuera de especificación. Es una gran herramienta para asegurar que cada configuración está en el cumplimiento de las normas que defina para su red.

Otra fuente potencial de variación y los errores ocurre cuando una relativamente larga serie de declaraciones de configuración deben ser creadas para una sola función. La creación de una única instancia de MPLS VPN, por ejemplo, o un único grupo de BGP peer, puede implicar un buen número de sentencias. Aquí es donde las macros de JunOS pueden ayudar. Una macro es un script, pero hace algo más que una comprobación de errores. Se puede coger de una entrada relativamente simple y escribir una configuración completa.

He aquí un ejemplo que he utilizado innumerables veces. Quiero crear una instancia VPLS llamada vpls-100. Aunque la configuración de la instancia es compleja, la mayoría de las declaraciones se repiten constantemente por cada instancia de VPLS, sólo hay unas pocas variables para esta instancia específica.

En lugar de escribir toda la configuración manualmente, llamo una macro personalizada denominada vpls-inst, y especifico las variables que se utilizarán para este caso: La VPN ID (100), la interfaz local en la que la instancia VPLS se va a ejecutar (ge -0/0/0.10), El Site ID (2), y la política de exportación a aplicar (ASD-2A):

vpls-100 {
    apply-macro vpls-inst {
        id 100;
        interface ge-0/0/0.10;
        site 2;
        via ASD-2A;
    }
}

Cuando la configuración se ha aplicado, la macro utiliza las pocas variables especificado junto con muchas otras variables que son estándar para todos las instancias VPLS, especificadas en la macro en sí, para crear la instancia VPLS completa , la configuración de la interfaz, y la entrada de la política de enrutamiento (routing policy) para la instancia:

routing-instances {
    vpls-100 {
        /* # Generated by vpls-inst.xsl # */
        instance-type vpls;
        interface ge-0/0/0.10;
        route-distinguisher 192.168.0.92:100;
        vrf-export [ CUST_VIA_ASD-2A CUST-vpls-100 ];
        vrf-target import target:100:100;
        protocols {
            vpls {
                site-range 24;
                mac-table-size 2000;
                site cressida {
                    site-identifier 2;
                }
            }
        }
    }
}
interfaces {
    ge-0/0/0 {
        unit 10 {
            description vpls-100;
            encapsulation vlan-vpls;
            vlan-id 10;
            input-vlan-map {
                swap;
                vlan-id 100;
            }
            output-vlan-map swap;
        }
    }
}
policy-options {
    policy-statement CUST-vpls-100 {
        then {
            community add CUST-vpls-100;
            accept;
        }
    }
    community CUST-vpls-100 members target:100:100;
}

Si se busca a través de la configuración resultante encontrará las variables especificadas en la sintaxis de entrada personalizada. También encontrará un buen número de declaraciones que incluyen variables que la macro pone de su propia cuenta.

La macro es un poco demasiado larga para mostrar en este artículo, y no son fáciles de escribir. Pero el punto es que un ingenieros puede escribir la macro - o un conjunto de macros - una vez, y todos los operadores pueden usarla constantemente. El resultado es coherente, libre de errores de configuraciones que cumplen con las normas que desea aplicar para sus configuraciones.


Nuevo artículo de Jeff Doyle que sigue su sección de acercar el JunOS explicando como funciona. El artículo original se puede encontrar aquí.

Modificado el 3 Enero, 2015
   

Compartiendo conocimiento desde 1995 - I.M.D. I.M.D.