Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Crear scripts de acción para RPCs YANG en dispositivos Junos

Puede agregar modelos de datos YANG que definan llamadas de procedimiento remoto (RPC) personalizadas en dispositivos Junos compatibles. Cuando agregue una RPC yang no automática a un dispositivo, también debe proporcionar una secuencia de comandos de acción que sirva como controlador de LA. La definición de RPC hace referencia a la secuencia de comandos de acción, que se invoca cuando se ejecuta el RPC. La secuencia de comandos de acción realiza las operaciones y recupera la información requerida por el RPC y devuelve los elementos de salida XML necesarios según se define en la instrucción RPC output .

Los scripts de acción se pueden escribir en lenguaje de hoja de estilo Alternative SyntaX (SLAX) o Python. Los scripts de acción SLAX son similares a los scripts operativos SLAX y pueden realizar cualquier función disponible a través de las RPC compatibles con el protocolo de administración XML de Junos y la API XML de Junos. Los scripts de acción de Python pueden aprovechar todas las características y construcciones del lenguaje Python, lo que proporciona una mayor flexibilidad sobre los scripts SLAX. Además, los scripts de acción de Python admiten API de Junos PyEZ , que facilitan la ejecución de RPCs y la realización de tareas operativas y de configuración en dispositivos Junos. Los scripts de Python también pueden aprovechar la biblioteca, lo que simplifica el lxml manejo de XPath. Además, a partir de Junos OS versión 19.3R1, los dispositivos que ejecutan Junos OS con soporte FreeBSD actualizado usan IPv6 en scripts de acción de Python.

En este tema, se describe cómo crear una secuencia de comandos de acción, incluyendo cómo analizar los argumentos de entrada de RPC, acceder a datos operativos y de configuración en la secuencia de comandos, emitir la salida XML y validar y cargar la secuencia de comandos en un dispositivo.

Placa de caldera de script de acción

Placa de script SLAX

Los scripts de acción SLAX deben incluir la placa de caldera necesaria tanto para la funcionalidad de script básica como para cualquier funcionalidad opcional utilizada dentro del script, como las funciones de extensión de Junos OS y las plantillas con nombre. Además, la secuencia de comandos debe declarar todos los parámetros de entrada DECL mediante la param instrucción. La placa de caldera de script de acción SLAX es la siguiente:

Placa de caldera de scripts python

Los scripts de acción de Python deben incluir una línea de directiva de intérprete que especifique la versión de Python utilizada para ejecutar la secuencia de comandos. En la Tabla 1 se describen las líneas de directiva de intérprete que puede utilizar en las diferentes versiones.

con
Tabla 1: Líneas de directiva del intérprete de scripts de acción de Python
Versiones compatibleslas líneas de directiva del intérprete de versión python

Python 3

#!/usr/bin/python3
O
#!/usr/bin/env python3

Junos OS versión 20.2R1 y posteriores

Junos OS Evolved versión 21.1R1 y posteriores

Python 2.7

#!/usr/bin/python
O
#!/usr/bin/env python

Junos OS versión 20.1 y anteriores

Junos OS Evolved versión 22.2 y anteriores

Nota:

A partir de Junos OS versión 20.2R1 y Junos OS Evolved versión 22.3R1, el dispositivo usa Python 3 para ejecutar scripts de acción y traducción yang. En versiones anteriores, Junos OS solo usa Python 2.7 para ejecutar estos scripts, y Junos OS Evolved usa Python 2.7 de forma predeterminada para ejecutar los scripts.

Además, los scripts de acción de Python deben importar cualquier biblioteca, módulo u objeto que se use en la secuencia de comandos. Por ejemplo, además de las bibliotecas estándar de Python, los scripts de acción de Python pueden importar lo siguiente:

  • jcs biblioteca: permite que el script use funciones de extensión de Junos OS y funcionalidad de plantilla denominada Junos OS en el script.

  • jnpr.junos módulo y clases: permite que el script use Junos PyEZ.

  • lxml biblioteca: simplifica el manejo de XPath.

Por ejemplo:

Análisis de argumentos de entrada de RPC

Descripción general del argumento de entrada

Una RPC puede definir parámetros de entrada mediante la instrucción opcional input . Cuando ejecuta una RPC y proporciona argumentos de entrada, Junos OS invoca la secuencia de comandos de acción de LAR y pasa esos argumentos a la secuencia de comandos. En una secuencia de comandos de acción Python o SLAX, puede tener acceso a los argumentos de entrada de RPC de la misma manera que tendría acceso a los argumentos de línea de comandos de una secuencia de comandos de Python normal o una secuencia de comandos de junos OS SLAX op, respectivamente.

Considere la siguiente input instrucción para la get-host-status RPC:

El RPC se puede ejecutar en la CLI o a través de una sesión de protocolo NETCONF o Junos XML. Por ejemplo, puede ejecutar el siguiente comando en la CLI:

De manera similar, puede ejecutar el siguiente RPC en una sesión remota:

Cuando se ejecuta el comando o ELP, el dispositivo invoca la secuencia de comandos de acción y pasa los argumentos. En las siguientes secciones, se explica cómo procesar los argumentos en la secuencia de comandos de acción SLAX o Python.

Nota:

A partir de Junos OS versión 19.2R1, las RPCs yang personalizadas admiten parámetros de entrada de tipo empty cuando se ejecuta el comando de RPC en la CLI de Junos OS, y el valor pasado a la secuencia de comandos de acción es el nombre del parámetro. En versiones anteriores, los parámetros de entrada del tipo empty solo se admiten cuando se ejecuta el RPC en una sesión de protocolo NETCONF o Junos XML, y el valor pasado a la secuencia de comandos de acción es la cadena 'none'.

Argumentos de entrada de script SLAX

En los scripts de acción SLAX, debe declarar los parámetros de entrada mediante la param instrucción. Los nombres de parámetros deben ser idénticos a los nombres de parámetros definidos en el módulo YANG.

Cuando se invoca, la secuencia de comandos asigna el valor de cada argumento al parámetro correspondiente, al que puede hacer referencia en todo el script. Debe incluir el símbolo del signo de dólar ($) al declarar el parámetro y al tener acceso a su valor. Si un parámetro es tipo empty, el nombre del parámetro se pasa como su valor.

Nota:

Para obtener más información acerca de los parámetros SLAX, consulte Descripción general de parámetros SLAX en la Guía del usuario de automatización de scripts.

Argumentos de entrada de script de Python

Para scripts de acción de Python, los argumentos se pasan a la secuencia de comandos de la siguiente manera:

  • El primer argumento siempre es la ruta del archivo del script de acción.

  • Los siguientes argumentos de la lista son el nombre y el valor de cada parámetro de entrada suministrado por el usuario.

    El nombre del argumento se pasa de la siguiente manera:

    • En Junos OS versión 21.1 y anteriores, el dispositivo pasa en el nombre del argumento.

    • En la versión 21.2R1 y posteriores de Junos OS, el dispositivo prefija un guión único (-) a nombres de argumento de un solo carácter y prefijos dos guiones (-) a nombres de argumentos de varios caracteres.

    Nota:

    Cuando se ejecuta el comando de RPC en la CLI, los argumentos se pasan al script en el orden dado en la línea de comandos. En una sesión de protocolo NETCONF o Junos XML, el orden de los argumentos en el XML es arbitrario, por lo que los argumentos se pasan al script en el orden en que se declaran en la instrucción RPC input .

  • Los dos últimos argumentos de la lista, que son proporcionados por el sistema y no por el usuario, son 'rpc_name' y el nombre de la RPC.

En las siguientes secciones se analiza cómo manejar los argumentos que se pasan a scripts de acción de Python en las diferentes versiones.

Scripts de acción de Python (21.2R1 o posterior)

A partir de Junos OS versión 21.2R1 y Junos OS Evolved versión 21.2R1, cuando el dispositivo pasa los nombres de argumentos de entrada a la secuencia de comandos de acción de Python, prefija un guión único (-) a nombres de argumentos de un solo carácter y prefijos dos guiones (-) a nombres de argumentos de varios caracteres. Esto le permite usar bibliotecas estándar de análisis de línea de comandos para manejar los argumentos.

Para el ejemplo anterior de YANG RPC, la lista de argumentos de entrada del sys.argv script de acción es:

El siguiente código python de ejemplo usa la argparse biblioteca para manejar los argumentos. En este caso, el analizador también debe tener en cuenta el rpc_name argumento que el sistema pasa a la secuencia de comandos.

Scripts de acción de Python (21.1 y versiones anteriores)

En junos OS versión 21.1 y anteriores, el dispositivo pasa los nombres de argumentos de entrada a la secuencia de comandos de acción de Python exactamente como se dan en el comando o EN LA RPC. Puede acceder a los argumentos de entrada a través de la sys.argv lista.

Para el ejemplo anterior de YANG RPC, la lista de argumentos de entrada del sys.argv script de acción es:

El siguiente código python de ejemplo muestra una forma de extraer el valor para cada argumento de la sys.arv lista para el ejemplo de RPC. En el ejemplo se define primero un diccionario que contiene los nombres de argumentos posibles como claves y un valor predeterminado para cada argumento. Luego, el código comprueba cada clave de la sys.argv lista y recupera el índice del nombre del argumento en la lista, si está presente. A continuación, el código extrae el valor del argumento en la posición de índice adyacente y lo almacena en el diccionario para la clave adecuada. Este método garantiza que si los argumentos se pasan a la secuencia de comandos en un orden diferente durante la ejecución, se recupera el valor correcto para un argumento determinado.

Recuperación de datos operativos y de configuración

Los scripts de acción pueden recuperar datos operativos y de configuración de un dispositivo que ejecuta Junos OS y, luego, analizar los datos para obtener la información necesaria. Los scripts de acción SLAX pueden recuperar información del dispositivo mediante la ejecución de RPC compatibles con el protocolo de administración XML de Junos y la API XML de Junos. Los scripts de acción de Python pueden recuperar información operativa y de configuración mediante las API de Junos PyEZ o cli -c 'command' el para ejecutar comandos de CLI en el script de acción como lo haría desde el shell. Para recuperar información operativa con el cli -c método, incluya el comando operativo deseado. Para recuperar la información de configuración, utilice el show configuration comando.

El siguiente fragmento de SLAX ejecuta el show interfaces comando en el dispositivo local mediante la etiqueta de solicitud equivalente <get-interface-information> :

El siguiente código Python usa Junos PyEZ para ejecutar el get_interface_information RPC, que es equivalente al show interfaces comando cli:

Nota:

Para obtener más información acerca de cómo usar Junos PyEZ para ejecutar RPC en dispositivos que ejecutan Junos OS, consulte Uso de Junos PyEZ para ejecutar RPC en dispositivos que ejecutan Junos OS.

El siguiente código python ejecuta el show interfaces | display xml comando y convierte la salida de cadena en un árbol XML que se puede analizar para los datos necesarios mediante construcciones XPath:

Emisión de la salida XML de RPC

Una RPC puede definir elementos de salida mediante la instrucción opcional output . La secuencia de comandos de acción debe definir y emitir los elementos XML necesarios para la salida de RPC. La jerarquía XML emitida por el script debe reflejar el árbol definido por los contenedores y las instrucciones leaf en la definición de la instrucción RPC output . Para devolver la salida XML, la secuencia de comandos de acción debe emitir la jerarquía de salida de RPC y solo la jerarquía de salida. Los scripts SLAX deben usar la copy-of instrucción para emitir el XML, y los scripts de Python pueden usar print instrucciones.

Por ejemplo, considere la siguiente instrucción YANG RPC output :

La secuencia de comandos de acción debe generar y emitir la salida XML correspondiente, por ejemplo:

Después de recuperar los valores de los elementos de salida necesarios, una secuencia de comandos de Python puede emitir la jerarquía de salida XML mediante el siguiente código:

De manera similar, una secuencia de comandos de acción SLAX puede usar lo siguiente:

Validación y carga de scripts de acción en un dispositivo

En la definición de YANG RPC, se especifica la secuencia de comandos de acción de LAR al incluir las junos:command instrucciones y junos:action-execute el junos:script subestato, que toma el nombre de archivo de la secuencia de comandos de acción como su valor. Debe definir una sola secuencia de comandos de acción para cada RPC. Por ejemplo:

Nota:

A partir de Junos OS versión 17.3, la action-execute instrucción es una subestación a command. En versiones anteriores, las action-execute instrucciones y command se colocan en el mismo nivel, y la command instrucción es opcional.

Nota:

Los módulos YANG que definen RPCs para dispositivos que ejecutan Junos OS deben importar el módulo de extensiones DDL de Junos OS.

Los scripts de acción de Python deben cumplir los siguientes requisitos antes de poder ejecutar los scripts en dispositivos que ejecutan Junos OS.

  • El propietario del archivo es raíz o un usuario de la clase de inicio de sesión de Junos OS super-user .

  • Solo el propietario del archivo tiene permiso de escritura para el archivo.

  • La secuencia de comandos incluye una línea de directiva de intérprete como se describe en la placa de caldera de script de acción.

  • La language python instrucción o language python3 se configura en el [edit system scripts] nivel de jerarquía para habilitar la ejecución de scripts de Python sin firmar.

Nota:

A partir de Junos OS versión 20.2R1 y Junos OS Evolved versión 22.3R1, el dispositivo usa Python 3 para ejecutar scripts de acción y traducción yang. En versiones anteriores, Junos OS solo usa Python 2.7 para ejecutar estos scripts, y Junos OS Evolved usa Python 2.7 de forma predeterminada para ejecutar los scripts.

Nota:

Los usuarios solo pueden ejecutar scripts de Python sin firmar en dispositivos que ejecutan Junos OS cuando los permisos de archivo de la secuencia de comandos incluyen permiso de lectura para la primera clase en la que el usuario se encuentra, en el orden de usuario, grupo u otros.

Puede validar la sintaxis de una secuencia de comandos de acción en la CLI emitiendo el request system yang validate action-script comando y proporcionando la ruta a la secuencia de comandos. Por ejemplo:

Para usar una secuencia de comandos de acción, debe cargarla en el dispositivo con el módulo YANG que contiene la RPC correspondiente. Utilice los request system yang add comandos o request system yang update para agregar módulos YANG y sus scripts de acción asociados a un paquete YANG nuevo o existente en el dispositivo. Después de agregar los módulos y los scripts de acción al dispositivo, puede ejecutar sus RPCs personalizados. Cuando ejecuta un RPC, el dispositivo invoca la secuencia de comandos a la que se hace referencia.

Solución de problemas de scripts de acción

De forma predeterminada, los scripts de acción registran mensajes de seguimiento informativo cuando se ejecuta la secuencia de comandos. Puede ver los mensajes de seguimiento para comprobar que la RPC invocó la secuencia de comandos y que la secuencia de comandos se ejecutó correctamente. Si el script falla por cualquier motivo, los errores se registran en el archivo de seguimiento.

Junos OS

Para ver los mensajes de seguimiento de scripts de acción en dispositivos Junos OS en ejecución, vea el contenido del archivo action.log trace.

Junos OS evolucionado

Para ver los mensajes de seguimiento de scripts de acción en dispositivos Junos OS Evolved, vea los mensajes de seguimiento de aplicación cscript, que incluyen datos de seguimiento para todos los tipos de script.

Tabla de historial de versiones
Lanzamiento
Descripción
22.3R1-EVO
A partir de Junos OS Evolved versión 22.3R1, Junos OS Evolved usa Python 3 para ejecutar scripts de acción y traducción yang.
21.2R1 y 21.2R1-EVO
A partir de Junos OS versión 21.2R1 y Junos OS Evolved versión 21.2R1, cuando el dispositivo pasa argumentos de línea de comandos a una secuencia de comandos de Python, prefija un guión único (-) a nombres de argumentos de un solo carácter y prefijo dos guiones (--) a nombres de argumentos de varios caracteres.
20.2R1
A partir de Junos OS versión 20.2R1, Junos OS usa Python 3 para ejecutar scripts de acción y traducción yang.
19.2R1
A partir de Junos OS versión 19.2R1, las RPCs yang personalizadas admiten parámetros de entrada de tipo empty cuando se ejecuta el comando de RPC en la CLI de Junos OS, y el valor pasado a la secuencia de comandos de acción es el nombre del parámetro.
17.3R1
A partir de Junos OS versión 17.3, la action-execute instrucción es una subestación a command.