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

Check if a list contains an item in Ansible

我正在尝试检查提供的版本是否是有效的受支持版本。我已经在变量中设置了可接受版本的列表,如果提供的版本不在列表中,我想退出任务。但是,我不确定该怎么做。

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

#/role/tasks/main.yml
---
  - fail: 
      msg: "unsupported version"
      with_items: "{{acceptable_versions}}"
      when: "{{item}} != {{version}}"

  - name: continue with rest of tasks...

以上是我想做的事情,但我一直无法弄清楚是否有一种单行方法来构造一个 "list contains" 调用失败模块。

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

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

Ansible 从 1.6 开始就有一个 version_compare 过滤器。 您可以在 when 条件下执行如下操作:

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

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

<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne

您可以在此处找到更多相关信息:Ansible - Version comparison filters

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