it-roy-ru.com

Запускайте задачу Ansible, только если переменная содержит определенную строку

У меня несколько задач зависят от значения переменной1. Я хочу проверить, находится ли значение в {{variable1}}, но я получил ошибку:

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

Я использую ANSIBLE 2.0.2 

29
mndhr

Ни один из приведенных выше ответов не работал для меня в ANSIBLE 2.3.0.0, но следующее работает:

when: variable1 | search("value")

В ansible 2.9 это не рекомендуется в пользу использования конкатенации для замены переменных:

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

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

31
Denise Mauldin

Если variable1 является строкой, и вы ищете в ней подстроку, это должно работать:

when: '"value" in variable1'

если variable1 является массивом или dict, in будет искать точную строку как один из ее элементов.

27
guido

От Ansible 2.5

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

В этом примере для поиска по подстроке используется regex_search. 

- 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')

aNSIBLE версия: 2.4.3.0

2
object

использовать этот 

когда: "{{'value' в variable1}}"

вместо 

когда: "значение в {{variable1}}"

Также для сравнения строк вы можете использовать

когда: "{{variable1 == 'value'}}"

1
sdin

Некоторые из ответов больше не работают, как объяснено.

В настоящее время вот что работает для меня в ANSIBLE 2.6.x

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