ansible.netcommon.netconf_get – Получение данных конфигурации/состояния из сетевых устройств, поддерживающих NETCONF.
Примечание
Этот плагин входит в коллекцию ansible.netcommon (версия 1.4.1).
Для его установки используйте: 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 Python. Если формат отображения выбран как native, он возвращается как тип dict, и преобразование выполняется с помощью библиотеки xmltodict Python. Если формат отображения xml или pretty, он возвращается как строка, за исключением ошибок низкого уровня (например, ошибки плагина действия). | В зависимости от значения параметра display будет возвращен набор преобразованного XML в формате JSON из ответа RPC с типом dict или красиво отформатированный XML-ответ (удобный для чтения) или ответ с удалёнными пространствами имён из XML-строки. | |
| formatted_output строка | успешно | Содержит отформатированный ответ, полученный от удалённого хоста в соответствии со значением параметра display format. | |
| stdout строка | всегда, за исключением ошибок низкого уровня (например, ошибки плагина действия) | Необработанная XML-строка, содержащая данные конфигурации или состояния, полученные из базовой библиотеки ncclient. Пример: ... | |
| stdout_lines список / элементы=строка | всегда, за исключением ошибок низкого уровня (например, ошибки плагина действия) | Значение stdout, разделенное на список Пример: ['...', '...'] | |
Авторы
- Ganesh Nalawade (@ganeshrn)
- Sven Wisotzky (@wisotzky)
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/ansible/netcommon/netconf_get_module.html