网络资源模块
Ansible 网络资源模块简化和标准化了您管理不同网络设备的方式。网络设备将配置分为适用于网络服务的各个部分(例如接口和 VLAN)。Ansible 网络资源模块利用这一点,使您可以配置网络设备配置中的子部分或资源。网络资源模块在不同的网络设备上提供一致的体验。
网络资源模块状态
您通过为要让模块执行的操作分配状态来使用网络资源模块。资源模块支持以下状态:
- merged
Ansible 将设备上的配置与任务中提供的配置合并。
- replaced
Ansible 将设备上的配置子部分替换为任务中提供的配置子部分。
- overridden
Ansible 使用任务中提供的配置覆盖设备上资源的配置。使用此状态时要谨慎,因为您可能会丢失对设备的访问权限(例如,通过覆盖管理接口配置)。
- deleted
Ansible 删除设备上的配置子部分并恢复任何默认设置。
- gathered
Ansible 显示从网络设备收集的资源详细信息,并通过结果中的
gathered
键访问。- rendered
Ansible 以设备本机格式(例如 Cisco IOS CLI)呈现任务中提供的配置。Ansible 将此呈现的配置返回到结果中的
rendered
键中。请注意,此状态不会与网络设备通信,可以在脱机状态下使用。- parsed
Ansible 将来自
running_config
选项的配置解析为 Ansible 结构化数据,并将其存储在结果中的parsed
键中。请注意,这不会从网络设备收集配置,因此此状态可以在脱机状态下使用。
使用网络资源模块
此示例根据不同的状态设置配置 Cisco IOS 设备上的 L3 接口资源。
- name: configure l3 interface cisco.ios.ios_l3_interfaces: config: "{{ config }}" state: <state>
下表显示了针对不同状态,初始资源配置如何随此任务而变化的示例。
资源起始配置 |
任务提供的配置(YAML) |
设备上的最终资源配置 |
---|---|---|
interface loopback100
ip address 10.10.1.100 255.255.255.0
ipv6 address FC00:100/64
|
config:
- ipv6:
- address: fc00::100/64
- address: fc00::101/64
name: loopback100
|
|
|
||
|
||
|
网络资源模块返回以下详细信息
before 状态 - 任务执行之前存在的资源配置。
after 状态 - 任务执行后存在于网络设备上的新资源配置。
命令 - 在设备上配置的任何命令。
ok: [nxos101] =>
result:
after:
contact: IT Support
location: Room E, Building 6, Seattle, WA 98134
users:
- algorithm: md5
group: network-admin
localized_key: true
password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69'
privacy_password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69'
username: admin
before:
contact: IT Support
location: Room E, Building 5, Seattle HQ
users:
- algorithm: md5
group: network-admin
localized_key: true
password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69'
privacy_password: '0x73fd9a2cc8c53ed3dd4ed8f4ff157e69'
username: admin
changed: true
commands:
- snmp-server location Room E, Building 6, Seattle, WA 98134
failed: false
示例:验证网络设备配置未发生变化
以下剧本使用 arista.eos.eos_l3_interfaces 模块来收集网络设备配置的子集(仅限三层接口),并验证信息是否准确且未发生变化。此剧本将 arista.eos.eos_facts 的结果直接传递给 arista.eos.eos_l3_interfaces
模块。
- name: Example of facts being pushed right back to device.
hosts: arista
gather_facts: false
tasks:
- name: grab arista eos facts
arista.eos.eos_facts:
gather_subset: min
gather_network_resources: l3_interfaces
- name: Ensure that the IP address information is accurate.
arista.eos.eos_l3_interfaces:
config: "{{ ansible_network_resources['l3_interfaces'] }}"
register: result
- name: Ensure config did not change.
assert:
that: not result.changed
示例:在网络设备上获取和更新 VLAN
此示例展示了如何使用资源模块来
检索网络设备上的当前配置。
在本地保存该配置。
更新该配置并将其应用到网络设备。
此示例使用 cisco.ios.ios_vlans
资源模块来检索和更新 IOS 设备上的 VLAN。
检索当前 IOS VLAN 配置
- name: Gather VLAN information as structured data
cisco.ios.ios_facts:
gather_subset:
- '!all'
- '!min'
gather_network_resources:
- 'vlans'
在本地存储 VLAN 配置
- name: Store VLAN facts to host_vars
copy:
content: "{{ ansible_network_resources | to_nice_yaml }}"
dest: "{{ playbook_dir }}/host_vars/{{ inventory_hostname }}"
修改存储的文件以在本地更新 VLAN 配置。
将更新的 VLAN 配置与设备上的现有配置合并
- name: Make VLAN config changes by updating stored facts on the control node.
cisco.ios.ios_vlans:
config: "{{ vlans }}"
state: merged
tags: update_config
另请参阅
- Ansible 2.9 中的网络功能
关于网络资源模块的入门博客文章。
- 深入探讨网络资源模块
深入了解网络资源模块的演示。