Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Usar Ansible para ejecutar comandos y RPC en dispositivos Junos

RESUMEN Utilice los módulos Ansible de Juniper Networks para ejecutar comandos de modo operativo y RPC en dispositivos Junos.

Juniper Networks admite el uso de Ansible para administrar dispositivos Junos y proporciona módulos de Ansible que le permiten ejecutar comandos en modo operativo y llamadas a procedimiento remoto (RPC) en los dispositivos. En el cuadro 1 se esbozan los módulos.

Tabla 1: Módulos de comando y RPC

Conjunto de contenido

Nombre del módulo

juniper.device Colección

command

rpc

Juniper.junos Papel

juniper_junos_command

juniper_junos_rpc

En las secciones siguientes se explica cómo usar los módulos, analizar la respuesta del módulo, especificar el formato de salida y guardar la salida en un archivo.

Nota:

Para extraer más fácilmente los datos de destino de la salida operativa, también puede utilizar el table módulo o con tablas operativas personalizadas o juniper_junos_table predefinidas de Junos PyEZ. Para obtener más información, consulte Usar Ansible con tablas PyEZ de Junos para recuperar información operativa de dispositivos Junos.

Cómo ejecutar comandos con los módulos de Juniper Networks

Los command módulos y juniper_junos_command le permiten ejecutar comandos de modo operativo en dispositivos Junos. Los módulos requieren un argumento, commands, que es una lista de uno o más comandos del modo operativo de Junos OS para ejecutar en el dispositivo.

Nota:

A partir Juniper.junos de la versión 2.0.0, el módulo reemplaza la juniper_junos_command funcionalidad del junos_cli módulo.

El siguiente manual ejecuta dos comandos de modo operativo en cada dispositivo del grupo de inventario y muestra la respuesta del módulo en la salida estándar. En este ejemplo, el módulo se autentica con el command dispositivo mediante claves SSH en la ubicación predeterminada.

Para obtener información acerca de la respuesta del módulo y el formato de salida, consulte Descripción de la respuesta del módulo y Cómo especificar el formato para el comando o la salida RPC.

Cómo ejecutar RPC con los módulos de Juniper Networks

La API XML de Junos es una representación XML de las instrucciones de configuración y los comandos de modo operativo de Junos OS. Define un equivalente XML para todas las instrucciones de la jerarquía de configuración de Junos OS y muchos de los comandos de modo operativo que se emiten en la CLI de Junos OS. Cada comando del modo operativo con un homólogo XML de Junos se asigna a un elemento de etiqueta de solicitud y, si es necesario, a un elemento de etiqueta de respuesta. Las etiquetas de solicitud se utilizan en llamadas a procedimiento remoto (RPC) dentro de las sesiones de protocolo XML de NETCONF o Junos para solicitar información de un dispositivo Junos. El servidor devuelve la respuesta utilizando elementos XML de Junos encerrados dentro del elemento de etiqueta de respuesta.

Los rpc módulos y juniper_junos_rpc le permiten ejecutar RPC en dispositivos Junos. Los módulos requieren un argumento, rpcs, que es una lista de una o más RPC de Junos OS para ejecutar en el dispositivo.

Nota:

A partir Juniper.junos de la versión 2.0.0, el módulo reemplaza la juniper_junos_rpc funcionalidad del junos_rpc módulo.

En el siguiente manual se ejecuta el get-interface-information RPC, que es equivalente al comando de modo operativo, en cada dispositivo del grupo de show interfaces inventario y se muestra la respuesta del módulo en la salida estándar. En este ejemplo, el módulo se autentica con el rpc dispositivo mediante claves SSH en la ubicación predeterminada.

Nota:

Para obtener información acerca de la asignación de comandos de CLI a etiquetas de solicitud RPC, consulte el Explorador de API XML de Junos para ver las etiquetas operativas.

Para obtener información acerca de la respuesta del módulo y el formato de salida, consulte Descripción de la respuesta del módulo y Cómo especificar el formato para el comando o la salida RPC.

Los rpc módulos y admiten la kwargs opción, que permite especificar argumentos y juniper_junos_rpc valores de palabras clave para los RPC. El valor de puede ser un único diccionario de palabras clave y valores, o puede ser una lista de kwargs diccionarios que proporcionan argumentos para varios RPC. Debe haber una correspondencia uno a uno entre los elementos de la lista y los RPC de la kwargs rpcs lista. Si ejecuta varias RPC y una RPC no requiere ningún argumento, establezca el elemento de lista correspondiente igual a un diccionario {}vacío. Si un argumento RPC individual no requiere un valor, establezca su valor en True.

Nota:

Debe usar guiones bajos en los argumentos RPC en lugar de guiones, que pueden provocar excepciones o errores en determinadas circunstancias.

El siguiente manual ejecuta las RPC especificadas en cada dispositivo del grupo de inventario y muestra la respuesta del módulo en la salida estándar. El get-interface-information RPC solicita salida de nivel conciso para la interfaz lo0.0 y el get-lldp-interface-neighbors RPC solicita información para la interfaz ge-0/0/0. El get-software-information RPC utiliza un diccionario vacío para ejecutar el RPC sin argumentos adicionales.

Descripción de la respuesta del módulo

El comando Juniper Networks y los módulos RPC almacenan la respuesta RPC del dispositivo dentro de varias claves diferentes en la respuesta del módulo. Los datos de cada clave se estructuran de la siguiente manera:

  • stdout: la respuesta RPC es una única cadena de varias líneas.

  • stdout_lines: la respuesta RPC es una lista de cadenas de una sola línea.

  • parsed_output: la respuesta RPC se analiza en una estructura de datos de notación de objetos JavaScript (JSON). Esta clave solo se devuelve cuando el formato de los datos es XML o JSON.

Si el módulo ejecuta un solo comando o RPC, la respuesta del módulo coloca las claves devueltas en el nivel superior. Si el módulo ejecuta varios comandos o RPC, la respuesta del módulo incluye una clave, que es una results lista de diccionarios. Cada elemento de la lista corresponde a un único comando o RPC e incluye todas las claves que se devolverían para ese comando o RPC.

En algunos casos, la salida de comando o RPC puede ser extensa y puede ser necesario suprimir la salida en la respuesta del módulo. Para omitir las claves de salida en la respuesta del módulo, inclúyalas return_output: false en la lista de argumentos de ese módulo.

Cómo especificar el formato para el comando o la salida RPC

El comando Juniper Networks y los módulos RPC almacenan la respuesta RPC del dispositivo dentro de varias claves diferentes en la respuesta del módulo: stdout, , stdout_linesy parsed_output. La parsed_output clave, que sólo está presente cuando el comando o el formato de salida RPC es XML o JSON, contiene datos que se analizan en una estructura de datos JSON.

Las stdout claves y stdout_lines contienen datos en el formato predeterminado definido para el módulo. De forma predeterminada, los módulos y devuelven la salida del comando en formato de texto y juniper_junos_command los command rpc módulos y juniper_junos_rpc devuelven la salida RPC en formato XML. Para especificar un formato de salida diferente, incluya el argumento y establezca el formats valor igual al formato deseado. Para solicitar formato de texto, elementos XML de Junos o formato JSON, utilice 'text', 'xml'o 'json' respectivamente. El formato solicitado debe ser compatible con el dispositivo en el que se ejecuta el comando o RPC.

El formats parámetro toma una cadena o una lista de cadenas. Cuando ejecuta varios comandos o RPC y sólo especifica un único formato, el formato de salida es el mismo para todos los comandos y RPC ejecutados. Para especificar un formato diferente para la salida de cada comando o RPC, establezca el formats argumento en una lista de los formatos deseados. La lista debe especificar el mismo número de formatos que hay comandos o RPC.

En el siguiente manual se ejecutan dos RPC en cada dispositivo del grupo de inventario y se solicita formato de texto para la salida de todas las RPC ejecutadas:

Cuando se ejecuta el manual, las stdout claves y stdout_lines de la respuesta del módulo contienen la respuesta RPC en formato de texto.

El siguiente manual ejecuta dos RPC en cada dispositivo del grupo de inventario y solicita la salida para la primera RPC en formato de texto y la salida para la segunda RPC en formato JSON:

Cómo guardar el comando o la salida RPC en un archivo

Cuando utilice los módulos de Juniper Networks para ejecutar un comando o RPC en un dispositivo, puede guardar los datos devueltos en un archivo en el nodo de control local de Ansible incluyendo los argumentos del dest módulo o dest_dir . Mientras que la opción guarda la salida de cada comando o RPC en archivos separados para un dispositivo, la opción guarda la dest_dir dest salida para todos los comandos y RPC en el mismo archivo para un dispositivo. Si ya existe un archivo de salida con el nombre de destino, el módulo sobrescribe el archivo.

Para especificar el directorio en el nodo de control local de Ansible donde se guardan los datos recuperados, incluya el dest_dir argumento y defina la ruta al directorio de destino. El módulo almacena la salida para cada comando o RPC ejecutado en un dispositivo en un archivo separado llamado hostname_name.format donde:

  • hostname: nombre de host del dispositivo en el que se ejecuta el comando o RPC.

  • name: nombre del comando o RPC ejecutado en el dispositivo administrado. El módulo reemplaza los espacios en el nombre del comando con guiones bajos ( _ ).

  • format: formato de la salida, que puede ser json, text o xml.

El siguiente manual ejecuta dos RPC en cada dispositivo del grupo de inventario y guarda el resultado de cada RPC para cada dispositivo en un archivo independiente en el directorio del manual del nodo de control de Ansible:

Los archivos de salida resultantes para el dc1a.example.net de host son:

  • dc1a.example.net_get-software-information.xml

  • dc1a.example.net_get-system-uptime-information.xml

De forma similar, el siguiente manual ejecuta los comandos equivalentes en cada dispositivo del grupo de inventario y guarda el resultado de cada comando para cada dispositivo en un archivo independiente en el directorio del manual del nodo de control de Ansible:

Los archivos de salida resultantes para el dc1a.example.net de host son:

  • dc1a.example.net_show_version.text

  • dc1a.example.net_show_system_uptime.text

Para especificar la ruta y el nombre de archivo en los que se guarda toda la salida de comandos o RPC de un nodo de destino en el nodo de control local de Ansible, incluya el argumento y defina el dest nombre de archivo o la ruta completa del archivo. Si incluye el argumento, pero omite el directorio, los archivos se guardan en el dest directorio del manual. Si ejecuta comandos o RPC en varios dispositivos, el argumento debe incluir una variable como {{ inventory_hostname }} para diferenciar el dest nombre de archivo de cada dispositivo. Si no diferencia los nombres de archivo, el archivo de salida de cada dispositivo sobrescribirá el archivo de salida de los demás dispositivos.

En el siguiente manual se ejecutan RPC en cada dispositivo del grupo de inventario. El resultado de todas las RPC se almacena en un archivo independiente para cada dispositivo y el archivo se coloca en el directorio del manual de estrategias del nodo de control de Ansible. Cada archivo se identifica de forma única por el nombre de host del dispositivo.

Por ejemplo, el archivo de salida resultante para el dc1a.example.net de host es dc1a.example.net-system-information.xml y contiene el resultado de todos los RPC ejecutados en el dispositivo.

Si está guardando los datos en un archivo y no desea duplicar el comando o la salida RPC en la respuesta del módulo, puede incluirlos return_output: false opcionalmente en la lista de argumentos del módulo. Si se establece en, return_output el módulo omite las claves de salida en false la respuesta del módulo. Hacer esto puede ser necesario si los dispositivos devuelven una cantidad significativa de datos.

Tabla de historial de versiones
Lanzamiento
Descripción
2.0.0
A partir Juniper.junos de la versión 2.0.0, el módulo reemplaza la juniper_junos_command funcionalidad del junos_cli módulo.
2.0.0
A partir Juniper.junos de la versión 2.0.0, el módulo reemplaza la juniper_junos_rpc funcionalidad del junos_rpc módulo.