我有多个任务取决于variable1的值。我想检查值是否在{{variable1}}但是我收到了错误:
- name: do something when the value in variable1
command: <command>
when: "'value' in {{variable1}}"
我正在使用ansible 2.0.2
答案 0 :(得分:35)
上述答案都没有在ansible 2.3.0.0中适用于我,但以下内容确实如此:
when: variable1 | search("value")
在ansible 2.9中,不赞成使用〜concatenation进行变量替换:
when: "variable1.find('v=' ~ value) == -1"
答案 1 :(得分:33)
如果when: '"value" in variable1'
是一个字符串,并且您正在其中搜索子字符串,那么这应该有效:
variable1
如果in
是数组或字典,def aggregate(lst):
new = {}
for d in lst:
new.setdefault((d['user'], d['id']), []).append(d)
for k, d in new.items():
if len(d) > 1:
keys, values = zip(*[(sub['key'], sub['value']) for sub in d])
user, id_ = k
yield {'key': keys, 'value': values, 'user': user, 'id': id_}
else:
yield d[0]
print list(aggregate(lst))
[{'id': 7, 'value': 5, 'key': 17, 'user': 578},
{'id': 7, 'value': (3, 4), 'key': (16, 17), 'user': 3},
{'id': 48, 'value': 1, 'key': 52, 'user': 3},
{'id': 48, 'value': 2, 'key': 46, 'user': 578}]
将搜索 exact 字符串作为其中一项。
答案 2 :(得分:7)
来自Ansible 2.5
when: variable1 is search("value")
答案 3 :(得分:3)
此示例使用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 version:2.4.3.0
答案 4 :(得分:3)
某些答案不再如所解释的那样起作用。
当前,这在ansible 2.6.x中适用于我
when: register_var.stdout is search('some_string')
答案 5 :(得分:3)
这在Ansible 2.9中对我有效:
select t.*, min(value) over () + row_number() over (order by id) - 1 as new_value
from test t;
而不是:
variable1 = www.example.com.
variable2 = www.example.org.
when: ".com" in variable1
答案 6 :(得分:2)
使用此
何时:“ {{variable1}中的“值”}”
代替
何时:“ {{variable1}}中的''value'”
还可以使用字符串比较
当:“ {{variable1 =='value'}}”
答案 7 :(得分:1)
在Ansible版本2.9.2中:
如果声明了变量variable1:
when: "'value' in variable1"
如果您注册了variable1,则:
when: "'value' in variable1.stdout"
答案 8 :(得分:-2)
我用过
failed_when: not(promtool_version.stdout.find('1.5.2') != -1)
表示 - 仅当先前注册的变量“promtool_version”不包含字符串“1.5.2”时才会失败。