EN ESTA PÁGINA
Cómo especificar la base de datos de origen para los datos de configuración
Cómo especificar el ámbito de los datos de configuración que se van a devolver
Cómo especificar el formato de los datos de configuración que se devolverán
Cómo recuperar datos de configuración para modelos de datos YANG de terceros
Cómo especificar opciones que no tienen un argumento de módulo equivalente
Cómo comparar la configuración activa con una configuración anterior
Usar Ansible para recuperar o comparar configuraciones de Junos OS
RESUMEN Utilice los módulos Ansible de Juniper Networks para recuperar o comparar configuraciones en dispositivos Junos.
Juniper Networks proporciona un módulo de Ansible que le permite administrar la configuración en dispositivos Junos. En la Tabla 1 se describe el módulo disponible, que puede utilizar para recuperar o comparar configuraciones de dispositivos Junos.
| Conjunto de contenido |
Nombre del módulo |
|---|---|
|
|
Puede utilizar el juniper.device.config módulo para solicitar la configuración completa o partes seleccionadas de la configuración tanto para la configuración nativa de Junos OS como para los datos de configuración correspondientes a modelos de datos YANG de terceros que se hayan agregado al dispositivo. Para recuperar la configuración de un dispositivo Junos, ejecute el config módulo con el retrieve parámetro. La respuesta del módulo incluye la configuración en formato de texto en las config claves y config_lines , a menos que la return_output opción esté establecida en false. También puede comparar la configuración activa con una configuración previamente confirmada.
En las secciones siguientes se explica cómo utilizar el módulo para recuperar o comparar configuraciones.
Cómo especificar la base de datos de origen para los datos de configuración
Cuando utilice el juniper.device.config módulo para recuperar la configuración, debe incluir el retrieve parámetro en la lista de argumentos del módulo. El retrieve parámetro especifica la base de datos de configuración de la que se recuperarán los datos. Puede establecer retrieve los siguientes valores para devolver datos de configuración de la base de datos correspondiente:
-
retrieve: 'candidate': recupera datos de la configuración candidata. -
retrieve: 'committed': recupera datos de la configuración confirmada.
Base de datos de configuración confirmada
El siguiente manual recupera la configuración confirmada completa en formato de texto para cada dispositivo del grupo de inventario:
---
- name: "Get Junos OS configuration"
hosts: junos-all
connection: local
gather_facts: no
tasks:
- name: "Get committed configuration"
juniper.device.config:
retrieve: "committed"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
Base de datos de configuración candidata
En el siguiente manual se recupera la configuración candidata completa en formato de texto para cada dispositivo del grupo de inventario. El módulo devuelve un error si la base de datos está bloqueada o modificada.
---
- name: "Get Junos OS configuration"
hosts: junos-all
connection: local
gather_facts: no
tasks:
- name: "Get candidate configuration"
juniper.device.config:
retrieve: "candidate"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
Cómo especificar el ámbito de los datos de configuración que se van a devolver
Además de recuperar la configuración completa de Junos OS, puede recuperar partes específicas de la configuración incluyendo el config parámetro del filter módulo. El filter valor del parámetro es una cadena que contiene el filtro de subárbol que selecciona las instrucciones de configuración que se van a devolver. El filtro de subárbol devuelve los datos de configuración que coinciden con los criterios de selección. Si solicita varias jerarquías, el valor de filter debe representar todos los niveles de la jerarquía de configuración desde la raíz (representada por el <configuration> elemento) hasta cada elemento que se va a mostrar.
En el siguiente manual se recupera e imprime la configuración en los niveles jerárquico [edit interfaces] y [edit protocols] en la base de datos de configuración confirmada para cada dispositivo:
---
- name: "Get Junos OS configuration hierarchies"
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: "Get selected configuration hierarchies"
juniper.device.config:
retrieve: "committed"
filter: "<configuration><interfaces/><protocols/></configuration>"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
El siguiente manual recupera e imprime la configuración de la interfaz ge-1/0/1:
---
- name: "Get Junos OS configuration hierarchies"
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: "Get selected configuration hierarchies"
juniper.device.config:
retrieve: "committed"
filter: "<interfaces><interface>
<name>ge-1/0/1</name></interface></interfaces>"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
El siguiente manual recupera e imprime la configuración confirmada en el nivel de [edit system services] jerarquía:
---
- name: "Get Junos OS configuration hierarchies."
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: "Get selected configuration hierarchies"
juniper.device.config:
retrieve: "committed"
filter: "system/services"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
Cómo especificar el formato de los datos de configuración que se devolverán
Cuando se utiliza el juniper.device.config módulo para recuperar la configuración, el módulo invoca la operación de protocolo <get-configuration> XML de Junos, que puede devolver datos de configuración en diferentes formatos. De forma predeterminada, el módulo devuelve los datos de configuración como texto con formato. El formato de texto utiliza nuevas líneas, tabulaciones y otros espacios en blanco, llaves y corchetes para indicar las relaciones jerárquicas entre las instrucciones.
Para especificar el formato en el que devolver los datos de configuración, establezca el config parámetro del format módulo igual al formato deseado. Los valores aceptables incluyen:
-
'json'—Notación de objetos JavaScript (JSON) -
'set'—Comandos de Junos OSset -
'text'—Texto con formato (predeterminado) -
'xml'—Elementos XML de Junos
En la salida del manual, las config claves y config_lines contienen la configuración en el formato solicitado. Si solicita el formato Junos XML o JSON, la config_parsed clave contiene la configuración equivalente en formato JSON.
El siguiente manual recupera la configuración confirmada completa para cada dispositivo del grupo de inventario en formato XML:
---
- name: "Get Junos OS configuration."
hosts: junos-all
connection: local
gather_facts: no
tasks:
- name: "Get configuration in XML format"
juniper.device.config:
retrieve: "committed"
format: "xml"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
Cómo recuperar datos de configuración para modelos de datos YANG de terceros
Puede cargar módulos YANG estandarizados o personalizados en dispositivos Junos para agregar modelos de datos que no son compatibles de forma nativa con Junos OS pero que pueden ser compatibles con la traducción. Los modelos de datos no nativos se configuran en la configuración candidata mediante la sintaxis definida para dichos modelos. Al confirmar la configuración, los scripts de traducción del modelo de datos traducen esos datos y confirman la configuración correspondiente de Junos OS como un cambio transitorio en la configuración de retirada.
Las configuraciones candidatas y activas contienen los datos de configuración de los modelos de datos de YANG no nativos en la sintaxis definida por esos modelos. Puede utilizar el módulo para recuperar datos de juniper.device.config configuración para modelos de datos YANG estándar (IETF, OpenConfig) y personalizados, además de recuperar la configuración nativa de Junos OS. De forma predeterminada, los datos de configuración para modelos de datos YANG de terceros no se incluyen en la respuesta del módulo.
Para recuperar datos de configuración definidos por un modelo de datos de YANG no nativo, además de recuperar la configuración de Junos OS, ejecute el módulo con el model parámetro e incluya el namespace parámetro cuando corresponda. El model argumento toma uno de los siguientes valores:
-
custom: recupera datos de configuración definidos por modelos de datos YANG personalizados. Debe incluir elnamespaceargumento al recuperar datos para modelos de datos YANG personalizados. -
ietf: recupera datos de configuración definidos por los modelos de datos de YANG de IETF. -
openconfig: recupera datos de configuración definidos por los modelos de datos YANG de OpenConfig. -
True: recupera todos los datos de configuración, incluida la configuración completa de Junos OS y los datos de cualquier modelo de datos de YANG.
Si el model argumento especifica ietf o openconfig, el módulo utiliza automáticamente el espacio de nombres adecuado. Si especifica model: "custom" recuperar datos para un modelo de datos YANG personalizado, también debe incluir el namespace argumento con el espacio de nombres correspondiente.
Si incluye el model argumento con el valor custom, ietfo openconfig también incluye el filter argumento para devolver un subárbol XML específico, Junos OS solo devuelve la jerarquía coincidente del modelo de datos no nativo. Si la configuración de Junos OS contiene una jerarquía del mismo nombre, por ejemplo "interfaces", no se incluye en la respuesta. La filter opción no se admite cuando se utiliza model: "True".
Cuando utilice el config módulo para recuperar datos de configuración no nativos, sólo puede especificar el formato de los datos devueltos si también incluye el filter parámetro. Si omite el filter parámetro, debe especificar format: "xml".
El siguiente manual recupera la jerarquía de configuración de OpenConfig interfaces de la configuración confirmada. Si omite el filter argumento, RPC devuelve las configuraciones completas de Junos OS y OpenConfig.
---
- name: "Retrieve OpenConfig configuration"
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: "Retrieve the OpenConfig interfaces configuration"
juniper.device.config:
retrieve: "committed"
model: "openconfig"
filter: "interfaces"
format: "xml"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
La siguiente tarea recupera la l2vpn jerarquía de configuración de la configuración confirmada para un modelo de datos de YANG personalizado con el espacio de nombres especificado:
tasks:
- name: "Retrieve custom configuration"
juniper.device.config:
retrieve: "committed"
model: "custom"
filter: "l2vpn"
remove_ns: False
namespace: "http://yang.juniper.net/customyang/l2vpn"
format: "xml"
register: response
La siguiente tarea recupera la configuración confirmada completa de Junos OS, así como los datos de configuración de otros modelos de datos de YANG que se agregaron al dispositivo:
tasks:
- name: "Retrieve Junos OS and all third-party configuration data"
juniper.device.config:
retrieve: "committed"
model: "True"
format: "xml"
register: response
Cómo especificar opciones que no tienen un argumento de módulo equivalente
Cuando se utiliza el juniper.device.config módulo para recuperar la configuración, el módulo invoca la operación del protocolo <get-configuration> XML de Junos. El módulo admite argumentos explícitos para muchos de los <get-configuration> atributos, por ejemplo, el format atributo. El módulo también admite el options argumento, lo que permite incluir cualquier atributo adicional <get-configuration> que no tenga un argumento de módulo equivalente. El options argumento toma un diccionario de pares clave/valor de cualquier atributo admitido por la <get-configuration> operación.
Para obtener la lista completa de atributos admitidos por la operación del protocolo <get-configuration> XML de Junos, consulte <get-configuration>.
Por ejemplo, el config módulo recupera datos de la configuración previa a la herencia, en la que las <groups>etiquetas , <apply-groups><apply-groups-except>, y <interface-range> son elementos independientes en la salida de la configuración. Para recuperar datos de la configuración posterior a la herencia, que muestra instrucciones heredadas de grupos y rangos definidos por el usuario como elementos secundarios de las instrucciones heredadas, puede incluir el options argumento con inherit: "inherit".
En el siguiente manual se recuperan los datos de configuración en el nivel de jerarquía de la configuración confirmada posterior a la [edit system services] herencia. En este caso, si la configuración también contiene instrucciones configuradas en el nivel de jerarquía, dichas instrucciones se heredarán [edit system services] en la configuración posterior a la [edit groups global system services] herencia y se devolverán en los datos de configuración recuperados.
---
- name: "Get Junos OS configuration hierarchies"
hosts: dc1
connection: local
gather_facts: no
tasks:
- name: "Get selected hierarchy from the post-inheritance configuration"
juniper.device.config:
retrieve: "committed"
filter: "system/services"
options:
inherit: "inherit"
register: response
- name: "Print result"
ansible.builtin.debug:
var: response
Cómo guardar datos de configuración en un archivo
Cuando utilice el juniper.device.config módulo para recuperar la configuración, puede guardar los datos de configuración devueltos en un archivo en el nodo de control de Ansible local incluyendo el parámetro dest_dir o el módulo o dest . La dest_dir opción solo especifica un directorio, y la opción puede especificar tanto una ruta como un nombre de dest archivo. 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 las configuraciones recuperadas, incluya el dest_dir argumento y defina la ruta al directorio de destino. La configuración de cada dispositivo se almacena en un archivo independiente denominado hostname.config.
El siguiente manual recupera la configuración confirmada de todos los dispositivos del grupo de inventario. El playbook guarda cada configuración del dispositivo en un archivo independiente del directorio configs del directorio playbook del nodo de control de Ansible.
---
- name: "Get Junos OS configuration"
hosts: junos-all
connection: local
gather_facts: no
tasks:
- name: "Save configuration to a file"
juniper.device.config:
retrieve: "committed"
dest_dir: "{{ playbook_dir }}/configs"
Para especificar la ruta de acceso y el nombre de archivo de los archivos de salida, incluya el dest argumento y defina la ruta de acceso absoluta o relativa del archivo. Si incluye el dest argumento, pero omite el directorio, los archivos se guardan en el directorio del manual. Si recupera la configuración para 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 configuración de cada dispositivo sobrescribirá el archivo de configuración de los demás dispositivos.
En el siguiente manual se recupera la [edit system services] jerarquía de la base de datos de configuración confirmada en todos los dispositivos del grupo de inventario. El manual guarda cada configuración de dispositivo en un archivo independiente del 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 Junos OS configuration"
hosts: junos-all
connection: local
gather_facts: no
tasks:
- name: "Get selected configuration hierarchies and save to file"
juniper.device.config:
retrieve: "committed"
filter: "system/services"
dest: "{{ inventory_hostname }}-system-services-config"
Si está guardando los datos de configuración en archivos y no desea duplicar los datos de configuración en la respuesta del módulo, puede incluirlos return_output: false opcionalmente en la lista de argumentos del módulo. Si se establece return_output en false , el módulo omite las configclaves , config_linesy config_parsed en su respuesta. Puede ser necesario hacer esto si el dispositivo devuelve una cantidad significativa de datos de configuración.
Cómo comparar la configuración activa con una configuración anterior
El juniper.device.config módulo le permite comparar la configuración activa con una configuración previamente confirmada o una configuración de reversión. Para comparar la configuración activa con una configuración anterior, incluya los siguientes argumentos de módulo:
juniper.device.config: diff: true rollback: id check: false commit: false
De forma predeterminada, cuando se incluye el rollback: id argumento, el módulo revierte la configuración, realiza una comprobación de confirmación y confirma los cambios. Debe incluir el commit: false argumento para comparar solo las configuraciones y evitar que el módulo cargue y confirme la configuración de reversión. Incluir el check: false argumento evita la operación de comprobación de confirmación innecesaria.
El módulo devuelve las diff claves y diff_lines . Las claves contienen las diferencias de configuración entre la configuración activa y la anterior en formato diff o patch.
-
diff— diccionario que contiene una sola clave denominadapreparedy su valor, que es una sola cadena multilínea que contiene las diferencias. -
diff_lines: lista de cadenas de una sola línea que contienen las diferencias.
Para guardar las diferencias en un archivo del nodo de control local de Ansible, incluya el diffs_file argumento y defina la ruta absoluta o relativa del archivo de salida. Si incluye el diffs_file argumento pero omite el directorio, los archivos se guardan en el directorio del manual. Si compara las configuraciones en varios dispositivos, el diffs_file 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.
En el siguiente manual se solicita el identificador de reversión de una configuración confirmada anteriormente. A continuación, el manual compara la configuración confirmada con la configuración de reversión especificada, guarda la comparación en un archivo con nombre único y también imprime la respuesta a la salida estándar.
---
- name: "Compare configurations"
hosts: dc1
connection: local
gather_facts: no
vars_prompt:
- name: "ROLLBACK"
prompt: "Rollback ID to compare with active configuration"
private: no
tasks:
- name: "Compare active to previous configuration"
juniper.device.config:
diff: true
rollback: "{{ ROLLBACK }}"
check: false
commit: false
diffs_file: "{{ inventory_hostname }}-diff-rollback-{{ ROLLBACK }}"
register: response
- name: "Print diff"
ansible.builtin.debug:
var: response
user@ansible-cn:~$ ansible-playbook configuration-compare-to-rollback.yaml
Rollback ID to compare with active configuration: 2
PLAY [Compare configurations] *************************************************
TASK [Compare active to previous configuration] ******************************
changed: [dc1a.example.net]
TASK [Print diff] ************************************************************
ok: [dc1a.example.net] => {
"response": {
"changed": true,
"diff": {
"prepared": "\n[edit system services]\n- netconf {\n- ssh;\n- }\n"
},
"diff_lines": [
"",
"[edit system services]",
"- netconf {",
"- ssh;",
"- }"
],
"failed": false,
"msg": "Configuration has been: opened, rolled back, diffed, closed."
}
}
PLAY RECAP ********************************************************************
dc1a.example.net : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
user@ansible-cn:~$ cat dc1a.example.net-diff-rollback-2
[edit system services]
- netconf {
- ssh;
- }