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

Sha*_*ark 33 yaml ansible

我正在尝试检查提供的版本是否是有效的受支持版本.我已经在变量中设置了可接受版本的列表,如果提供的版本不在列表中,我想要失败.但是,我不确定如何做到这一点.

#/role/vars/main.yml
---
  acceptable_versions: [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

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

  - name: continue with rest of tasks...
Run Code Online (Sandbox Code Playgroud)

以上是我想要做的事情,但是我无法弄清楚是否有一种单行方式来构建对故障模块的"list contains"调用.

Pro*_*e85 69

{{}}在条件允许的情况下你不需要.你在寻找的是:

- fail: msg="unsupported version"
  when: version not in acceptable_versions
Run Code Online (Sandbox Code Playgroud)

  • 这记录在哪里? (10认同)
  • 实际上这是jinja2的一个功能,因此在他们的文档中.见http://jinja.pocoo.org/docs/2.9/templates/#other-operators (2认同)
  • http://docs.ansible.com/ansible/latest/playbooks_conditionals.html#the-when-statement“ [...] when子句,其中包含不带双花括号的原始Jinja2表达式[..]” (2认同)

Mic*_*sek 8

Ansible version_compare自1.6以来就有一个过滤器.您可以在when条件下执行以下操作:

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

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

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

您可以在此处找到有关此内容的更多信息:Ansible - 版本比较过滤器

否则,如果您的案例非常简单,可以使用@ProfH85建议的内容