I ended up with the inline jinja for loop.
Also I used a pipe lookup instead of an s3 list task prior to this one.
So now everything is done in a one single task, without noise, and with the
same results.
Thanks everyone, it was really useful and I will keep it in mind for future
reference.

Dick


On Thu, 17 Aug 2023 at 20:30, Vladimir Botka <[email protected]> wrote:

> On Thu, 17 Aug 2023 13:11:25 -0400
> Brian Coca <[email protected]> wrote:
>
> > see map/select/reject filters .. they are actually loops and normally
> > much simpler than using jinja command syntax ( {% %} ).
>
> Unfortunately, some filters are not *map* friendly. For example, the
> filter *product*
>
>   list1|product(list2) .............. works fine
>   list1|zip(list2)|map('product') ... does not work
>
>
> Details: Given the list
>
>   l1:
>     - dir: /tmp/test/d1
>       sub_dir: [a, b]
>     - dir: /tmp/test/d2
>       sub_dir: [a, b, c]
>
> the goal is to create the list of products
>
>   l2:
>   - /tmp/test/d1/a
>   - /tmp/test/d1/b
>   - /tmp/test/d2/a
>   - /tmp/test/d2/b
>   - /tmp/test/d2/c
>
> The iteration (the filter *subelements* not used
> to demonstrate the functionality of *product*)
>
>     - debug:
>         msg: "{{ [item.0]|product(item.1) }}"
>       loop: "{{ dirs|zip(sdirs) }}"
>       vars:
>         dirs: "{{ l1|map(attribute='dir') }}"
>         sdirs: "{{ l1|map(attribute='sub_dir') }}"
>
> works as expected. Gives (abridged)
>
>   msg:
>   - - /tmp/test/d1
>     - a
>   - - /tmp/test/d1
>     - b
>
>   msg:
>   - - /tmp/test/d2
>     - a
>   - - /tmp/test/d2
>     - b
>   - - /tmp/test/d2
>     - c
>
> But, the filter *product* doesn't work with *map*
>
>   dirs: "{{ l1|map(attribute='dir') }}"
>   sdirs: "{{ l1|map(attribute='sub_dir') }}"
>   l3: "{{ dirs|zip(sdirs)|map('product') }}"
>
> gives
>
>   l3:
>   - - - /tmp/test/d1
>     - - - a
>         - b
>   - - - /tmp/test/d2
>     - - - a
>         - b
>         - c
>
> This leaves you with Jinja if you want to avoid the loops in tasks
>
>   l3: |
>     {% filter from_yaml %}
>     {% for i in l1 %}
>     {% for s in i.sub_dir %}
>     - {{ i.dir }}/{{ s }}
>     {% endfor %}
>     {% endfor %}
>     {% endfilter %}
>
> --
> Vladimir Botka
>
> --
> 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/20230817202944.3f3512c8%40gmail.com
> .
>

-- 
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/CAF8BbLa3GKSz-vwjTdUYN54pM8nv-LaKBG4gQ1q172gv66BY%2Bg%40mail.gmail.com.

Reply via email to