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 }}"
错误原因解析
原逻辑的问题:你之前用
[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。修正逻辑说明:
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
相关产品推荐
相关产品推荐

