有没有办法检查字典键是否未在 ansible 任务中定义?

有没有办法检查字典键是否未在 ansible 任务中定义?

所以在我的代码中我有一个任务:

- 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()

相关内容