遍历 Ansible 剧本嵌套数组

问题描述 投票:0回答:1

嗨,我在遍历我的 json 文件时遇到问题,但它遍历了所有 topicPermissions 而不仅仅是每个用户的主题。

理想情况下它会循环并创建这样的东西

用户:拉里

  • 主题:TopicX

  • 权限:阅读、描述

  • 主题:主题Y

  • 权限:写,描述

然后继续

用户:Tommy.......等等

- name: Create ACL for each user
  vars:
    my_json_data: "{{ lookup('file', 'test.json') }}"
  shell: "rpk acl create --allow-principal {{ item.0.id }} --operation {{ item.1.permissions }} --topic {{ item.1.topic }}"
  with_nested:
    - "{{ my_json_data.user }}"
    - "{{ my_json_data.user | json_query('[].topicPermissions[].{permissions: permissions, topic: topic}') }}"
  when: item.1.permissions is defined and item.1.topic is defined

这是我的 Json 文件

{
    "admin":[
       {
          "roleId": "placeholder",
          "secretPath": "placeholder",
          "vaultAddr": "placeholder",
          "brokers": "placeholder",
          "containerName": "placeholder"
       }
    ],
    "topicsToCreate":[
       "TopicX", "TopicY", "TopicZ"
    ],
    "user":[
       {
       "id":"Larry",
       "userpassword":"placeholder",
       "consumerGroupPermissions":[
          {
             "groupId":"Apple",
             "groupPermissions":"read,describe"
          }
       ],
       "topicPermissions":[
          {
             "topic":"TopicX",
             "permissions":"read,describe"
          },
          {
             "topic":"TopicY",
             "permissions":"write,describe"
          }
       ]
       },
       {
          "id":"Tommy",
          "userpassword":"placeholder",
          "consumerGroupPermissions":[
             {
                "groupId":"Apple",
                "groupPermissions":"read,write,describe"
             }
          ],
          "topicPermissions":[
             {
                "topic":"TopicZ",
                "permissions":"read,write,describe"
             },
             {
                "topic":"TopicY",
                "permissions":"write,describe"
             },
             {
                "topic":"TopicX",
                "permissions":"read,describe"
             }
          ]
      }
    ]
 }
 
 

知道我做错了什么吗?

- name: Create ACL for each user
  vars:
    my_json_data: "{{ lookup('file', 'test.json') }}"
  shell: "rpk acl create --allow-principal {{ item.0.id }} --operation {{ item.1.permissions }} --topic {{ item.1.topic }}"
  with_nested:
    - "{{ my_json_data.user }}"
    - "{{ my_json_data.user | json_query('[].topicPermissions[].{permissions: permissions, topic: topic}') }}"
  when: item.1.permissions is defined and item.1.topic is defined

知道我做错了什么吗?

ansible yaml
1个回答
0
投票

使用子元素循环列表

    - debug:
        msg: "{{ item.0.id }} {{ item.1.topic }} {{ item.1.permissions }}"
      with_subelements:
        - "{{ my_json_data.user }}"
        - topicPermissions

给(删节)

  msg: Larry TopicX read,describe
  msg: Larry TopicY write,describe
  msg: Tommy TopicZ read,write,describe
  msg: Tommy TopicY write,describe
  msg: Tommy TopicX read,describe

完整的测试剧本示例

- hosts: localhost

  tasks:

    - include_vars:
        file: test.json
        name: my_json_data
    - debug:
        var: my_json_data

    - debug:
        msg: "{{ item.0.id }} {{ item.1.topic }} {{ item.1.permissions }}"
      with_subelements:
        - "{{ my_json_data.user }}"
        - topicPermissions
© www.soinside.com 2019 - 2024. All rights reserved.