使用 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 中为列表中的每个字符串添加前缀。