Hello,

Thank you for your responses.
Some times I dont like to use the loop: "{{ nulo|default([]) }}" because it
doesn't say "skipping" and in complex playbook with lots of hosts I like to
have that feedback.

I tested several options and and everything works, even the case of the
issue 45976 <https://github.com/ansible/ansible/issues/45976> (should have
tested that one before). I think that, probably, the behaviour changed, and
the documentation should be more clear in this regard... The conditional is
not applied only per item but also to the task...

  vars:
    tstbool: False
    tstnull:

  tasks:

    - name: "test loop"
      debug:
        msg: "test"
      loop: "{{nulo|default([])}}"

    - name: "test loop"
      debug:
        msg: "test"
      loop: "{{nulo}}"
      when: nulo is defined

    - name: "test loop"
      debug:
        msg: "test"
      loop: "{{nulo}}"
      when: nulo|default(False)

    - name: "test loop"
      debug:
        msg: "test"
      loop: "{{nulo}}"
      when: nulo|default([])|length > 0

    - name: "test loop"
      debug:
        msg: "test"
      loop: "{{nulo}}"
      when: tstbool

    - name: "test loop"
      debug:
        msg: "test"
      loop: "{{nulo}}"
      when: tstnull

Returns:

PLAY [localhost]
*****************************************************************************************************

TASK [test loop]
*****************************************************************************************************

TASK [test loop]
*****************************************************************************************************
skipping: [localhost]

TASK [test loop]
*****************************************************************************************************
skipping: [localhost]

TASK [test loop]
*****************************************************************************************************
skipping: [localhost]

TASK [test loop]
*****************************************************************************************************
skipping: [localhost]

TASK [test loop]
*****************************************************************************************************[DEPRECATION
WARNING]: evaluating None as a bare variable, this behaviour will go away
and you might need to add
|bool to the expression in the future. Also see CONDITIONAL_BARE_VARS
configuration toggle.. This feature will be
removed in version 2.12. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
skipping: [localhost]

PLAY RECAP
***********************************************************************************************************localhost
                 : ok=0    changed=0    unreachable=0    failed=0
 skipped=6    rescued=0    ignored=0

The final count for skipped is 6 but the first task doesn't report skipping


On Mon, Feb 17, 2020 at 9:10 PM Vladimir Botka <[email protected]> wrote:

> On Mon, 17 Feb 2020 20:11:07 +0000
> Nuno Jordão <[email protected]> wrote:
>
> >     - name: "test loop"
> >       debug:
> >         msg: "test"
> >       loop: "{{nulo}}"
> >       when: nulo is defined
> >
> > where "nulo" is an undefined variable. Here the task skips instead of
> > failing.
>
> Instead of testing whether the variable is defined or not, use the
> "default"
> filter. For example
>
>      - name: "test loop"
>        debug:
>          msg: "test"
>        loop: "{{ nulo|default([]) }}"
>
> The loop will be skipped if "nulo" is undefined. Test "nulo" separately if
> you want the playbook to fail. For example
>
>      - name: Fail when nulo undefined
>        fail:
>          msg: "Variable nulo undefined"
>        when: nulo if undefined
>
> HTH,
>
>         -vlado
>

-- 
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/CAEAA%3Dtv3rn4Wh_txsEr7P92ec5g7DSwWp6uhWRZDeHoyZQ-z2w%40mail.gmail.com.

Reply via email to