てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] 変数を利用する際にクォーテーションで囲う必要がある理由

はじめに

Ansibleもくもく会 2022.5にて、質疑応答を担当するメンターにて参加させていただきました。

"" で書こう意味について質問いただいたので、分かる範囲でお答えしました。その内容についてまとめます。

ディクショナリと区別するために "" で囲う

Playbook 内で、変数の値を展開する場合

- name: debug test
   debug:
     msg: "{{ 変数名 }}"

のように、変数名を{{ }} で囲います。この際 { が値の先頭にくる場合は、クォーテーションで囲う必要があります。囲わないと{ をディクショナリの構文として認識してしまうためです。

この件は、公式ドキュメントに記載されています。

サンプルを引用しますと、以下のケースは "" で囲う必要があります。

- hosts: app_servers
  vars:
      app_path: {{ base_path }}/22    # これはSyntax Error

修正後

- hosts: app_servers
  vars:
       app_path: "{{ base_path }}/22"

以下のケースは、値が { で始まらないため、クォーテーションで囲う必要はありません。

- hosts: app_servers
  vars:
       app_path: /tmp/{{ base_path }}/22   # 問題ない

が、統一して囲うのがいいかもしれません。

- hosts: app_servers
  vars:
       app_path: "/tmp/{{ base_path }}/22"   # これも問題ない

https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#when-to-quote-variables-a-yaml-gotcha