如何为每个用户创建用户字典列表和文件夹列表?

How to create a list of dictionary of users and list of folders for each user?

我想创建一个用户字典,其中包含文件夹列表。

users:
  name: user1
  folders:
    - user1-1
    - user1-2
  name: user2
  folders:
    - user2-1
    - user2-2
  name: userN
  folders:
    - userN-1
    - userN-2

我正在尝试动态创建此用户词典列表。

  - hosts: localhost   
    gather_facts: no   
    vars: 
      userCount: 5
      folderCount: 5
    tasks:
    - set_fact:
        user_lists: []        
    - name: creating list of users
      set_fact:
        user_lists: "{{ user_lists + [ 'user-' ~ item ] }}"
      with_sequence: count="{{userCount|int}}"
    - debug:
        var: user_lists      

     - set_fact:
        usersObj: []
        userDict: {}
 
    - name: add each user to dict
      set_fact:
         usersObj: "{{ usersObj + [userDict| combine({'name': item})] }}"
      with_items: "{{user_lists}}"

    - debug: var=usersObj

我在字典中创建了 5 个用户。现在每个用户都应该有基于 folderCount 创建的文件夹列表。如何解决这个问题?可以使用 Jinja2 模板来简化这个吗?

下面的任务完成工作

    - set_fact:
        user_lists: []
    - name: creating dictionary of users with lists of folders
      set_fact:
        user_lists: "{{ user_lists|combine({key: val}) }}"
      with_sequence: start=1 end="{{ userCount }}"
      vars:
        folder_range: "{{ range(1, folderCount|int + 1)|list }}"
        key: "{{ 'user-' ~ item }}"
        val: "{{ [key]|
                 product(folder_range)|
                 map('join', '-')|
                 list }}"
        
    - debug:
        var: user_lists

给出(删节)

    "user_lists": {
        "user-1": [
            "user-1-1",
            "user-1-2",
            "user-1-3",
            "user-1-4",
            "user-1-5"
        ],
        "user-2": [
            "user-2-1",
            "user-2-2",
            "user-2-3",
            "user-2-4",
            "user-2-5"
        ],
        "user-3": [
            "user-3-1",
            "user-3-2",
            "user-3-3",
            "user-3-4",
            "user-3-5"
        ],
        "user-4": [
            "user-4-1",
            "user-4-2",
            "user-4-3",
            "user-4-4",
            "user-4-5"
        ],
        "user-5": [
            "user-5-1",
            "user-5-2",
            "user-5-3",
            "user-5-4",
            "user-5-5"
        ]
    }