conditional statements should not include jinja2 templating delimiters

ansible の小ネタです。

$ ansible --version | head -1
ansible 2.9.25

when で条件を指定する際、以下のような警告が出て、しばらく悩みました。

TASK [firewalld 停止] ************************************************************
[WARNING]: conditional statements should not include jinja2 templating
delimiters such as {{ }} or {% %}. Found: ansible_hostname in [ 'vs1-{{
ORG_SMALL }}', 'vs2-{{ ORG_SMALL }}' ]

問題となる書き方はこちら:

- name: firewalld 停止
  systemd:
    name: firewalld
    state: stopped
    enabled: no
  become: yes
  when: ansible_hostname in [ 'vs1-{{ ORG_SMALL }}', 'vs2-{{ ORG_SMALL }}' ]

ORG_SMALL は group_vars/all で指定されたシンボルです。
これを when で参照できるようにしたい。
他の箇所は {{ }} で括ればいいんですが、when 句の場合は {{ }} を使うなとのことのようです。

以下のように書いたら通りました。

- name: firewalld 停止
  systemd:
    name: firewalld
    state: stopped
    enabled: no
  become: yes
  when: ansible_hostname in [ ('vs1-' + ORG_SMALL), ('vs2-' + ORG_SMALL) ]

要は、変数名シンボルはそのまま表記、リテラルはシングルクォートで括る。
評価式としてまとめたい単位を () で括ればOK、ということのようです。

タイトルとURLをコピーしました