If you read a little further down, under the "Loops and Conditionals"[1]
this information is present:

Combining when with with_items (see Loops), be aware that the when
> statement is processed separately for each item... If you need to skip the
> whole task depending on the loop variable being defined, used the |default
> filter to provide an empty iterator


[1]
http://docs.ansible.com/ansible/playbooks_conditionals.html#loops-and-conditionals

On Wed, Nov 2, 2016 at 7:41 PM, Dan Lang <[email protected]> wrote:

> Thanks for the info Matt.  The Ansible docs, http://docs.ansible.com/
> ansible/playbooks_conditionals.html, indicate this is should work as
> before. Specifically,
>>
>> If a required variable has not been set, you can skip or fail using
>> Jinja2’s defined test. For example:
>>
>> tasks:
>>     - shell: echo "I've got '{{ foo }}' and am not afraid to use it!"
>>       when: foo is defined
>>
>>     - fail: msg="Bailing out. this play requires 'bar'"
>>       when: bar is undefined
>>
>> This is especially useful in combination with the conditional import of
>> vars files (see below).
>>
>
>  Do you know where this behavior is documented? I'd like to update the
> docs and submit a PR.
>
> On Wednesday, November 2, 2016 at 5:44:18 PM UTC-4, Matt Martz wrote:
>>
>> In 2.1 this would have been a deprecation warning.  What you need is
>> something like:
>>
>> with_items: "{{ existing_rules.files | default([]) |
>> map(attribute='path') | list }}"
>>
>> That gives existing_rules.files a default of an empty list.
>>
>> Also off note here, is that `when` statements are processed for each
>> iteration of the with_items loop, and not before the with_items.  So your
>> with_items needs to process correctly all the time.  As such, you could
>> remove `when` statement altogether as it isn't doing what you wanted it to
>> do.
>>
>> On Wed, Nov 2, 2016 at 4:37 PM, Dan Lang <[email protected]> wrote:
>>
>>> I'm testing existing roles and playbooks against Ansible 2.2, and I've
>>> noticed that several roles that I have written that take advantage of
>>> "when: variable is defined" or "when: variable is undefined" in tasks no
>>> longer work.  This happens when a variable is used from a previous task,
>>> but is empty because maybe the results were empty.   Here is an example:
>>>
>>> - name: Find existing rules
>>>>   find: path=/etc/software/rules/
>>>>   register: existing_rules
>>>> - name: Clean rules
>>>>   file: path={{ item }} state=absent
>>>>   with_items: "{{ existing_rules.files | map(attribute='path') | list
>>>> }}"
>>>>   when: existing_rules is defined
>>>
>>>
>>> In this case, there were no existing files, so the variable is empty and
>>> I would expect this *Clean rules* task to be skipped, but instead
>>> Ansible errors with something like
>>>
>>>> FAILED! => {"failed": true, "msg": "'dict object' has no attribute
>>>> 'files'"}
>>>
>>>
>>> What are the options then to allow for this sort of conditional logic?
>>> This definitely worked in Ansible 2.1, but I don't recall if any DEPRECATED
>>> warnings were given.
>>>
>>>
>>> --
>>> 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 post to this group, send email to [email protected].
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/ansible-project/0240be2f-27d7-41f3-a188-7c346d01e593%
>>> 40googlegroups.com
>>> <https://groups.google.com/d/msgid/ansible-project/0240be2f-27d7-41f3-a188-7c346d01e593%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> Matt Martz
>> @sivel
>> sivel.net
>>
> --
> 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 post to this group, send email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/ansible-project/f2cc398e-bb26-4fa1-a351-d743cd58d3b5%40googlegroups.
> com
> <https://groups.google.com/d/msgid/ansible-project/f2cc398e-bb26-4fa1-a351-d743cd58d3b5%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Matt Martz
@sivel
sivel.net

-- 
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/CAD8N0v9o2hptSZRrs09kJBpn7jN14okjhfcuKqGUFLByDXbH-Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to