web-dev-qa-db-ja.com

変数に特定の文字列が含まれる場合にのみAnsibleタスクを実行します

Variable1の値に依存する複数のタスクがあります。値が{{variable1}}にあるかどうかを確認したいのですが、エラーが発生しました:

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

私はansible 2.0.2を使用しています

38
mndhr

Ansible 2.3.0.0では上記の答えはどれもうまくいきませんでしたが、次のようになります:

when: variable1 | search("value")

Ansible 2.9では、変数の置換に〜連結を使用することで、これは非推奨です。

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

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

36
Denise Mauldin

variable1が文字列で、その中の部分文字列を検索している場合、これは機能するはずです:

when: '"value" in variable1'

代わりにvariable1が配列または辞書の場合、inはその項目の1つとしてexact文字列を検索します。

35
guido

Ansible 2.5から

when: variable1 is search("value")
7
imjoseangel

この例では、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バージョン:2.4.3.0

4
object

説明どおり、一部の回答は機能しなくなりました。

現在、ansible 2.6.xで私のために働くものがここにあります

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

これを使って

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

の代わりに

when:「{{variable1}}の「値」」

文字列の比較にも使用できます

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

3
sdin