如何使用Ansible将EXOS配置解析出的端口范围转换为线性列表
Ansible 端口范围转线性格式实现方案
你可以通过拆分端口字符串、分段处理范围、合并排序的逻辑完成转换,假设你通过cli_parse解析到的EXOS配置存储在变量parsed_exos_config中,参考任务如下:
--- - name: 初始化空的端口列表 set_fact: expanded_tagged_ports: [] - name: 处理带范围的端口段 set_fact: expanded_tagged_ports: "{{ expanded_tagged_ports + range(item.split('-')[0] | int, item.split('-')[1] | int + 1) | list }}" loop: "{{ parsed_exos_config['MGMT-vlan'].ports.tagged.split(',') }}" when: "'-' in item" - name: 处理单个端口 set_fact: expanded_tagged_ports: "{{ expanded_tagged_ports + [item | int] }}" loop: "{{ parsed_exos_config['MGMT-vlan'].ports.tagged.split(',') }}" when: "'-' not in item" - name: 排序后覆盖原配置的tagged字段 set_fact: parsed_exos_config: "{{ parsed_exos_config | combine({'MGMT-vlan': {'ports': {'tagged': expanded_tagged_ports | sort | join(',')}}}, recursive=True) }}"
处理完成后parsed_exos_config['MGMT-vlan'].ports.tagged就是你需要的线性端口字符串格式。
注意事项
- 上述逻辑仅适配纯数字端口编号场景,如果你设备端口为带槽位号的格式(如
1/1/2-1/1/5),需要额外修改范围生成规则 - 如果需要批量处理所有vlan的端口字段,在外层加一层遍历所有vlan的循环即可复用上述逻辑
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

