You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:36:03