playbookファイルにwhenを記載し、ansible-playbook
コマンド実行したところ、以下の警告が表示されました。
[WARNING]: conditional statements should not include jinja2 templating
delimiters such as {{ }} or {% %}. Found: 'A' == '{{ arg1 }}'
条件文にjinja2テンプレート{{ }}
や{% %}
などの区切り文字を含めるべきではないと怒られています。
これはAnsibleバージョン2.3から追加されたメッセージのようです。
https://github.com/ansible/ansible/issues/22397
対応方法
警告が出たplaybookは次のように定義されています。
playbook.yml
- hosts: group1
tasks:
- name: echo_task
command: echo "引数にAが設定されています"
register: command_result
when: "'A' == '{{ arg1 }}'"
when: "'A' == '{{ arg1 }}'"
部分の{{ }}
が原因で警告がでているので、
ここを when: "'A' == (arg1)"
と書き換えると警告がなくまります。
- hosts: group1
tasks:
- name: echo_task
command: echo "引数にAが設定されています"
register: command_result
when: "'A' == (arg1)"
コマンド実行
$ ansible-playbook -i hosts playbook.yml -e "arg1=A"
PLAY [group1] ******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [11.22.333.444]
TASK [echo_task] ***************************************************************
changed: [11.22.333.444]
PLAY RECAP *********************************************************************
11.22.333.444 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
変数と文字列を結合したい場合
変数と文字列を結合したい場合を結合したい場合は次のように書きます。
変数も文字列も( )
の中に書き、文字列は 'シングルクォート '
でくくります。
playbook.yml
- hosts: group1
tasks:
- name: echo_task
command: echo "引数にAが設定されています"
register: command_result
when: "'hogeA' == ('hoge' + arg1)"
コマンド実行
$ ansible-playbook -i hosts playbook.yml -e "arg1=A"
PLAY [group1] ******************************************************************
TASK [Gathering Facts] *********************************************************
ok: [11.22.333.444]
TASK [echo_task] ***************************************************************
changed: [11.22.333.444]
PLAY RECAP *********************************************************************
11.22.333.444 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Udemy動画