所以在我的代码中我有一个任务:
- name: cool task
shell: 'touch iamnotcool.txt'
when: me.cool is not defined
我的变量看起来像:
---
me:
stumped: yes
因此,当我运行任务时,它会返回以下错误:
{"failed": true, "msg": "The conditional check 'me.cool' failed. The error was: error while evaluating conditional (me.cool): 'dict object' has no attribute 'cool'."}
答案1
您所包含的语法:
when: me.cool is not defined
是正确的。
您还可以使用not in
:
when: "'cool' not in me"
问题是您的错误消息:
条件检查“me.cool”失败。
声称您的病情定义为:
when: me.cool
因此,要么是你使用的版本中存在一些错误(但你没有分享是哪一个),要么是已知的问题,或者您没有发布导致错误的确切任务。
答案2
您可以使用 jinja2 selectattr() 语法来避免“dict 对象”没有属性,如下所示:
when: me|selectattr("cool", "defined")|list|length >0
这个想法来自 Michael Hoglanhttps://groups.google.com/forum/#!topic/ansible-project/8XJkHQgttLA
答案3
检查属性是否包含在哈希的属性集中也是有效的:
vars:
key: "name_of_key"
...
when:
- key not in hash_variable.keys()