仅当变量包含特定字符串时才运行安赛尔任务

我有多个任务依赖变量1的值。我想检查这个值是否在 {{ variable1 }}中,但是我得到了一个错误:

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

我使用的是安塞尔2.0.2

259644 次浏览

If variable1 is a string, and you are searching for a substring in it, this should work:

when: '"value" in variable1'

if variable1 is an array or dict instead, in will search for the exact string as one of its items.

I used

failed_when: not(promtool_version.stdout.find('1.5.2') != -1)

means - failed only when the previously registered variable "promtool_version" doesn't contains string '1.5.2'.

None of the above answers worked for me in ansible 2.3.0.0, but the following does:

when: variable1 | search("value")

In ansible 2.9 this is deprecated in favor of using ~ concatenation for variable replacement:

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

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

Other options:

when: "inventory_hostname in groups[sync_source]"

This example uses regex_search to perform a substring 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 version: 2.4.3.0

From Ansible 2.5

when: variable1 is search("value")

For negative scenarios

when: not variable1 is search("value")

use this

when: "\{\{ 'value' in variable1}}"

instead of

when: "'value' in \{\{variable1}}"

Also for string comparison you can use

when: "\{\{ variable1 == 'value' }}"

Some of the answers no longer work as explained.

Currently here is something that works for me in ansible 2.6.x

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

In Ansible version 2.9.2:

If your variable variable1 is declared:

when: "'value' in variable1"

If you registered variable1 then:

when: "'value' in variable1.stdout"

This works for me in Ansible 2.9:

variable1 = www.example.com.
variable2 = www.example.org.


when: ".com" in variable1

and for not:

when: not ".com" in variable2