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.

Reply via email to