如何在Ansible中通过多变量嵌套循环配置Cisco IOS以太网通道?
解决Ansible遍历EtherChannel成员变量的问题
你的变量结构和任务配置存在两处关键问题:一是loop的遍历对象没匹配变量的嵌套结构,二是没有自动遍历members列表生成成员配置项。以下是修正后的完整配置:
修正后的Ansible任务
tasks: - name: configure etherchannel cisco.ios.ios_lag_interfaces: config: - name: "Port-channel{{ item.groupid }}" members: "{{ item.members | map('community.general.dict_kv', 'member') | map('combine', {'mode': item.mode}) | list }}" loop: "{{ etherchannels.values() | flatten }}"
关键逻辑说明
调整遍历对象:
你的etherchannels是字典类型,每个键(channel1/channel2)对应的值是单元素列表(因为用了- groupid:1的写法)。用etherchannels.values() | flatten可以直接提取出每个Channel的配置字典(跳过外层列表),让loop能正确拿到groupid、mode和members字段。自动生成成员配置:
map('community.general.dict_kv', 'member'):把members列表里的每个接口字符串(比如Ethernet1/0)转换成{"member": "Ethernet1/0"}格式的字典。map('combine', {'mode': item.mode}):将上面的字典与当前Channel的mode字段合并,生成每个成员的完整配置(比如{"member": "Ethernet1/0", "mode": "on"})。- 最后用
list把处理后的结果转成列表,正好匹配ios_lag_interfaces模块要求的members格式。
验证效果
执行任务后,会自动生成你预期的配置结构:
- 对Port-channel1,自动遍历
Ethernet1/0、Ethernet1/2生成成员项,统一应用mode: on - 对Port-channel2,自动遍历
Ethernet2/0、Ethernet2/2生成成员项,统一应用mode: on
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

