I am trying to run a loop over a task and I am registering the results. The
items in the loop are not unique and can repeat. I don't want to run the
same item twice. So, in the same task, I want to use a conditional to check
if the current loop item has run so far in the loop. For this, I use the
registered variable and using some filters, I try to extract the items that
were not skipped so far. (I know I could use the `unique` filter for the
use case above. But this is a trimmed down version of the actual use case
where each loop item is a list where the first item can be common among
different loop items, `apply: tags` is used, etc).
In the example below, instead of `skipped` I use `failed` to keep the
example simple.
- hosts:
- localhost
gather_facts: no
tasks:
- debug: msg=item
loop: [1,2,3,1,2,3,4,5]
loop_control:
index_var: index
failed_when: index == 3
register: r
ignore_errors: true
when:
- 'item not in r.results | d([]) | reject("failed") |
map(attribute="item") | flatten'
- debug:
msg: "{{ r.results | d([]) | reject('failed') | map(attribute='item')
| flatten }}"
I know this example could be rewritten with `until`, I just constructed it
to demonstrate my point.
The first tasks prints all loop items. The second one shows however that
item number 3 was failed.
Is there a way to access the results from previous loop items somehow? Is
this sth I should request on github from the ansible team?
--
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/40965723-4a15-4e38-8dd2-ac45fe24f22an%40googlegroups.com.