我们希望听到您的声音!帮助我们深入了解 Ansible 生态系统的现状。
参与 2024 年 Ansible 项目调查

Ansible 网络资源 Purge 参数

Ansible 网络资源 Purge 参数

Red Hat Ansible 网络自动化一直是 Red Hat Ansible Automation Platform 中一个受欢迎的领域。我们不断开发额外的资源模块,使网络设备的自动化更容易、更易于上手,无论对于新手还是专家都是如此。这些资源模块在多个网络供应商之间提供了统一的体验。资源模块有七个主要的 state 参数:merged、replaced、overridden、deleted、gathered、rendered 和 parsed。Ansible 网络团队正在为这些资源模块的工具箱中添加一个新的参数 purged。本博文将介绍 purged 参数,并通过一个实际示例展示其用例。

network purge blog one

在本例中,我们将使用两个 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

输出将类似于以下内容

network purge blog two

最后,让我们看看在 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 并手动检查配置以查看其执行的操作

network purge blog three

在上面的屏幕截图(来自 Ansible Automation Platform Web UI)中,您可以看到 playbook 成功运行,并且 BGP 配置现已删除。

检查 Cisco 路由器上的运行配置将反映此更改

rtr1#sh run | s router bgp
rtr1#

为什么我会选择其中一个而不是另一个?

许多人正在自动化现有的网络,甚至是在手动更改和自动化更改混合进行的网络。您可能希望从多个设备中删除所有 BGP 配置,而这些设备没有设置 SoT(真相来源)。这允许 playbook 作者使用一项任务来销毁仅 BGP 配置,而不是使用多模块方法。这只是您资源模块工具箱中的另一个工具!

接下来我该去哪里?

本博文中所有示例都可以在Github 上找到