Junos configuration parser

Hola, después de tanto tiempo….

Por cierta cuestión en el trabajo por fin me di el tiempo de crear una herramienta para traducir formatos de configuración Juniper (JUNOS).

Para probar los resultados de esto, pongo el siguiente ejemplo de configuración que se quiere traducir de formato jerárquico a formato ‘set command’ de Junos.

protocols {
    bgp {
        path-selection always-compare-med;
        advertise-inactive;
        log-updown;
        group USER-A {
            type external;
            local-address x.x.x.x;
            export policy-A;
            peer-as XXX;
            neighbor y.y.y.y {
                description USER-A;
            }
        }
        group USER-A-v6 {
            type internal;
            local-address x:x:x::x;
            export policy-B;
            peer-as XXX;
            neighbor Y:Y:Y::Y {
                description USER-A-v6;
            }
        }
    }
}

El script:

#!/usr/local/bin/python
#Code by @aldogoliath --- 26-Feb-2016
import string

target ='junos_config.txt'

def main():
    buff = []
    for line in open(target,'r'):
        if '{\n' in line[-2:]:
            buff.append(line[:-2].strip())
        if ';' in line:
            if len(buff) == 0:
                print 'set ' + line[:line.index(';')].strip()
            else:
                print 'set ' + string.join(buff) + ' ' + line[:line.index(';')].strip()
        if '}\n' in line:
            buff = buff[:-1]

if __name__ == '__main__': main()

Ejecutando el código nos queda lo siguiente:

python blog_set-command.py
set protocols bgp path-selection always-compare-med
set protocols bgp advertise-inactive
set protocols bgp log-updown
set protocols bgp group USER-A type external
set protocols bgp group USER-A local-address x.x.x.x
set protocols bgp group USER-A export policy-A
set protocols bgp group USER-A peer-as XXX
set protocols bgp group USER-A neighbor y.y.y.y description USER-A
set protocols bgp group USER-A-v6 type internal
set protocols bgp group USER-A-v6 local-address x:x:x::x
set protocols bgp group USER-A-v6 export policy-B
set protocols bgp group USER-A-v6 peer-as XXX
set protocols bgp group USER-A-v6 neighbor Y:Y:Y::Y description USER-A-v6

Nota: Cuando se tiene acceso directo al equipo el script es innecesario debido a que se pueden obtener los mismos resultados ejecutando ‘show configuration | display set’

Ojalá le sea útil a alguien.

Saludos y nos vemos pronto para contar los últimos acontecimientos después de 6 meses.

goliath