web-dev-qa-db-fra.com

Exécuter une tâche Ansible uniquement lorsque la variable contient une chaîne spécifique

J'ai plusieurs tâches dépendent de la valeur de variable1. Je veux vérifier si la valeur est dans {{variable1}} mais j'ai une erreur:

- name: do something when the value in variable1
  command: <command>
  when: "'value' in {{variable1}}"

J'utilise ansible 2.0.2 

29
mndhr

Aucune des réponses ci-dessus n'a fonctionné pour moi dans ansible 2.3.0.0, mais les suivantes:

when: variable1 | search("value")

Dans ansible 2.9, il est déconseillé d'utiliser la concaténation pour remplacer les variables:

when: "variable1.find('v=' ~ value) == -1"

http://jinja.pocoo.org/docs/dev/templates/#other-operators

31
Denise Mauldin

Si variable1 est une chaîne et que vous recherchez une sous-chaîne, cela devrait fonctionner:

when: '"value" in variable1'

si variable1 est plutôt un tableau ou un dict, in recherchera la chaîne exact comme l'un de ses éléments.

27
guido

À partir de Ansible 2.5

when: variable1 is search("value")
4
imjoseangel

Cet exemple utilise regex_search pour effectuer une recherche de sous-chaîne. 

- name: make conditional variable
  command: "file -s /dev/xvdf"
  register: fsm_out

- name: makefs
  command: touch "/tmp/condition_satisfied"
  when: fsm_out.stdout | regex_search(' data')

version ansible: 2.4.3.0

2
object

utilisez ceci 

quand: "{{'valeur' ​​'dans variable1}}"

au lieu de 

quand: "'valeur' ​​dans {{variable1}}"

Aussi pour la comparaison de chaînes, vous pouvez utiliser

quand: "{{variable1 == 'valeur'}}"

1
sdin

Certaines des réponses ne fonctionnent plus comme expliqué.

Actuellement, voici quelque chose qui fonctionne pour moi dans ansible 2.6.x

 when: register_var.stdout is search('some_string')
0
Drew