Ansible如何获取Unify控制器JSON配置并修改指定端口VLAN后回发
Unifi 交换机Ansible全量VLAN配置修改方案
实现逻辑
- 从拉取到的交换机配置中提取完整的
port_overrides列表 - 遍历列表,仅修改
port_idx=2对应条目的portconf_id值,其余配置保持不变 - 将修改后的完整
port_overrides列表作为PUT请求的body回发,避免其余配置丢失
具体修改步骤
1. 新增配置修改任务
在原有Get current config任务之后,新增set_fact任务生成修改后的端口配置列表:
- name: 定义目标portconf_id(替换为你实际需要的VLAN对应ID) set_fact: target_portconf_id: "60accb9b64542d80774123d1" # 此处即为你需要设置的X值 - name: 生成修改后的完整port_overrides列表 set_fact: modified_port_overrides: >- {{ switchConf.json.data[0].port_overrides | map('combine', {'portconf_id': target_portconf_id} if item.port_idx == 2 else {} ) | list }} loop: "{{ switchConf.json.data[0].port_overrides }}"
如果你的data数组下有多个交换机,要精准匹配你要修改的设备,可改用以下写法(替换设备ID为你PUT URL里的60acc79964542d80774123b5):
- name: 生成修改后的完整port_overrides列表(多设备场景) set_fact: modified_port_overrides: >- {{ (switchConf.json.data | selectattr('id', 'eq', '60acc79964542d80774123b5') | first).port_overrides | map('combine', {'portconf_id': target_portconf_id} if item.port_idx == 2 else {} ) | list }} loop: "{{ (switchConf.json.data | selectattr('id', 'eq', '60acc79964542d80774123b5') | first).port_overrides }}"
2. 修改原有PUT请求的body
把原来注释掉的body替换为修改后的全量配置即可:
- name: Set port 2 to CLIENTVLAN uri: url: https://{{ url }}/api/s/default/rest/device/60acc79964542d80774123b5/ method: PUT body_format: json body: port_overrides: "{{ modified_port_overrides }}" headers: Cookie: "{{ login.cookies_string }}" validate_certs: false register: portConf
注意事项
target_portconf_id可根据你的需求替换为禁用VLAN的ID或者其他VLAN对应的ID- 请确保你拉取配置的交换机和你PUT请求的设备ID一致,避免修改错设备
validate_certs: false仅适用于测试环境,生产环境建议配置合法证书后开启证书校验
内容的提问来源于stack exchange,提问作者xentity
相关产品推荐
相关产品推荐

