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)
参数
参数 |
注释 |
---|---|
序列化设备输出时使用的编码方案。选项 json 将输出序列化为 JSON 数据。如果选项值为 json,则需要在控制节点上安装 jxmlease。选项 pretty 类似于接收到的 XML 响应,但使用的是人类可读的格式(空格、换行符)。选项值 xml 类似于接收到的 XML 响应,但会删除所有 XML 命名空间。选项值 *native* 将以原生 Python 字典形式返回数据。 选项
|
|
此参数指定用作筛选器的字符串,以限制从远程设备检索的数据部分。如果未指定此选项,则根据 |
|
指示模块显式锁定指定为 选项
|
|
此参数指定应从中获取配置数据的数 据存储。有效值为 *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",
返回值
常见的返回值已在 此处 记录,以下是此模块特有的字段
键 |
描述 |
---|---|
根据 display 选项的值,将返回从 RPC 响应转换的 XML 到 JSON 格式的数据集(类型为 dict),或漂亮的 XML 字符串响应(人类可读),或已删除命名空间的 XML 字符串响应。 返回:如果选择的显示格式为 *json*,则将其作为 dict 类型返回,转换是使用 jxmlease python 库完成的。如果选择的显示格式为 *native*,则将其作为 dict 类型返回,转换是使用 xmltodict python 库完成的。如果显示格式为 xml 或 pretty,则将其作为字符串返回,低级错误(例如 action 插件)除外。 |
|
包含根据 display 格式中的值从远程主机接收到的格式化响应。 返回:成功 |
|
包含从底层 ncclient 库接收的配置或状态数据的原始 XML 字符串。 返回:始终返回,低级错误(例如 action 插件)除外 示例: |
|
stdout 的值拆分为列表 返回:始终返回,低级错误(例如 action 插件)除外 示例: |