Ejemplo: Utilice Junos PyEZ para revertir la configuración
La biblioteca Junos PyEZ le permite realizar tareas operativas y de configuración en dispositivos Junos. En este ejemplo, se utiliza la utilidad Junos PyEZ jnpr.junos.utils.config.Config
para revertir la configuración en un dispositivo Junos.
Requisitos
En este ejemplo, se utilizan los siguientes componentes de hardware y software:
Servidor de administración de configuración que ejecuta Python 3.5 o posterior y Junos PyEZ versión 2.0 o posterior
Dispositivo Junos con NETCONF habilitado y una cuenta de usuario configurada con los permisos adecuados
Par de claves públicas/privadas SSH configuradas para el usuario adecuado en el servidor y el dispositivo Junos
Visión general
En este ejemplo, se presenta una aplicación Python que utiliza la utilidad Junos PyEZ Config
para revertir la configuración en el dispositivo especificado. Los dispositivos Junos almacenan una copia de la configuración confirmada más reciente y hasta 49 configuraciones anteriores. Puede revertir a cualquiera de las configuraciones almacenadas. Esto es útil cuando los cambios de configuración provocan resultados indeseables y desea revertir a una configuración de trabajo conocida. Revertir la configuración es similar al proceso de realizar cambios de configuración en el dispositivo, pero en lugar de cargar datos de configuración, realiza una restauración, lo que reemplaza toda la configuración del candidato con una configuración previamente confirmada.
La aplicación Python importa la Device
clase, que controla la conexión con el dispositivo Junos; la Config
clase, que se usa para realizar comandos de modo de configuración en el dispositivo de destino; y las excepciones necesarias del jnpr.junos.exception
módulo, que contiene las excepciones que se encuentran al administrar dispositivos Junos.
Después de crear la Device
instancia para el dispositivo de destino, el open()
método establece una conexión y una sesión NETCONF con el dispositivo. A continuación, los Config
métodos de utilidad bloquean, revierten, confirman y desbloquean la configuración del candidato.
El rollback()
método tiene un único parámetro, rb_id
que es el ID de restauración que especifica la configuración almacenada que se va a cargar. Los valores válidos son 0 (cero, para la configuración confirmada más reciente) a través de una menos que la cantidad de configuraciones anteriores almacenadas (el máximo es 49). Si omite este parámetro en la llamada al método, el valor predeterminado es 0. En este ejemplo, se carga la configuración con el ID 1 de reversión, que es la configuración confirmada justo antes de la configuración activa. El rollback()
método carga la configuración en la configuración candidata, que luego se confirma para activarla mediante una llamada al commit()
método.
Después de revertir y confirmar la configuración, la aplicación llama al close()
método para terminar la sesión y la conexión NETCONF. La aplicación incluye código para controlar excepciones, como LockError
los errores que se producen al bloquear la configuración y CommitError
los errores que se producen durante la operación de confirmación. La aplicación también incluye código para controlar cualquier excepción adicional que pueda ocurrir.
Configuración
Cree la aplicación Junos PyEZ
Procedimiento paso a paso
Para crear una aplicación de Python que use Junos PyEZ para revertir la configuración en un dispositivo Junos:
Importe los módulos, las clases y los objetos necesarios.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError
Incluya las variables necesarias, que en este ejemplo incluyen el nombre de host del dispositivo administrado.
host = 'dc1a.example.com'
Cree una
main()
definición de función y una llamada a función, y coloque las instrucciones restantes dentro de la definición.def main(): if __name__ == "__main__": main()
Cree una instancia de la
Device
clase y proporcione el nombre de host y los parámetros necesarios para esa conexión específica.dev = Device(host=host)
Abra una conexión y establezca una sesión NETCONF con el dispositivo.
# open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return
Cree una instancia de la
Config
utilidad.# Set up config object cu = Config(dev)
Bloquee la configuración.
# Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return
Revierta y confirme la configuración, y maneje cualquier error.
try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err))
Desbloquee la configuración y, luego, finalice la sesión NETCONF y cierre la conexión con el dispositivo.
finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return
Resultados
En el servidor de administración de configuración, revise la aplicación completada. Si la aplicación no muestra el código deseado, repita las instrucciones de este ejemplo para corregir la aplicación.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import ConnectError from jnpr.junos.exception import LockError from jnpr.junos.exception import RpcError from jnpr.junos.exception import CommitError from jnpr.junos.exception import UnlockError host = 'dc1a.example.com' def main(): dev = Device(host=host) # open a connection with the device and start a NETCONF session try: dev.open() except ConnectError as err: print ("Cannot connect to device: {0}".format(err)) return # Set up config object cu = Config(dev) # Lock the configuration print ("Locking the configuration") try: cu.lock() except LockError as err: print ("Unable to lock configuration: {0}".format(err)) dev.close() return try: print ("Rolling back the configuration") cu.rollback(rb_id=1) print ("Committing the configuration") cu.commit() except CommitError as err: print ("Error: Unable to commit configuration: {0}".format(err)) except RpcError as err: print ("Unable to roll back configuration changes: {0}".format(err)) finally: print ("Unlocking the configuration") try: cu.unlock() except UnlockError as err: print ("Unable to unlock configuration: {0}".format(err)) dev.close() return if __name__ == "__main__": main()
Ejecute el código Junos PyEZ
Ejecute la aplicación
Para ejecutar el código Junos PyEZ:
-
En el servidor de administración de configuración, ejecute la aplicación.
user@server:~$ python3 junos-pyez-config-rollback.py Locking the configuration Rolling back the configuration Committing the configuration Unlocking the configuration
Verificación
Verifique la configuración
Propósito
Compruebe que la configuración se revierta correctamente en el dispositivo Junos.
Acción
Inicie sesión en el dispositivo Junos y vea las diferencias de configuración o configuración y el archivo de registro. Por ejemplo:
user@dc1a> show configuration | compare rollback 1 [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; + } + } + }
user@dc1a> show log messages Sep 19 12:42:06 dc1a sshd[5838]: Accepted publickey for user from 198.51.100.1 port 58663 ssh2: RSA 02:dd:53:3e:f9:97:dd:1f:d9:31:e9:7f:82:06:aa:67 Sep 19 12:42:10 dc1a file[5841]: UI_LOAD_EVENT: User 'user' is performing a 'rollback 1' Sep 19 12:42:11 dc1a file[5841]: UI_COMMIT: User 'user' requested 'commit' operation (comment: none) Sep 19 12:42:26 dc1a file[5841]: UI_COMMIT_COMPLETED: commit complete
Significado
Las diferencias de configuración y el contenido del archivo de registro indican que la configuración se revierte correctamente y se confirma en el dispositivo.