Utilice Junos PyEZ para administrar la configuración de rescate en dispositivos Junos
La utilidad Junos PyEZ jnpr.junos.utils.config.Config
le permite administrar la configuración de rescate en dispositivos Junos. Una configuración de rescate le permite definir una configuración de trabajo conocida o una configuración con un estado conocido que puede restaurar en cualquier momento. Utilice la configuración de rescate cuando necesite revertir a una configuración conocida o como último recurso si su enrutador o configuración de conmutador y los archivos de configuración de respaldo se dañan más allá de su reparación.
Cómo administrar la configuración de rescate
La jnpr.junos.utils.config.Config
utilidad le permite guardar, recuperar, cargar y eliminar la configuración de rescate en un dispositivo Junos. Después de crear una instancia de la Config
clase, utilice el rescue()
método para mange la configuración de rescate. Especifique la acción que se va a realizar en la configuración de rescate estableciendo el parámetro del rescue()
método action
en la operación deseada. Los valores de acción válidos incluyen "save"
, "get"
, , "reload"
y "delete"
. En los ejemplos siguientes se muestra la llamada al método para cada rescue()
acción del método.
- Guardar una configuración de rescate
- Recuperar la configuración de rescate
- Cargar y confirmar la configuración de rescate
- Eliminar la configuración de rescate
Guardar una configuración de rescate
Cuando se crea una configuración de rescate, el dispositivo guarda la configuración confirmada más reciente como la configuración de rescate. Para guardar la configuración activa como la configuración de rescate, especifique action="save"
en la lista de argumentos del rescue()
método. Esta operación sobrescribe cualquier configuración de rescate existente. Por ejemplo:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: cu = Config(dev) cu.rescue(action='save')
Recuperar la configuración de rescate
Para recuperar una configuración de rescate existente, especifique action="get"
y, opcionalmente, especifique el formato como "json"
, "text"
o "xml"
. Si no especifica un formato, el formato predeterminado es el texto. Si el dispositivo no tiene una configuración de rescate existente, el rescue()
método devuelve None
.
En el ejemplo siguiente, se recupera e imprime la configuración de rescate, si existe.
from jnpr.junos import Device from jnpr.junos.utils.config import Config from lxml import etree with Device(host='dc1a.example.com') as dev: cu = Config(dev) rescue = cu.rescue(action='get', format='xml') if rescue is None: print ('No existing rescue configuration.') else: print (etree.tostring(rescue, encoding='unicode'))
Cargar y confirmar la configuración de rescate
Para cargar la configuración de rescate existente en la configuración candidata, especifique action="reload"
. Si no existe ninguna configuración de rescate, la operación de carga devuelve False
. Después de cargar la configuración de rescate, debe confirmar la configuración para que sea la configuración activa en el dispositivo.
En el siguiente ejemplo, se intenta cargar la configuración de rescate y, si existe, se confirma para que sea la configuración activa.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: with Config(dev, mode='exclusive') as cu: rescue = cu.rescue(action='reload') if rescue is False: print ('No existing rescue configuration.') else: cu.pdiff() cu.commit()
Eliminar la configuración de rescate
Para eliminar la configuración de rescate existente, especifique action="delete"
.
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: cu = Config(dev) cu.rescue(action='delete')
Ejemplo: Utilice Junos PyEZ para guardar una configuración de rescate
En este ejemplo, se utiliza la utilidad Junos PyEZ jnpr.junos.utils.config.Config
para guardar una configuración de rescate en un dispositivo Junos, si aún no existe.
- Requisitos
- Visión general
- Configuración
- Ejecute el código Junos PyEZ
- Verificación
- Solución de problemas
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 guardar una configuración de rescate en el dispositivo especificado. Una configuración de rescate le permite definir una configuración de trabajo conocida o una configuración con un estado conocido que puede restaurar en cualquier momento. Cuando se crea una configuración de rescate, el dispositivo guarda la configuración confirmada más reciente como la configuración de rescate.
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 las operaciones de configuración de rescate 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.
La aplicación determina primero si hay una configuración de rescate existente en el dispositivo de destino. Si existe una configuración de rescate, se imprime en la salida estándar. Si no hay ninguna configuración de rescate existente, la aplicación indica al dispositivo que cree una. El rescue()
parámetro method action
se establece para "get"
recuperar la configuración de rescate existente y para "save"
crear una configuración de rescate si no existe.
Después de realizar las operaciones de configuración de rescate, 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 ConnectError
los errores que se producen al conectarse al dispositivo. 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 guardar una configuración de rescate, si aún no existe en el 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
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.# Create an instance of Config cu = Config(dev)
Imprima la configuración de rescate existente o guárdela si no existe.
# Print existing rescue configuration or save one if none exists try: rescue = cu.rescue(action='get', format='text') if rescue is None: print ('No existing rescue configuration.') print ('Saving rescue configuration.') cu.rescue(action='save') else: print ('Rescue configuration found:') print (rescue) except Exception as err: print (err)
Finalice la sesión NETCONF y cierre la conexión con el dispositivo.
# End the NETCONF session and close the connection dev.close()
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 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 # Create an instance of Config cu = Config(dev) # Print existing rescue configuration or save one if none exists try: rescue = cu.rescue(action='get', format='text') if rescue is None: print ('No existing rescue configuration.') print ('Saving rescue configuration.') cu.rescue(action='save') else: print ('Rescue configuration found:') print (rescue) except Exception as err: print (err) # End the NETCONF session and close the connection dev.close() 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-rescue-create.py No existing rescue configuration. Saving rescue configuration.
En este ejemplo, el dispositivo de destino no tiene una configuración de rescate existente, por lo que el dispositivo guarda uno. Si ejecuta la aplicación por segunda vez, genera la configuración de rescate que se guardó durante la ejecución inicial.
Verificación
Verifique la configuración
Propósito
Compruebe que la configuración de rescate existe en el dispositivo Junos.
Acción
Inicie sesión en el dispositivo Junos y vea la configuración de rescate. Por ejemplo:
user@dc1a> show system configuration rescue ## Last changed: 2014-07-31 17:59:04 PDT version 13.3R1.8; groups { re0 { system { host-name dc1a; ... [output truncated]
Solución de problemas
Solución de problemas de errores de acción no compatibles
Problema
El código Junos PyEZ genera un mensaje de error que indica una acción no compatible.
unsupported action:
Este mensaje de error se genera cuando el argumento del rescue()
método action
contiene un valor no válido.
Solución
Establezca el argumento del rescue()
método action
en una acción válida, que incluya "save"
, "get"
, "reload"
, y "delete"
.