Use los juniper.device.command módulos y juniper.device.rpc Ansible para ejecutar comandos y RPC en dispositivos Junos
Puede usar los juniper.device.command módulos y juniper.device.rpc Ansible para ejecutar comandos de modo operativo y RPC en dispositivos Junos.
Juniper Networks proporciona módulos de Ansible que puede utilizar para ejecutar comandos de modo operativo y llamadas de procedimiento remoto (RPC) en dispositivos que ejecutan Junos OS y dispositivos que ejecutan Junos OS Evolved. En la Tabla 1 se describen los módulos. Si ya está utilizando un conjunto determinado de módulos de la juniper.device colección, use los módulos para ese conjunto.
|
Colección |
Conjunto de módulos |
Nombre del módulo |
|---|---|---|
|
|
|
|
|
|
En las siguientes secciones se describe cómo usar los juniper.device.command módulos y juniper.device.rpc , analizar la respuesta del módulo, especificar el formato de salida y guardar la salida en un archivo.
Para extraer más fácilmente datos específicos de la salida operativa, también puede usar el juniper.device.table módulo con tablas operativas de Junos PyEZ personalizadas o predefinidas. Para obtener más información, consulte Uso de Ansible con tablas PyEZ de Junos para recuperar información operativa de dispositivos Junos.
Cómo ejecutar comandos con el juniper.device.command módulo
El juniper.device.command módulo le permite ejecutar comandos de modo operativo en dispositivos Junos. El módulo requiere un argumento, commands, que es una lista de uno o varios comandos de modo operativo de Junos OS que se van a ejecutar en el dispositivo.
El siguiente manual ejecuta dos comandos del modo operativo en cada dispositivo del grupo de inventario. El manual muestra la respuesta del módulo en la salida estándar (stdout).
---
- 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
ansible.builtin.debug:
var: junos_result
Para obtener información sobre 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 de RPC.
Cómo ejecutar RPC con el juniper.device.rpc módulo
La API XML de Junos es una representación XML de instrucciones de configuración y comandos de modo operativo de Junos OS. Define un XML equivalente 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 una contraparte 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 RPC dentro de NETCONF o sesiones de protocolo XML de Junos para solicitar información de un dispositivo Junos. El servidor devuelve la respuesta utilizando elementos XML de Junos incluidos dentro del elemento de etiqueta de respuesta correspondiente.
El juniper.device.rpc módulo le permite ejecutar RPC en dispositivos Junos. El módulo requiere un argumento, rpcs, que es una lista de uno o más RPC de Junos OS para ejecutarse en el dispositivo.
El siguiente manual ejecuta la get-interface-information RPC en cada dispositivo del grupo de inventario y muestra la respuesta del módulo en stdout. El RPC es equivalente al comando del show interfaces modo operativo.
---
- 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
ansible.builtin.debug:
var: junos_result
Para obtener más información sobre cómo asignar 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 sobre 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 de RPC.
El juniper.device.rpc módulo admite la kwargs opción, que le permite especificar argumentos y valores de palabras clave para las RPC. El valor de kwargs puede ser:
-
Un único diccionario de palabras clave y valores
-
Una lista de diccionarios que proporciona argumentos para múltiples RPC
Debe haber una correspondencia uno a uno entre los elementos de la kwargs lista y los RPC de la rpcs lista. Si ejecuta varias RPC y una RPC no requiere ningún argumento, establezca el elemento de lista correspondiente kwargs igual a un diccionario {}vacío. Si un argumento RPC individual no requiere un valor, establezca su valor igual a true.
Debe usar guiones bajos en los argumentos RPC en lugar de guiones, lo que puede generar excepciones o errores en determinadas circunstancias.
En el siguiente manual, se ejecutan las RPC especificadas en cada dispositivo del grupo de inventario y se muestra la respuesta del módulo en stdout. La get-interface-information RPC solicita una salida de nivel conciso para la interfaz lo0.0. La get-lldp-interface-neighbors RPC solicita información para la interfaz ge-0/0/0. La get-software-information RPC utiliza un diccionario vacío para ejecutar la 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
ansible.builtin.debug:
var: junos_result
Descripción de la respuesta del módulo
Los juniper.device.command módulos y juniper.device.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 sola 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 está presente 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 results clave, que es una lista de diccionarios. Cada elemento de la lista corresponde a un único comando o RPC. Incluye todas las claves que se devuelven para ese comando o RPC.
Por ejemplo, la siguiente respuesta corresponde a la ejecución de una sola RPC:
"junos_result": {
"attrs": null,
"changed": false,
"failed": false,
"format": "xml",
"kwargs": null,
"msg": "The RPC executed successfully.",
"parsed_output": {
"interface-information": {
"physical-interface": [
[...output omitted...]
}
},
"rpc": "get-interface-information",
"stdout": "<interface-information style=\"normal\">\n <physical-interface>\n
[...output omitted...] </physical-interface>\n</interface-information>\n"
"stdout_lines": [
"<interface-information style=\"normal\">",
" <physical-interface>",
[...output omitted...]
" </physical-interface>",
"</interface-information>"
]
}
En algunos casos, la salida de comandos 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.
tasks:
- name: Get interface information
juniper.device.rpc:
rpcs: "get-interface-information"
return_output: false
register: junos_result
Cómo especificar el formato para el comando o la salida de RPC
Los command módulos y 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 solo 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, el command módulo devuelve la salida del comando en formato de texto y el rpc módulo devuelve la salida RPC en formato XML.
Para especificar un formato de salida diferente, incluya el formats argumento y establezca el valor igual al formato requerido. Los formatos admitidos incluyen:
-
json -
text -
xml
El formats parámetro toma una cadena o una lista de cadenas. Cuando se especifica un solo formato, todos los comandos ejecutados o RPC utilizan ese formato. Para especificar un formato diferente para cada comando o RPC, establezca el formats argumento en una lista de los formatos necesarios. El número de formatos debe ser el mismo que el número de comandos o RPC.
El siguiente manual ejecuta dos RPC en cada dispositivo del grupo de inventario. El manual 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
ansible.builtin.debug:
var: junos_result
En la respuesta del módulo, las stdout claves y stdout_lines contienen la respuesta RPC en formato de texto.
El siguiente manual ejecuta dos RPC en cada dispositivo del grupo de inventario. El módulo solicita la salida de la primera RPC en formato de texto y la salida de 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
ansible.builtin.debug:
var: junos_result
Cómo guardar el comando o la salida RPC en un archivo
Cuando utilice el juniper.device.command módulo o juniper.device.rpc , puede guardar los datos devueltos en un archivo en el nodo de control de Ansible local. Para guardar los datos, incluya el dest argumento o dest_dir module. La dest_dir opción guarda el resultado de cada comando o RPC en archivos independientes para un dispositivo. La dest opción guarda el resultado de 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.
Si guarda los datos en un archivo y no desea duplicar la salida en la respuesta del módulo, puede incluirlos return_output: false opcionalmente en la lista de argumentos del módulo. Establecer return_output en hace que false el módulo omita las teclas de salida en la respuesta del módulo. Omitir las claves puede ser necesario si el dispositivo devuelve una cantidad significativa de datos.
En las siguientes secciones se describe cómo usar las dest_dir opciones y dest .
dest_dir
Para especificar el directorio en el nodo de control de Ansible local donde se guardan los datos recuperados, incluya el dest_dir argumento y defina la ruta al directorio de destino. El módulo almacena el resultado de cada comando o RPC ejecutado en un dispositivo en un archivo independiente 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 por 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. El manual guarda el resultado de cada RPC de cada dispositivo en un archivo independiente en el directorio del playbook en el 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 dc1a.example.net de host son:
-
dc1a.example.net_get-software-information.xml
-
dc1a.example.net_get-system-tiempo de actividad-information.xml
De manera similar, el siguiente manual ejecuta los comandos equivalentes en cada dispositivo del grupo de inventario. El manual guarda el resultado de cada comando de cada dispositivo en un archivo independiente en el directorio del playbook en el 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 dc1a.example.net de host son:
-
dc1a.example.net_show_version.texto
-
dc1a.example.net_show_system_time de actividad.text
dest
Puede utilizar la dest opción para especificar el archivo de salida en el que se guardan todos los comandos o salidas RPC de un nodo de destino en el nodo de control de Ansible local. Defina el nombre de archivo o la ruta completa del archivo. Si incluye el dest argumento, pero omite el directorio, los archivos se guardan en el directorio del libro de estrategias. Si ejecuta comandos o RPC en varios dispositivos, el dest argumento debe incluir una variable como {{ inventory_hostname }} para diferenciar el 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.
El siguiente manual ejecuta RPC en cada dispositivo del grupo de inventario. El manual guarda la salida de todas las RPC en un archivo independiente para cada dispositivo. El archivo se coloca en el directorio del manual 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 la dc1a.example.net de host es dc1a.example.net-system-information.xml y contiene la salida de todas las RPC ejecutadas en el dispositivo.