ansible.netcommon.netconf_get – Получение данных конфигурации/состояния с сетевых устройств, поддерживающих NETCONF.
Примечание
Этот плагин входит в коллекцию ansible.netcommon (версия 1.5.0).
Для его установки используйте: ansible-galaxy collection install ansible.netcommon.
Для использования в плейбуке укажите: ansible.netcommon.netconf_get.
Новое в версии 1.0.0: из ansible.netcommon
Описание
- NETCONF — это протокол управления сетями, разработанный и стандартизированный IETF. Он документирован в RFC 6241.
- Этот модуль позволяет пользователю получать данные конфигурации и состояния с сетевых устройств, поддерживающих NETCONF.
Требования
Ниже приведены требования к хосту, на котором выполняется этот модуль.
- ncclient (>=v0.5.2)
- jxmlease (для display=json)
- xmltodict (для display=native)
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| display строка |
| Схема кодирования, используемая при сериализации выходных данных устройства. Вариант json сериализует вывод как данные JSON. Если значение варианта json, требуется установка jxmlease на управляющем узле. Вариант pretty аналогичен полученному XML-ответу, но использует удобочитаемый формат (пробелы, новые строки). Вариант xml аналогичен полученному XML-ответу, но удаляет все XML-префиксы. |
| filter сырой | Этот аргумент задаёт строку, которая используется как фильтр для ограничения частей данных, которые должны быть извлечены с удалённого устройства. Если этот параметр не задан, в результате возвращаются все данные конфигурации или состояния в зависимости от значения параметра source. Значение filter может быть либо XML-строкой, либо XPath-выражением, либо JSON-строкой, либо обычным словарем Python. Если фильтр указан в формате XPath, сервер NETCONF на удалённом узле должен поддерживать XPath, в противном случае произойдёт ошибка. Если фильтр находится в формате JSON, библиотека xmltodict должна быть установлена на управляющем узле для преобразования JSON в XML. | |
| lock строка |
| Инструктирует модуль явно заблокировать хранилище данных, указанное как source. Если не определён параметр source, будет заблокировано хранилище running. Установив значение всегда, модуль будет явно блокировать хранилище данных, указанное в параметре source. Установив значение никогда, модуль не будет блокировать хранилище данных source. Значение если_поддерживается позволяет лучше взаимодействовать с серверами NETCONF, которые не поддерживают операции (раз)блокировки для всех поддерживаемых хранилищ данных. |
| source строка |
| Этот аргумент задаёт хранилище данных, из которого должны извлекаться данные конфигурации. Допустимые значения — running, candidate и startup. Если значение source не задано, в ответе возвращаются конфигурационная и системная информация из хранилища running. |
Примечания
Примечание
- Этот модуль требует, чтобы служба NETCONF была включена на удалённом управляемом устройстве.
- Этот модуль поддерживает использование connection=netconf
- Этот модуль поддерживается на
ansible_network_osсетевых платформах. Подробности см. в разделе Параметры сетевых платформ.
Примеры
- name: Get running configuration and state data
ansible.netcommon.netconf_get:
- name: Get configuration and state data from startup datastore
ansible.netcommon.netconf_get:
source: startup
- name: Get system configuration data from running datastore state (junos)
ansible.netcommon.netconf_get:
source: running
filter: <configuration><system></system></configuration>
- name: Get configuration and state data in JSON format
ansible.netcommon.netconf_get:
display: json
- name: get schema list using subtree w/ namespaces
ansible.netcommon.netconf_get:
display: json
filter: <netconf-state xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring"><schemas><schema/></schemas></netconf-state>
lock: never
- name: get schema list using xpath
ansible.netcommon.netconf_get:
display: xml
filter: /netconf-state/schemas/schema
- name: get interface configuration with filter (iosxr)
ansible.netcommon.netconf_get:
display: pretty
filter: <interface-configurations xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg"></interface-configurations>
lock: if-supported
- name: Get system configuration data from running datastore state (junos)
ansible.netcommon.netconf_get:
source: running
filter: <configuration><system></system></configuration>
lock: if-supported
- name: Get complete configuration data from running datastore (SROS)
ansible.netcommon.netconf_get:
source: running
filter: <configure xmlns="urn:nokia.com:sros:ns:yang:sr:conf"/>
- name: Get complete state data (SROS)
ansible.netcommon.netconf_get:
filter: <state xmlns="urn:nokia.com:sros:ns:yang:sr:state"/>
- name: "get configuration with json filter string and native output (using xmltodict)"
netconf_get:
filter: |
{
"interface-configurations": {
"@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg",
"interface-configuration": null
}
}
display: native
- name: Define the Cisco IOSXR interface filter
set_fact:
filter:
interface-configurations:
"@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg"
interface-configuration: null
- name: "get configuration with native filter type using set_facts"
ansible.netcommon.netconf_get:
filter: "{{ filter }}"
display: native
register: result
- name: "get configuration with direct native filter type"
ansible.netcommon.netconf_get:
filter: {
"interface-configurations": {
"@xmlns": "http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg",
"interface-configuration": null
}
}
display: native
register: result
# Make a round-trip interface description change, diff the before and after
# this demonstrates the use of the native display format and several utilities
# from the ansible.utils collection
- name: Define the openconfig interface filter
set_fact:
filter:
interfaces:
"@xmlns": "http://openconfig.net/yang/interfaces"
interface:
name: Ethernet2
- name: Get the pre-change config using the filter
ansible.netcommon.netconf_get:
source: running
filter: "{{ filter }}"
display: native
register: pre
- name: Update the description
ansible.utils.update_fact:
updates:
- path: pre.output.data.interfaces.interface.config.description
value: "Configured by ansible {{ 100 | random }}"
register: updated
- name: Apply the new configuration
ansible.netcommon.netconf_config:
content:
config:
interfaces: "{{ updated.pre.output.data.interfaces }}"
- name: Get the post-change config using the filter
ansible.netcommon.netconf_get:
source: running
filter: "{{ filter }}"
display: native
register: post
- name: Show the differences between the pre and post configurations
ansible.utils.fact_diff:
before: "{{ pre.output.data|ansible.utils.to_paths }}"
after: "{{ post.output.data|ansible.utils.to_paths }}"
# TASK [Show the differences between the pre and post configurations] ********
# --- before
# +++ after
# @@ -1,11 +1,11 @@
# {
# - "@time-modified": "2020-10-23T12:27:17.462332477Z",
# + "@time-modified": "2020-10-23T12:27:21.744541708Z",
# "@xmlns": "urn:ietf:params:xml:ns:netconf:base:1.0",
# "interfaces.interface.aggregation.config['fallback-timeout']['#text']": "90",
# "interfaces.interface.aggregation.config['fallback-timeout']['@xmlns']": "http://arista.com/yang/openconfig/interfaces/augments",
# "interfaces.interface.aggregation.config['min-links']": "0",
# "interfaces.interface.aggregation['@xmlns']": "http://openconfig.net/yang/interfaces/aggregate",
# - "interfaces.interface.config.description": "Configured by ansible 56",
# + "interfaces.interface.config.description": "Configured by ansible 67",
# "interfaces.interface.config.enabled": "true",
# "interfaces.interface.config.mtu": "0",
# "interfaces.interface.config.name": "Ethernet2",
Возвращаемые значения
Общие возвращаемые значения документированы здесь, следующие поля уникальны для этого модуля:
| Ключ | Возвращаемое | Описание | |
|---|---|---|---|
| output сложное | Если формат вывода выбран как json, он возвращается как словарь типа dict, и преобразование выполняется с помощью библиотеки jxmlease. Если формат вывода выбран как native, он возвращается как словарь типа dict, и преобразование выполняется с помощью библиотеки xmltodict. Если формат вывода xml или pretty, он возвращается как строка, за исключением ошибок низкого уровня (например, ошибки плагина действия). | В зависимости от значения параметра display возвращается либо набор преобразованных XML-данных в формате JSON (тип dict) из ответа RPC, либо красивый XML-строковый ответ (удобный для чтения) либо ответ с удалёнными XML-префиксами. | |
| formatted_output строка | успех | Содержит отформатированный ответ, полученный от удалённого узла в соответствии со значением параметра формата вывода. | |
| stdout строка | всегда, кроме ошибок низкого уровня (таких как плагин действия) | Необработанная XML-строка, содержащая данные конфигурации или состояния, полученные из библиотеки ncclient. Пример: ... | |
| stdout_lines список / элементы=строка | всегда, кроме ошибок низкого уровня (таких как плагин действия) | Значение stdout, разделённое на список Пример: ['...', '...'] | |
Авторы
- Ganesh Nalawade (@ganeshrn)
- Sven Wisotzky (@wisotzky)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/netcommon/netconf_get_module.html