web-dev-qa-db-ja.com

リストに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...

上記は私がやりたいことの一種ですが、失敗モジュールの「リストを含む」呼び出しを作成するための1行の方法があるかどうかはわかりませんでした。

32
Shark

いらないよ {{}} in条件。あなたが探しているのは:

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

Ansibleには、1.6以降の_version_compare_フィルターがあります。 when条件で以下のようなことができます:

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

これにより、メジャーバージョンとマイナーバージョンの比較がサポートされ、次のような演算子を使用してバージョンを比較できます。

_<, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne_

詳細については、こちらをご覧ください。 Ansible-バージョン比較フィルター

それ以外の場合、本当に簡単な場合は、@ ProfHase85が提案したものを使用できます。

6
Michal Gasek