https://docs.ansible.com/ansible/latest/collections/community/general/dict_filter.html

This is an even more elegant solution using the community.general.dict module:



    - name: list2dict

      set_fact:

        list2dict: >-

          {{ test | map('zip', ['name', 'addr'])

                | map('map', 'reverse')

                | map('community.general.dict') }}


    - name: list2dict

      debug: var=list2dict



Walter
--
Walter Rowe, Division Chief
Infrastructure Services Division
Mobile: 202.355.4123

On Aug 29, 2024, at 7:22 AM, Rowe, Walter P. (Fed) <[email protected]> wrote:



- name: list of list to list of dict
  hosts: localhost
  become: false
  gather_facts: false
  vars:
    test:
      - - host1
        - fd99:9999::1
      - - host1
        - 10.0.1.1
      - - host2
        - fd99:9999::1
      - - host2
        - 10.0.1.1
      - - foo
        - fd99:9999::1
      - - foo
        - 10.0.1.1
      - - baz
        - fd99:9999::1
      - - baz
        - 10.0.1.1
  tasks:
    - name: test
      debug: var=test

    - name: list 2 dict
      set_fact:
        list2dict: "{{ list2dict|default([]) + [ thisdict ] }}"
      loop: "{{ test }}"
      vars:
        thisdict: { name: "{{ item.0 }}", addr: "{{ item.1 }}" }

    - name: list2dict
      debug: var=list2dict




Walter
--
Walter Rowe, Division Chief
Infrastructure Services Division
Mobile: 202.355.4123

On Aug 29, 2024, at 5:40 AM, Dick Visser <[email protected]> wrote:

Hii

I have something like this in my vars:

test:
  - - host1
    - fd99:9999::1
  - - host1
    - 10.0.1.1
  - - host2
    - fd99:9999::1
  - - host2
    - 10.0.1.1
  - - foo
    - fd99:9999::1
  - - foo
    - 10.0.1.1
  - - baz
    - fd99:9999::1
  - - baz
    - 10.0.1.1


Each first and second list item should become keys in a dict, like this:

conv:
  - name: host1
    address: fd99:9999::1
  - name: host1
    address: 10.0.1.1
  - name: host2
    address: fd99:9999::1
  - name: host2
    address: 10.0.1.1
  - name: foo
    address: fd99:9999::1
  - name: foo
    address: 10.0.1.1
  - name: baz
    address: fd99:9999::1
  - name: baz
    address: 10.0.1.1

I tried a few things with mapping and filtering, but can't see how to do it....
any suggestions? Ideally no tasks, just filters....

thx




--
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAF8BbLamT%3Ds3H4R%3DcxShSg16KrSr%2B4%3D%3DUytgZbjPivhMK1rfmg%40mail.gmail.com<https://groups.google.com/d/msgid/ansible-project/CAF8BbLamT%3Ds3H4R%3DcxShSg16KrSr%2B4%3D%3DUytgZbjPivhMK1rfmg%40mail.gmail.com?utm_medium=email&utm_source=footer>.


-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/6F5FBEE5-028A-4AB2-ADC9-5B2B535290F7%40nist.gov.

Reply via email to