Search code examples
ansibleyamljinja2ansible-inventory

How to make a dict from a list in Ansible


So I have a list containing some items that I would like to format/transform to a dict.

The current list looks as followed, (dummy content)

users: 
 - John
 - John_Doe
 - Jane
 - Jane_Doe

Expected result will be something like this,

users:
- username: "John"
  fullname:
    - name: John_Doe
- username: Jane
  fullname:
    - name: Jane_Doe

I know with the use of Jinja2 you could accomplish something like this but I can't seem to figure it out for my use case. Thanks in advance.


Solution

  • The play below

    vars:
      users: 
        - John
        - John_Doe
        - Jane
        - Jane_Doe
      users_dir: []
    tasks:
      - set_fact:
          users_dir: "{{ users_dir + [{'username': users[item],
                                       'fullname': [{'name': users[item+1]}]
                                       }] }}"
        loop: "{{ range(0, users|length, 2)|list }}"
      - debug:
          var: users_dir
    

    gives (abridged):

    "users_dir": [
        {
            "fullname": [
                {
                    "name": "John_Doe"
                }
            ], 
            "username": "John"
        }, 
        {
            "fullname": [
                {
                    "name": "Jane_Doe"
                }
            ], 
            "username": "Jane"
        }
    ]
    

    Is this what you're looking for?