29

So in my code I have a task

- name: cool task
  shell: 'touch iamnotcool.txt'
  when: me.cool is not defined

and my vars looks like

---
me:
  stumped: yes

So when I run the task it comes back with the following error

{"failed": true, "msg": "The conditional check 'me.cool' failed. The error was: error while evaluating conditional (me.cool): 'dict object' has no attribute 'cool'.
39

The syntax you included:

when: me.cool is not defined

is correct.

You can also use not in:

when: "'cool' not in me"

The problem is that your error message:

The conditional check 'me.cool' failed.

claims your condition is defined as:

when: me.cool

So, either there is some bug in the version you use (but you did not share which one it is) and there were known issues, or you did not post the exact task that caused the error.

1
  • 2
    The error could still happen, if he did not post the original code an ommited a second when-condition which refers to the same value. This works: when: is_installed.rc is defined and is_installed.rc == 0 This does not: when: is_installed.rc is defined \n when is_installed.rc == 0 – Aiyion.Prime Jun 13 '19 at 14:23
12

You can avoid 'dict object' has no attribute by using jinja2 selectattr() syntax as in :

when: me|selectattr("cool", "defined")|list|length >0

idea obtained from Michael Hoglan at https://groups.google.com/forum/#!topic/ansible-project/8XJkHQgttLA

0

Checking if the attribute is included in the set of attributes of the hash also works:

vars:
    key: "name_of_key"
...
when:
-   key not in hash_variable.keys()

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.