Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Ejemplo: Usar una RPC yang personalizada para recuperar información operativa en dispositivos Junos

Puede agregar modelos de datos YANG que definan RPCs personalizadas en dispositivos Junos. La creación de RPCs personalizados le permite definir con precisión los parámetros de entrada y las operaciones, así como los campos de salida y el formato para sus tareas operativas específicas en esos dispositivos. En este ejemplo, se presenta un script de acción y UNA RPC personalizados que recuperan información operativa del dispositivo y muestran la salida de CLI personalizada.

El RPC se agrega al esquema de Junos OS en el dispositivo. Cuando se ejecuta el RPC en la CLI, imprime el nombre y el estado operativo de las interfaces físicas solicitadas.

Requisitos

En este ejemplo, se utilizan los siguientes componentes de hardware y software:

  • Dispositivo que ejecuta la versión 17.3R1 o posterior de Junos OS que admite la carga de modelos de datos YANG personalizados.

Descripción general de la RPC y el script de acción

El módulo YANG de este ejemplo define una RPC personalizada para devolver el nombre y el estado operativo de ciertas interfaces físicas. El módulo rpc-interface-status YANG se guarda en el archivo rpc-interface-status.yang . El módulo importa los módulos de extensión de Junos OS, que proporcionan las extensiones necesarias para ejecutar RPCs personalizadas en el dispositivo y personalizar la salida de CLI.

El módulo define la get-interface-status RPC. La <get-interface-status> etiqueta de solicitud se utiliza para ejecutar de forma remota la RPC en el dispositivo. En la definición de RPC, la junos:command instrucción define el comando que se utiliza para ejecutar la RPC en la CLI, que en este caso es show intf status.

Las junos:action-execute instrucciones and junos:script definen la secuencia de comandos de acción que se invoca cuando se ejecuta el RPC. En este ejemplo, se utiliza una secuencia de comandos de acción de Python denominada rpc-interface-status.py para recuperar la información requerida por la RPC y devolver los elementos de salida XML tal como se definen en la instrucción RPC output .

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.

El RPC tiene un parámetro de entrada denominado match, que determina las interfaces que se deben incluir en la salida. Cuando se ejecuta el RPC, se incluye una cadena que coincide en las interfaces deseadas, por ejemplo, ge-0*. Una cadena vacía ("") coincide con todas las interfaces. La secuencia de comandos de acción define el valor predeterminado como una cadena vacía, de match modo que si el usuario omite este argumento, la salida incluirá información para todas las interfaces.

El RPC también define los nodos de salida que debe emitir la secuencia de comandos de acción correspondiente. El nodo raíz es el <interface-status-info> elemento, que contiene cero o más <status-info> elementos que encierran los <interface> nodos y <status> para una interfaz coincidente. La junos-odl:format interface-status-info-format instrucción define el formato para el resultado que se muestra en la CLI. Este nodo no se emite en el árbol XML de salida.

En este ejemplo, se presentan dos versiones de la secuencia de comandos de acción de Python. Los scripts muestran diferentes medios para recuperar la salida del comando operativo, pero ambos scripts emiten una salida RPC idéntica. La primera secuencia de comandos de acción usa el módulo Python subprocess para ejecutar el show interfaces match-value | display xml comando y, luego, convierte la salida de cadena en XML. La segunda secuencia de comandos de acción usa Junos PyEZ para ejecutar el equivalente DE RPC del show interfaces match-value comando. Ambos scripts usan código idéntico para analizar la salida del comando y extraer el nombre y el estado operativo de cada interfaz física. Los scripts construyen el XML para la salida DE LA RPC y, a continuación, imprimen la salida, lo que devuelve la información al dispositivo. El árbol XML debe coincidir exactamente con la jerarquía definida en la RPC.

Nota:

Los dispositivos Junos definen espacios de nombres dependientes de versiones para muchos de los elementos de la salida operativa, incluido el <interface-information> elemento. Para hacer que la versión junos OS de RPC sea independiente, el código usa la local-name() función en las expresiones de XPath para estos elementos. Puede elegir incluir la asignación del espacio de nombres como un argumento para xpath() y calificar los elementos con el espacio de nombres adecuado.

El módulo que contiene el RPC y el archivo de secuencia de comandos de acción se agregan al dispositivo como parte de un nuevo paquete YANG denominado intf-rpc.

Módulo YANG

Módulo YANG

El módulo YANG, rpc-interface-status.yang, define el RPC, el comando utilizado para ejecutar el RPC en la CLI y el nombre de la secuencia de comandos de acción que se invocará cuando se ejecuta la RPC. El nombre base del archivo debe coincidir con el nombre del módulo.

Script de acción

La secuencia de comandos de acción correspondiente es rpc-interface-status.py. En este ejemplo, se presentan dos scripts de acción que utilizan medios diferentes para recuperar los datos. Un script usa el módulo Python subprocess y el otro script usa la biblioteca Junos PyEZ. Ambos scripts emiten la misma salida XML de RPC.

Nota:

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.

Secuencia de comandos de acción (uso subprocess)

La siguiente secuencia de comandos de acción usa el módulo Python subprocess para ejecutar el comando operativo y recuperar los datos. En este ejemplo, se proporcionan dos versiones de la secuencia de comandos, que manejan adecuadamente los argumentos de línea de comandos de la secuencia de comandos para las diferentes versiones.

Junos OS versión 21.1 y anteriores

Junos OS versión 21.2R1 y posteriores

Secuencia de comandos de acción (uso de Junos PyEZ)

La siguiente secuencia de comandos de acción usa Junos PyEZ para ejecutar el comando operativo y recuperar los datos. En este ejemplo, se proporcionan dos versiones de la secuencia de comandos, que manejan adecuadamente los argumentos de línea de comandos de la secuencia de comandos para las diferentes versiones.

Junos OS versión 21.1 y anteriores

Junos OS versión 21.2R1 y posteriores

Habilitación de la ejecución de scripts de Python

Para permitir que el dispositivo ejecute scripts de Python sin firmar:

  1. Configure la language python instrucción orlanguage python3, según corresponda para la versión de Junos OS.
    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.

  2. Confirme la configuración.

Cargar el RPC en el dispositivo

Para agregar el CÓDIGO DE ACCIÓN y EL RPC al esquema de Junos:

  1. Descargue el módulo YANG y la secuencia de comandos de acción al dispositivo Junos.
  2. Asegúrese de que la secuencia de comandos de acción de Python cumple con los siguientes requisitos:
    • 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 la línea de directiva de intérprete adecuada, tal como se describe en Create Action Scripts for YANG RPCs en dispositivos Junos.

  3. (Opcional) Valide la sintaxis para el módulo YANG y la secuencia de comandos de acción.
  4. Agregue el módulo YANG y la secuencia de comandos de acción a un nuevo paquete YANG.
    Nota:

    A partir de Junos OS versión 17.3R1, cuando carga modelos de datos yang personalizados en el dispositivo, no es necesario cargar explícitamente ningún módulo de extensión de Junos OS necesario. En versiones anteriores, debe cargar los módulos de extensión de Junos OS para cualquier paquete que use los módulos.

  5. Cuando el sistema le pida que reinicie la CLI de Junos OS, presione Enter para aceptar el valor predeterminado de yes, o tipo yes y presione Enter.

Verificación de la RPC

Propósito

Compruebe que el RPC funciona como se esperaba.

Acción

Desde el modo operativo, ejecute el RPC en la CLI mediante la emisión del comando definido por la junos:command instrucción en la definición de RPC e incluya el argumento de match entrada. En este ejemplo, el argumento match se usa para coincidir en todas las interfaces que comienzan con ge-0.

También puede ajustar la condición de coincidencia para devolver diferentes conjuntos de interfaces. Por ejemplo:

Para devolver el mismo resultado en formato XML, anexe el | display xml filtro al comando.

Nota:

Para que coincida con todas las interfaces, omita el match argumento o establezca el valor del argumento en una cadena vacía ("").

Significado

Cuando ejecuta el RPC, el dispositivo invoca la secuencia de comandos de acción. La secuencia de comandos de acción ejecuta el comando operativo para recuperar la información de la interfaz del dispositivo, analiza la salida de la información deseada e imprime la jerarquía XML para la salida de RPC tal como se define en la instrucción RPC output . Cuando se ejecuta el RPC en la CLI, el dispositivo usa el formato de CLI definido en la RPC para convertir la salida XML en la salida de CLI mostrada. Para devolver la salida XML original, anexe el | display xml filtro al comando.

Nota:

Cuando el RPC se ejecuta de forma remota mediante la etiqueta de solicitud DE RPC, el formato predeterminado de la salida es XML.

Solución de problemas de errores de ejecución de RPC

Problema

Descripción

Cuando ejecuta la RPC, el dispositivo genera el siguiente error:

Causa

El usuario que invocó la RPC no tiene los permisos necesarios para ejecutar la secuencia de comandos de acción de Python correspondiente.

Solución

Los usuarios solo pueden ejecutar scripts de Python sin firmar en dispositivos Junos 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.

Compruebe si la secuencia de comandos tiene los permisos necesarios para que ese usuario ejecute la secuencia de comandos y ajuste los permisos, si corresponde. Si actualiza los permisos, también debe actualizar el paquete YANG para que este cambio tenga efecto. Por ejemplo:

Tabla de historial de versiones
Lanzamiento
Descripción
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.