Jinja2遍历字典列表

时间:2020-09-17 17:40:27

标签: ansible jinja2

我有一个词典列表:

services:
  some_service:
    service_name: service1
    users:
      - user1
      - user2
  another_service:
    service_name: service2
    users:
      - user3
      - user4
  and_another_one:
    service_name: service3
    users:
      - user5
      - user6

Python语法:

services = [{'service_name': 'service1', 'users': ["user1", "user2"]}, {'service_name': 'service2', 'users': ["user3", "user4"]}, {'service_name': 'service3', 'users': ["user5", "user6"]}]

我想要实现的是:

user1: service1, service2, service3
user2: service1, service2, service3
user3: service1, service2, service3
user4: service1, service2, service3
user5: service1, service2, service3
user6: service1, service2, service3

我很难完成这项工作,因此我们将不胜感激。我已经尝试过这里找到的一些解决方案,尽管没有成功。预先谢谢你!

1 个答案:

答案 0 :(得分:2)

以下任务

    - set_fact:
        my_dict: "{{ dict(my_users|product([my_srvcs])) }}"
      vars:
        my_users: "{{ services|json_query('*.users')|flatten|unique|sort }}"
        my_srvcs: "{{ services|json_query('*.service_name')|unique|sort }}"
    - debug:
        var: my_dict

给予

  my_dict:
    user1:
    - service1
    - service2
    - service3
    user2:
    - service1
    - service2
    - service3
    user3:
    - service1
    - service2
    - service3
    user4:
    - service1
    - service2
    - service3
    user5:
    - service1
    - service2
    - service3
    user6:
    - service1
    - service2
    - service3