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、ということのようです。