Ejemplo: Cambiar la configuración mediante scripts operativos de Python
Los scripts operativos le permiten realizar cambios controlados en la configuración de Junos OS. Los scripts operativos son ventajosos, ya que pueden recopilar información operativa de un dispositivo y actualizar la configuración en función de esa información. Los usuarios experimentados que están familiarizados con Junos OS pueden escribir scripts operativos que pidan la información de configuración relevante y modifiquen la configuración en consecuencia. Esto permite a los usuarios que tienen menos experiencia con Junos OS modificar la configuración de forma segura mediante el script. En este ejemplo, se muestra cómo realizar cambios en la configuración de Junos OS mediante un script op de Python que aprovecha las API de Junos PyEZ.
Requisitos
En este ejemplo, se utilizan los siguientes componentes de hardware y software:
Enrutador serie MX que ejecuta la versión 16.1R3 o posterior de Junos OS que incluye el paquete de extensiones de Python.
Descripción general y script operativo
Los scripts operativos de Python pueden hacer cambios en la configuración de Junos OS mediante la utilidad Junos PyEZjnpr.junos.utils.config.Config
. La utilidad Junos PyEZ Config
proporciona métodos de instancia para bloquear la configuración, cargar los datos de configuración y especificar cómo integrarlos en la configuración, confirmar la configuración y desbloquear la configuración. Para obtener más información acerca de cómo usar Junos PyEZ para configurar dispositivos Junos, consulte Uso de Junos PyEZ para configurar dispositivos Junos. El script op de Python en este ejemplo muestra cómo actualizar la configuración para deshabilitar una interfaz en el dispositivo local.
El script op de Python importa lo siguiente:
Device
clase: controla la conexión con el dispositivo JunosConfig
class: realiza comandos de modo de configuración en el dispositivo de destinojnpr.junos.exception
módulo: contiene excepciones que se encuentran al administrar dispositivos Junosjcs
módulo: permite que el script ejecute funciones de extensión compatibles
En este ejemplo, la usage
variable se inicializa con una descripción general de la función del script. Cuando se ejecuta el script, el script da como resultado la descripción de uso en la CLI para que el usuario pueda comprobar el propósito de ese script.
El script llama a la jcs.get_input()
función de extensión, que solicita al usuario que escriba el nombre de la interfaz que desea deshabilitar, y almacena el nombre de interfaz en la interface
variable. La config_xml
variable es una cadena XML que define los cambios de configuración.
La secuencia de comandos no proporciona un parámetro de host al crear la Device
instancia, lo que hace que el open()
método establezca una conexión con el dispositivo local. En este ejemplo, se crea la Config
instancia mediante un administrador de contexto con mode='exclusive'
para obtener un bloqueo exclusivo en la configuración mientras se modifica. En este modo, el administrador de contexto controla automáticamente el bloqueo y el desbloqueo de la configuración del candidato. Los Config
métodos de utilidad cargan los cambios de configuración en la configuración candidata como una load merge
operación y confirman la configuración. El dev.close()
método cierra la conexión.
Python Script
from jnpr.junos import Device from jnpr.junos.utils.config import Config from jnpr.junos.exception import * import jcs import sys def main(): usage = """ This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. """ print (usage) interface = jcs.get_input("Enter interface to disable: ") if not interface: print ("invalid interface") sys.exit(1) config_xml = """ <configuration> <interfaces> <interface> <name>{0}</name> <disable/> </interface> </interfaces> </configuration> """.format(interface).strip() dev = Device() dev.open() try: with Config(dev, mode="exclusive") as cu: print ("Loading and committing configuration changes") cu.load(config_xml, format="xml", merge=True) cu.commit() except Exception as err: print (err) dev.close() return dev.close() if __name__ == "__main__": main()
Configuración
Procedimiento paso a paso
Para descargar, habilitar y probar el script:
-
Copie el script en un archivo de texto, asigne un nombre al archivo config-change.py y cópielo en el directorio /var/db/scripts/op/ del dispositivo.
Nota:Los scripts de Python sin firma deben ser propiedad de la raíz o de un usuario de la clase de inicio de sesión de Junos OS
super-user
, y solo el propietario del archivo puede tener permiso de escritura para el archivo. -
En el modo de configuración, incluya la
file config-change.py
instrucción en el[edit system scripts op]
nivel de jerarquía.[edit system scripts] user@host# set op file config-change.py
-
Habilite la ejecución de scripts de Python sin firmar en el dispositivo.
[edit system scripts] user@host# set language python
Nota:Configure la
language python3
instrucción para usar Python 3 para ejecutar scripts de Python, o configure lalanguage python
instrucción para usar Python 2.7 para ejecutar scripts de Python. Para obtener más información, consulte idioma. -
Emita el
commit and-quit
comando para confirmar la configuración y volver al modo operativo.[edit] user@host# commit and-quit
-
Antes de ejecutar el script, emita el
show interfaces interface-name
comando de modo operativo y registre el estado actual de la interfaz que se deshabilitará mediante el script. -
Ejecute el script op mediante la emisión del comando de
op config-change.py
modo operativo.user@host> op config-change.py This script disables the specified interface. The script modifies the candidate configuration to disable the interface and commits the configuration to activate it. Enter interface to disable: so-0/0/0 Loading and committing configuration changes
Verificación
Verificar la confirmación
Propósito
Compruebe que la confirmación se ha hecho correctamente.
Acción
Debe incluir código en el script que detecta cualquier advertencia o error asociado con el cambio y la confirmar la configuración. Esto le permite determinar con mayor facilidad si la confirmación tuvo éxito. Si no hay mensajes de advertencia o error, puede comprobar que la confirmación se ha correcto de varias maneras.
Compruebe el registro de confirmación para comprobar que la confirmación fue correcta.
user@host> show system commit 0 2010-09-22 17:08:17 PDT by user via netconf
Compruebe el archivo de mensaje syslog para comprobar que la operación de confirmación se ha registrado. En este caso, también verá un
SNMP_TRAP_LINK_DOWN
mensaje para la interfaz deshabilitada. Según la configuración de las operaciones de seguimiento, este mensaje puede o no aparecer en el archivo de registro.user@host> show log messages | last Sep 22 17:08:13 host file[7319]: UI_COMMIT: User 'user' requested 'commit' operation Sep 22 17:08:16 host xntpd[1386]: ntpd exiting on signal 1 Sep 22 17:08:16 host xntpd[1386]: ntpd 4.2.0-a Fri Jun 25 13:48:13 UTC 2010 (1) Sep 22 17:08:16 host mib2d[1434]: SNMP_TRAP_LINK_DOWN: ifIndex 526, ifAdminStatus down(2), ifOperStatus down(2), ifName so-0/0/0
Verificar los cambios de configuración
Propósito
Compruebe que los cambios correctos están integrados en la configuración.
Acción
Muestre la configuración y compruebe que los cambios son visibles para la interfaz especificada.
user@host> show configuration interfaces so-0/0/0 disable;
Para este ejemplo, también puede emitir el comando de
show interfaces interface-name
modo operativo para comprobar que la interfaz estaba deshabilitada. En este caso, el resultado capturado antes de deshabilitar la interfaz muestra que la interfaz esEnabled
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Enabled, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:27 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None
El resultado capturado después de ejecutar la secuencia de comandos para deshabilitar la interfaz muestra que la interfaz es ahora
Administratively down
.user@host> show interfaces so-0/0/0 Physical interface: so-0/0/0, Administratively down, Physical link is Up Interface index: 128, SNMP ifIndex: 526 Link-level type: PPP, MTU: 4474, Clocking: Internal, SONET mode, Speed: OC3, Loopback: None, FCS: 16, Payload scrambler: Enabled Device flags : Present Running Interface flags: Down Point-To-Point SNMP-Traps Internal: 0x4000 Link flags : Keepalives CoS queues : 4 supported, 4 maximum usable queues Last flapped : 2010-09-14 10:33:25 PDT (1w1d 06:40 ago) Input rate : 0 bps (0 pps) Output rate : 0 bps (0 pps) SONET alarms : None SONET defects : None