Ansible 网络资源 Purge 参数
Ansible 网络资源 Purge 参数
Red Hat Ansible 网络自动化一直是 Red Hat Ansible Automation Platform 中一个受欢迎的领域。我们不断开发额外的资源模块,使网络设备的自动化更容易、更易于上手,无论对于新手还是专家都是如此。这些资源模块在多个网络供应商之间提供了统一的体验。资源模块有七个主要的 state 参数:merged、replaced、overridden、deleted、gathered、rendered 和 parsed。Ansible 网络团队正在为这些资源模块的工具箱中添加一个新的参数 purged。本博文将介绍 purged 参数,并通过一个实际示例展示其用例。
在本例中,我们将使用两个 BGP 资源模块来配置 Cisco 网络设备。我们将使用 bgp_global
模块和 bgp_address_family
模块。BGP 配置在这两个单独的模块之间进行拆分,以简化配置和相关的数据模型。
让我们从数据模型开始
bgp_global: as_number: '65000' bgp: log_neighbor_changes: true router_id: address: 192.168.1.1 neighbor: - activate: true address: 10.200.200.2 remote_as: 65001 bgp_address_family: address_family: - afi: ipv4 neighbor: - activate: true address: 10.200.200.2 network: - address: 10.25.25.0 mask: 255.255.255.0 - address: 10.25.26.0 mask: 255.255.255.0 - address: 10.100.100.0 mask: 255.255.255.0 - address: 10.200.200.0 mask: 255.255.255.0 - address: 172.16.0.0 - address: 192.168.1.1 mask: 255.255.255.255 as_number: '65000’
注意:如果您不熟悉资源模块,可以使用state: gathered参数快速创建这些数据模型,以读取现有的(已配置的)网络设备,并将配置保存到结构化数据(例如 YAML)中。
我们可以使用简单的 Ansible Playbook 将此数据模型配置推送到我们的 Cisco 网络设备
--- - name: configure BGP for blog hosts: cisco gather_facts: false tasks: - name: Use the bgp_global resource module cisco.ios.ios_bgp_global: config: "{{ bgp_global }}" - name: Use the bgp_address_family cisco.ios.ios_bgp_address_family: config: "{{ bgp_address_family }}
您可以直接从Github复制此 playbook。
要执行 playbook,
ansible-playbook merge_ios_bgp.yaml
输出将类似于以下内容
最后,让我们看看在 Cisco IOS 网络设备上生成的配置
rtr1#sh run | s router bgp router bgp 65000 bgp router-id 192.168.1.1 bgp log-neighbor-changes neighbor 10.200.200.2 remote-as 65001 ! address-family ipv4 network 10.25.25.0 mask 255.255.255.0 network 10.25.26.0 mask 255.255.255.0 network 10.100.100.0 mask 255.255.255.0 network 10.200.200.0 mask 255.255.255.0 network 172.16.0.0 network 192.168.1.1 mask 255.255.255.255 neighbor 10.200.200.2 activate exit-address-family
所以最后,最简单的方法是使用我们新的state: purged
参数:您可以使用一项任务删除设备上的整个 bgp 配置。这在实验室网络中或当您希望从干净的配置状态开始时可能经常会用到。
- name: Use the bgp_global resource module cisco.ios.ios_bgp_global: state: purged
purged 和 deleted 之间的区别
state: deleted
参数非常相似,但是它有两个与 purged 不同的主要用途。Deleted 可以使用 config 参数删除指定的配置。如果未指定配置,它将删除整个资源(例如,如果使用 bgp_address_family 模块,则删除所有地址族配置)。但是,BGP 配置由多个资源模块组成。这意味着您需要运行多个state: deleted
的模块才能删除所有 BGP 配置。state: purged
参数允许您使用bgp_global
资源模块删除所有 BGP 配置,从而简化您的 Ansible Playbook。
现在,我们可以执行 playbook 并手动检查配置以查看其执行的操作
在上面的屏幕截图(来自 Ansible Automation Platform Web UI)中,您可以看到 playbook 成功运行,并且 BGP 配置现已删除。
检查 Cisco 路由器上的运行配置将反映此更改
rtr1#sh run | s router bgp rtr1#
为什么我会选择其中一个而不是另一个?
许多人正在自动化现有的网络,甚至是在手动更改和自动化更改混合进行的网络。您可能希望从多个设备中删除所有 BGP 配置,而这些设备没有设置 SoT(真相来源)。这允许 playbook 作者使用一项任务来销毁仅 BGP 配置,而不是使用多模块方法。这只是您资源模块工具箱中的另一个工具!
接下来我该去哪里?
本博文中所有示例都可以在Github 上找到。