web-dev-qa-db-fra.com

Vérifier si une liste contient un élément dans Ansible

J'essaie de vérifier si la version fournie est une version prise en charge valide. J'ai défini la liste des versions acceptables dans une variable et je souhaite échouer en dehors de la tâche si la version fournie ne figure pas dans la liste. Cependant, je ne sais pas comment faire cela.

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

et

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

  - name: continue with rest of tasks...

Ci-dessus, c'est en quelque sorte ce que je veux faire, mais je n'ai pas été en mesure de déterminer s'il existe un moyen d'une ligne de construire un appel "list contient" pour le module fail.

32
Shark

Tu n'as pas besoin {{}} dans les conditions quand. Ce que vous recherchez, c'est:

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

Ansible a un filtre version_compare Depuis 1.6. Vous pouvez faire quelque chose comme ci-dessous dans when conditionnel:

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

Cela vous aidera à comparer les versions majeure et mineure. Vous pouvez également comparer les versions à l'aide d'opérateurs tels que:

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

Vous trouverez plus d’informations à ce sujet ici: Ansible - Filtres de comparaison de versions

Sinon, si vous avez un cas très simple, vous pouvez utiliser ce que @ ProfHase85 a suggéré

6
Michal Gasek