首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带子元素滤波器的Fortinet地址循环

带子元素滤波器的Fortinet地址循环
EN

Stack Overflow用户
提问于 2022-10-21 18:30:59
回答 1查看 55关注 0票数 0

我是Ansible的newby,正在使用fortinet.fortios模块。

我和fortios_firewall_addrgrp有个问题。

我遵循上一篇文章,Loop with subelements filter,我一直试图使用它作为我的基础。

我的var有点不同,因为我希望保持尽可能干燥。我的变量中有这样一组:

代码语言:javascript
复制
address_nets:
  - name: azure_nets
    addresses:
      - member: azure-lw
        subnet: 10.37.0.0/16
      - member: azure-lw2
        subnet: 10.38.0.0/16
  - name: dan
    addresses:
      - member: dan1
        subnet: 10.41.0.0/16
      - member: dan2
        subnet: 10.40.0.0/16        

因此,基本上防火墙地址组看起来应该是:

代码语言:javascript
复制
   azure_nets
    member: azure-lw
    member: azure-lw2
   dan
    member: dan1
    member: dan2

我的模块是:

代码语言:javascript
复制
  - 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.name] | product(item.addresses) | map('join', '-') | map('community.general.dict_kv', 'member') }}"
    loop: "{{ address_nets }}"

如果我以调试的形式运行它,我会得到以下内容:

代码语言:javascript
复制
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_nets-{'member': 'azure-lw', 'subnet': '10.37.0.0/16'}"
        },
        {
            "name": "azure_nets-{'member': 'azure-lw2', 'subnet': '10.38.0.0/16'}"
        }
    ]
}
ok: [wg-cat-fw] => (item={'name': 'dan', 'addresses': [{'member': 'dan1', 'subnet': '10.41.0.0/16'}, {'member': 'dan2', 'subnet': '10.40.0.0/16'}]}) => {
    "msg": [
        {
            "name": "dan-{'member': 'dan1', 'subnet': '10.41.0.0/16'}"
        },
        {
            "name": "dan-{'member': 'dan2', 'subnet': '10.40.0.0/16'}"
        }
    ]
}

关于如何将其转换为所需输出的任何想法,将如下所示:

代码语言:javascript
复制
ok: [localhost] => (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"
        }
    ]
}
ok: [localhost] => (item={'name': 'dan', 'addresses': [{'member': 'dan1', 'subnet': '10.41.0.0/16'}, {'member': 'dan2', 'subnet': '10.40.0.0/16'}]}) => {
    "msg": [
        {
            "name": "dan1"
        },
        {
            "name": "dan2"
        }
    ]
}

下面是模块的输出:

代码语言:javascript
复制
TASK [Address Groups] ***************************************************************************************************************************************************************************************************************************************************failed: [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'}]}) => {"ansible_loop_var": "item", "changed": false, "item": {"addresses": [{"member": "azure-lw", "subnet": "10.37.0.0/16"}, {"member": "azure-lw2", "subnet": "10.38.0.0/16"}], "name": "azure_nets"}, "msg": "Unsupported parameters for (fortios_firewall_addrgrp) module: firewall_addrgrp.member.member. Supported parameters include: access_token, state, vdom, ********_log, firewall_addrgrp, member_state, member_path."}
failed: [wg-cat-fw] (item={'name': 'dan', 'addresses': [{'member': 'dan1', 'subnet': '10.41.0.0/16'}, {'member': 'dan2', 'subnet': '10.40.0.0/16'}]}) => {"ansible_loop_var": "item", "changed": false, "item": {"addresses": [{"member": "dan1", "subnet": "10.41.0.0/16"}, {"member": "dan2", "subnet": "10.40.0.0/16"}], "name": "dan"}, "msg": "Unsupported parameters for (fortios_firewall_addrgrp) module: firewall_addrgrp.member.member. Supported parameters include: member_state, member_path, access_token, state, ********_log, firewall_addrgrp, vdom."}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-22 08:43:32

循环过addresses \\映射属性member \\用member键从输出中创建字典

代码语言:javascript
复制
- debug:
    msg: "{{ item.addresses | map(attribute='member') | map('community.general.dict_kv', 'member') }}"
  loop: "{{ address_nets }}"
代码语言:javascript
复制
ok: [localhost] => (item={'name': 'azure_nets', 'addresses': [{'member': 'azure-lw', 'subnet': '10.37.0.0/16'}, {'member': 'azure-lw2', 'subnet': '10.38.0.0/16'}]}) => {
    "msg": [
        {
            "member": "azure-lw"
        },
        {
            "member": "azure-lw2"
        }
    ]
}
ok: [localhost] => (item={'name': 'dan', 'addresses': [{'member': 'dan1', 'subnet': '10.41.0.0/16'}, {'member': 'dan2', 'subnet': '10.40.0.0/16'}]}) => {
    "msg": [
        {
            "member": "dan1"
        },
        {
            "member": "dan2"
        }
    ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74157861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档