Spec-Zone.ru › Ansible 2.10

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
  • pretty
  • xml
  • native
Схема кодирования, используемая при сериализации выходных данных устройства. Вариант 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
Этот аргумент задаёт хранилище данных, из которого должны извлекаться данные конфигурации. Допустимые значения — 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API