IOS 上的 Ansible 可循环遍历接口子集

IOS 上的 Ansible 可循环遍历接口子集

使用 ansible 2.9.9 在 Windows 10 和 Ubuntu 上运行 WISL。我是 Ansible 新手。我在 Cisco 设备上执行 show 以生成运行给定网络协议的接口。然后我想提取接口并在其上执行命令。在这种情况下关闭协议。理想情况下,show 命令可以轻松更改。对于许多协议,这是我检查此状态的一致方法。Ansible 可能以多种方式存储此协议信息。也许有事实?我在以下位置找到了使用 ios_config 的示例https://docs.ansible.com/ansible/latest/modules/ios_config_module.html但接口是硬编码的,如下面的辅助示例所示:

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: "{{ item }}"
  with_items:
    - interface Ethernet1
    - interface Ethernet2
    - interface GigabitEthernet1

我的尝试如下,它给了我两个具有多播活动的接口。但接下来如何循环对这些接口采取行动?:

  tasks:
  - name: Gather interfaces running PIM
    ios_command:
      commands:
        - show ip pim interface
    register: pim

  - name: Write PIM interface data to file
    copy:
      content: "{{pim.stdout_lines[0]}}"
      dest: "backups/{{ansible_alias}}-pim-interfaces.txt"


  - name: Glean PIM INTF's
    shell: cat backups/{{ ansible_alias }}-pim-interfaces.txt | tr ' ' '\n' | grep 'GigabitEthernet'
    register: pim

  - debug: msg='{{ pim.stdout_lines }}'


TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [10.239.121.2] => {
    "msg": [
        "GigabitEthernet0/0/0",
        "GigabitEthernet0/0/1.125"
    ]
}

非常感谢您的指导。

答案1

这是你使用loop(自 2.5 版本以来,这也导致所有with_指令被弃用,尽管许多文档尚未反映这一点)。

修改 Ansible 示例可得到:

- name: configure ip helpers on multiple interfaces
  ios_config:
    lines:
      - ip helper-address 172.26.1.10
      - ip helper-address 172.26.3.8
    parents: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

仅检查输出:

- debug:
    var: item
  loop: '{{ ["interface "]|product(pim.stdout_lines)|map("join")|list }}'

loop是修改自如何在 Ansible 中为列表中的每个字符串添加前缀

相关内容