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.
