我有多个任务依赖变量1的值。我想检查这个值是否在 {{ variable1 }}中,但是我得到了一个错误:
{{ variable1 }}
- name: do something when the value in variable1 command: <command> when: "'value' in {{ variable1 }}"
我使用的是安塞尔2.0.2
If variable1 is a string, and you are searching for a substring in it, this should work:
variable1
when: '"value" in variable1'
if variable1 is an array or dict instead, in will search for the exact string as one of its items.
in
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