Yaml 检查列表是否包含Ansible中的项目

Yaml 检查列表是否包含Ansible中的项目,yaml,ansible,Yaml,Ansible,我正在尝试检查提供的版本是否为有效的受支持版本。我已经在一个变量中设置了可接受版本的列表,如果提供的版本不在列表中,我想退出任务。然而,我不确定如何做到这一点 #/role/vars/main.yml --- acceptable_versions: [2, 3, 4] 及 上面是我想做的,但是我还没有弄清楚是否有一种单行方式来为fail模块构造一个“list contains”调用。在when条件下,您不需要{}。您正在搜索的是: - fail: msg="unsupported ver

我正在尝试检查提供的版本是否为有效的受支持版本。我已经在一个变量中设置了可接受版本的列表,如果提供的版本不在列表中,我想退出任务。然而,我不确定如何做到这一点

#/role/vars/main.yml
---
  acceptable_versions: [2, 3, 4]


上面是我想做的,但是我还没有弄清楚是否有一种单行方式来为fail模块构造一个“list contains”调用。

在when条件下,您不需要
{}
。您正在搜索的是:

- fail: msg="unsupported version"
  when: version not in acceptable_versions

Ansible自1.6版起有一个
version\u compare
过滤器。 当有条件时,您可以在
中执行以下操作:

when:ansible_distribution|version_compare('12.04','>=')

这将为主要和次要版本比较提供支持,您可以使用以下运算符比较版本:

=,ge,=,=,eq,!=,ne

您可以在此处找到有关此的更多信息:


否则,如果你有非常简单的案例,你可以使用@ProfHase85建议的方法

我在研究中注意到了这一点,但我之所以不选择这个方法,是因为我想能够支持一个随机的#列表,它可能是不连续的,即2、7、10、11,我不想构造一些疯狂的运算符组合,这在哪里有文档记录?这似乎只适用于精确的字符串匹配:(实际上这是jinja2的一个特性,因此在他们的文档中。请参阅“[…]when子句,它包含一个没有双花括号的原始jinja2表达式[…]”
- fail: msg="unsupported version"
  when: version not in acceptable_versions