Run an Ansible Task Only When the Variable Contains a Specific String
I Have Multiple Tasks Depend from the Value of Variable1. I Want to Check If the Value Is in {{Variable1}} but I Got an Error: - Name: Do Something When the...
I have multiple tasks depend from the value of variable1. I want to check if the value is in {{variable1}} but i got an error:
- name: do something when the value in variable1
command: <command>
when: "'value' in {{variable1}}"
I'm using ansible 2.0.2
9 Answers
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.
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"
Other options:
when: "inventory_hostname in groups[sync_source]"
From Ansible 2.5
when: variable1 is search("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')
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
This works for me in Ansible 2.9:
variable1 =
variable2 =
when: ".com" in variable1
and for not:
when: not ".com" in variable2
use this
when: "{{ 'value' in variable1}}"
instead of
when: "'value' in {{variable1}}"
Also for string comparison you can use
when: "{{ variable1 == 'value' }}"
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"
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'.