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

mnd*_*dhr 42 linux conditional ansible ansible-playbook ansible-2.x

我有多个任务取决于variable1的值.我想检查值是否在{{variable1}}但我收到错误:

- name: do something when the value in variable1
  command: <command>
  when: "'value' in {{variable1}}"
Run Code Online (Sandbox Code Playgroud)

我正在使用ansible 2.0.2

gui*_*ido 40

如果variable1是一个字符串,并且您正在其中搜索子字符串,这应该工作:

when: '"value" in variable1'
Run Code Online (Sandbox Code Playgroud)

如果variable1是数组或字典,in则将搜索确切的字符串作为其中一个项目.


Den*_*din 37

在ansible 2.3.0.0中,上述答案都不适用于我,但以下内容如下:

when: variable1 | search("value")
Run Code Online (Sandbox Code Playgroud)

在ansible 2.9中,不赞成使用〜concatenation进行变量替换:

when: "variable1.find('v=' ~ value) == -1"
Run Code Online (Sandbox Code Playgroud)

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

  • 说这个方法在 2.9 中被弃用。不使用 `result|search` 使用 `result is search` (4认同)
  • +1我更喜欢这个答案.如果要检查variable1是否包含"value",还可以在"variable1"之前添加"not".when:not variable1 | 搜索("值") (3认同)
  • 按照另一个解决方案中的建议使用“variable1”中的“value”,不会触发警告。 (2认同)

imj*_*gel 10

来自Ansible 2.5

when: variable1 is search("value")
Run Code Online (Sandbox Code Playgroud)

  • 嗨,这是`当:不是variable1是search(“value”)` (5认同)

obj*_*ect 7

此示例使用 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')
Run Code Online (Sandbox Code Playgroud)

ansible 版本:2.4.3.0


sdi*_*din 6

用这个

当:“{{变量1中的'值'}}”

代替

时间:“{{variable1}} 中的‘值’”

也可以用于字符串比较

当:“{{ variable1 == 'value' }}”

  • 什么时候不需要大括号:https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html#id2(今天,不知道2013年) (2认同)

Dre*_*rew 5

某些答案不再按说明工作。

目前,这在ansible 2.6.x中对我有用

 when: register_var.stdout is search('some_string')
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Ansible 2.9.2 版中:

如果声明了变量 variable1:

when: "'value' in variable1"

如果您注册了 variable1,则:

when: "'value' in variable1.stdout"


小智 5

这在 Ansible 2.9 中对我有用:

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

when: ".com" in variable1
Run Code Online (Sandbox Code Playgroud)

而不是:

when: not ".com" in variable2
Run Code Online (Sandbox Code Playgroud)