ansible.netcommon.netconf_get 模块 – 从支持 NETCONF 的网络设备获取配置/状态数据。

注意

此模块是 ansible.netcommon 集合 (版本 7.1.0) 的一部分。

如果您使用的是 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查是否已安装它,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install ansible.netcommon。您需要其他要求才能使用此模块,请参阅 要求 获取详细信息。

要在 playbook 中使用它,请指定:ansible.netcommon.netconf_get

ansible.netcommon 1.0.0 中的新增功能

概要

  • 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 命名空间。选项值 *native* 将以原生 Python 字典形式返回数据。

选项

  • "json"

  • "pretty"

  • "xml"

  • "native"

filter

任意

此参数指定用作筛选器的字符串,以限制从远程设备检索的数据部分。如果未指定此选项,则根据 source 选项的值,结果中将返回整个配置或状态数据。filter 值可以是 XML 字符串或 XPath 或 JSON 字符串或原生 Python 字典,如果筛选器采用 XPath 格式,则远程主机上运行的 NETCONF 服务器应支持 xpath 功能,否则将导致错误。如果筛选器采用 JSON 格式,则控制节点上应安装 xmltodict 库以进行 JSON 到 XML 的转换。

lock

字符串

指示模块显式锁定指定为 source 的数据存储。如果未定义 *source*,则将锁定 *running* 数据存储。通过设置选项值为 *always*,它将显式锁定 source 选项中提到的数据存储。通过设置选项值为 *never*,它将不会锁定 source 数据存储。值 *if-supported* 允许更好地与不支持所有受支持数据存储的 (un)lock 操作的 NETCONF 服务器互操作。

选项

  • "never" ← (默认)

  • "always"

  • "if-supported"

source

字符串

此参数指定应从中获取配置数据的数 据存储。有效值为 *running*、*candidate* 和 *startup*。如果未设置 source 值,则响应中将从运行数据存储返回配置和状态信息。

选项

  • "running"

  • "candidate"

  • "startup"

备注

注意

  • 此模块要求在被管理的远程设备上启用 NETCONF 系统服务。

  • 此模块支持使用 connection=netconf

  • 此模块在 ansible_network_os 网络平台上受支持。有关详细信息,请参阅:ref:`网络平台选项 <platform_options>`。

示例

- 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

复杂

根据 display 选项的值,将返回从 RPC 响应转换的 XML 到 JSON 格式的数据集(类型为 dict),或漂亮的 XML 字符串响应(人类可读),或已删除命名空间的 XML 字符串响应。

返回:如果选择的显示格式为 *json*,则将其作为 dict 类型返回,转换是使用 jxmlease python 库完成的。如果选择的显示格式为 *native*,则将其作为 dict 类型返回,转换是使用 xmltodict python 库完成的。如果显示格式为 xml 或 pretty,则将其作为字符串返回,低级错误(例如 action 插件)除外。

formatted_output

字符串

包含根据 display 格式中的值从远程主机接收到的格式化响应。

返回:成功

stdout

字符串

包含从底层 ncclient 库接收的配置或状态数据的原始 XML 字符串。

返回:始终返回,低级错误(例如 action 插件)除外

示例: "..."

stdout_lines

列表 / 元素=字符串

stdout 的值拆分为列表

返回:始终返回,低级错误(例如 action 插件)除外

示例: ["...", "..."]

作者

  • Ganesh Nalawade (@ganeshrn)

  • Sven Wisotzky (@wisotzky)