Utilice Junos PyEZ para comparar la configuración candidata y una configuración previamente confirmada
RESUMEN Utilice Junos PyEZ diff()
y pdiff()
los métodos para comparar la configuración candidata con una configuración confirmada anteriormente.
Los dispositivos Junos almacenan una copia de la configuración confirmada más reciente y hasta 49 configuraciones anteriores. La utilidad Junos PyEZ jnpr.junos.utils.config.Config
le permite comparar la configuración candidata con una configuración previamente confirmada e imprimir o devolver la diferencia. En la tabla 1 se describen los métodos, que equivalen a emitir el comando de show | compare rollback n
modo de configuración en la CLI de Junos OS.
Método |
Descripción |
---|---|
Compare la configuración candidata con la configuración de reversión especificada y devuelva la diferencia como un objeto. |
|
Compare la configuración candidata con la configuración de reversión especificada e imprima la diferencia directamente en la salida estándar. |
La base de datos de configuración efímera almacena solo la versión actual de los datos de configuración efímera confirmados y, como resultado, no admite la comparación de la configuración efímera modificada con configuraciones confirmadas anteriormente.
Los diff()
métodos y pdiff()
recuperan la diferencia entre la configuración candidata y una configuración confirmada anteriormente, a la que hace referencia el parámetro de ID de reversión, rb_id
, en la llamada al método. Si se omite el parámetro, el ID de reversión predeterminado es 0, que corresponde a la configuración activa.
La diferencia se devuelve en formato de parche, donde:
Las instrucciones que sólo existen en la configuración candidata tienen el prefijo de un signo más (+)
Las instrucciones que sólo existen en la configuración de comparación y no en la configuración candidata tienen como prefijo un signo menos (-)
Los métodos devuelven o imprimen
None
si no hay diferencias entre las configuraciones.
En una aplicación Junos PyEZ, después de establecer una conexión con el dispositivo, puede llamar al método o pdiff()
para Config
un diff()
objeto Table o para comparar las configuraciones candidata y de reversión. En el ejemplo siguiente se utiliza la Config
clase para cargar los cambios de configuración en la configuración candidata y, a continuación, se llama al pdiff()
método para imprimir las diferencias entre la configuración candidata modificada y la configuración activa antes de confirmar los cambios.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='exclusive') as cu: cu.load(path='configs/junos-config-mx.conf', merge=True) cu.pdiff() cu.commit()
Cuando se ejecuta el código, se imprimen las diferencias en la salida estándar. Por ejemplo:
[edit system scripts op] + file bgp-neighbors.slax; [edit interfaces] + ge-1/0/0 { + unit 0 { + family inet { + address 198.51.100.1/26; + } + } + } - ge-1/1/0 { - unit 0 { - family inet { - address 198.51.100.65/26; - } - } - }
Para recuperar la diferencia entre las configuraciones como un objeto para su posterior manipulación, llame al diff()
método en lugar del pdiff()
método y almacene el resultado en una variable. Por ejemplo:
cdiff = cu.diff(rb_id=2) print (cdiff)
Cuando utilice tablas y vistas de configuración de Junos PyEZ para realizar cambios de configuración estructurados en un dispositivo, puede cargar y confirmar los datos de configuración llamando a los lock()
métodos , load()
y commit()
unlock()
de forma individual, o llamando al set()
método, que llama a todos estos métodos automáticamente. Si utiliza tablas de configuración para configurar un dispositivo y desea comparar la configuración candidata actualizada con una configuración confirmada previamente mediante los diff()
métodos o pdiff()
de la aplicación, debe utilizar los load()
métodos y commit()
en lugar del set()
método. Hacer esto le permite recuperar las diferencias después de que los datos de configuración se cargan en la configuración candidata, pero antes de que se confirmen. Por ejemplo:
from jnpr.junos import Device from myTables.ConfigTables import UserConfigTable with Device(host='router1.example.com') as dev: with UserConfigTable(dev, mode='exclusive') as userconf: userconf.user = 'user1' userconf.class_name = 'read-only' userconf.append() userconf.load(merge=True) userconf.pdiff() userconf.commit()
En el ejemplo siguiente se compara la configuración candidata con la configuración con el ID de reversión 5, pero no se realiza ningún cambio en la configuración:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: cu = Config(dev) cu.pdiff(rb_id=5)