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

Ansible fortios_firewall_addrgrp模块地址组配置问题求助

修正fortios_firewall_addrgrp的地址组配置问题

你的问题核心是生成地址组成员的逻辑错误,导致传递给模块的参数不符合要求。下面是修正后的代码和解释:

修正后的Playbook代码

- name: Address Groups 
  fortios_firewall_addrgrp:
    vdom:  "{{ vdom }}"
    access_token: "{{ token }}"
    state: present
    firewall_addrgrp:
      name: "{{ item.name }}"
      member: "{{ grp_members }}"
      allow_routing: "enable"
  vars:
    grp_members: "{{ item.addresses | map(attribute='member') | map('community.general.dict_kv', 'name') | list }}"
  loop: "{{ address_nets }}"

错误原因解析

  1. 原逻辑的问题:你之前用[item.name] | product(item.addresses) | map('join', '-')完全没必要,这会把组名和整个address字典拼接成奇怪的字符串,再用dict_kv('member')生成{"member": "xxx"}结构的字典。但fortios_firewall_addrgrp模块要求member字段是包含name键的字典列表,不是带member键的字典,所以才会报错Unsupported parameters: firewall_addrgrp.member.member。

  2. 修正逻辑说明:

    • item.addresses | map(attribute='member'):直接从每个address项里提取member字段的值(也就是你要的成员名,比如azure-lw)
    • map('community.general.dict_kv', 'name'):把每个成员名转换成{"name": "成员名"}的字典结构,这正是模块需要的格式
    • | list:确保最终输出是列表类型

验证debug结果

执行修正后的逻辑,debug输出会和你预期的一致:

ok: [wg-cat-fw] => (item={'name': 'azure_nets', 'addresses': [{'member': 'azure-lw', 'subnet': '10.37.0.0/16'}, {'member': 'azure-lw2', 'subnet': '10.38.0.0/16'}]}) => {
    "msg": [
        {
            "name": "azure-lw"
        },
        {
            "name": "azure-lw2"
        }
    ]
}

这样就能正确生成你需要的地址组结构,每个组包含对应的成员。

内容的提问来源于stack exchange,提问作者Dan Carlton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:26:25