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.
Conjunto de contenido |
Nombre del módulo |
---|---|
|
|
|
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.
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.
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.
--- - name: Get device information hosts: dc1 connection: local gather_facts: no tasks: - name: Get software and uptime information juniper.device.command: commands: - "show version" - "show system uptime" register: junos_result - name: Print response debug: var: junos_result
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.
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.
--- - name: Execute RPC hosts: dc1 connection: local gather_facts: no tasks: - name: Get interface information juniper.device.rpc: rpcs: "get-interface-information" register: junos_result - name: Print response debug: var: junos_result
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
.
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.
--- - name: Get Device Information hosts: dc1a connection: local gather_facts: no tasks: - name: Get device information juniper.device.rpc: rpcs: - "get-interface-information" - "get-lldp-interface-neighbors" - "get-software-information" kwargs: - interface_name: "lo0.0" terse: True - interface_device: "ge-0/0/0" - {} register: junos_result - name: Print response debug: var: junos_result
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_lines
y 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:
--- - name: Get device information hosts: dc1 connection: local gather_facts: no tasks: - name: Get software and system uptime information juniper.device.rpc: rpcs: - "get-software-information" - "get-system-uptime-information" formats: "text" register: junos_result - name: Print response debug: var: junos_result
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:
--- - name: Get device information hosts: dc1 connection: local gather_facts: no tasks: - name: Get software and system uptime information juniper.device.rpc: rpcs: - "get-software-information" - "get-system-uptime-information" formats: - "text" - "json" register: junos_result - name: Print response debug: var: junos_result
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:
--- - name: Get device information hosts: dc1 connection: local gather_facts: no tasks: - name: Get software and uptime information juniper.device.rpc: rpcs: - "get-software-information" - "get-system-uptime-information" dest_dir: "{{ playbook_dir }}"
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:
--- - name: Get device information hosts: dc1 connection: local gather_facts: no tasks: - name: Get software and uptime information juniper.device.command: commands: - "show version" - "show system uptime" dest_dir: "{{ playbook_dir }}"
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.
--- - name: Get device information hosts: dc1 connection: local gather_facts: no tasks: - name: Get software and uptime information juniper.device.rpc: rpcs: - "get-software-information" - "get-system-uptime-information" dest: "{{ inventory_hostname }}-system-information.xml"
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.
Juniper.junos
de la versión 2.0.0, el módulo reemplaza la
juniper_junos_command
funcionalidad del
junos_cli
módulo.
Juniper.junos
de la versión 2.0.0, el módulo reemplaza la
juniper_junos_rpc
funcionalidad del
junos_rpc
módulo.