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) <walter.r...@nist.gov> 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 <dnmvis...@gmail.com> 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 
ansible-project+unsubscr...@googlegroups.com<mailto:ansible-project+unsubscr...@googlegroups.com>.
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 ansible-project+unsubscr...@googlegroups.com.
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