読者です 読者をやめる 読者になる 読者になる

It's raining cats and dogs.

無駄なことなんてないはず

ansibleで "Encountered unknown tag 'd'." なエラーがでた

ansible

どうして今までハマらなかったんだろう的な話で、ansibleでapacheの設定ファイルで表題のエラーがでた。

apacheのLogFormatを追加してprovisionしたときに出たのだけど、原因としては追加したLogFormatの記述がansibleで使っているJinja2テンプレートとして解釈されてエラーとなっていた。
ちなみに追加したフォーマットを一部抜粋

LogFormat "... time:%{%d/%b/%Y:%H:%M:%S %z}t ..." my_format

具体的にはここ→ time:%{%d/%b/%Y:%H:%M:%S %z}t

ansibleのplaybookは以下のような感じ

- name: apache conf
  template: src=templates/apache/httpd.conf dest=/etc/httpd/conf/httpd.conf

回避策としては以下2つのどちらか

Jinja2の表記でJinja2の書式として認識させない

rawでそのまま出力

{% raw %}
LogFormat "... time:%{%d/%b/%Y:%H:%M:%S %z}t ..." my_format
{% endraw %}

Jinja2のテンプレートとして扱わない

playbookで templatecopy に変えることで、テンプレートとして解釈せずにそのまま単にコピーするだけ。

- name: apache conf
  copy: src=templates/apache/httpd.conf dest=/etc/httpd/conf/httpd.conf

ということで

どちらでも良いと思うけど、単にコピーしてほしいだけだったので、後者を選択した