なっく日報

技術やら生活やらのメモ

Google Cloud Deployment Managerの設定ファイルのJinja2形式での書き方TIPS

特に細かい説明はしないので、分かる人がググったときにたどり着いてもらえればと・・・(雑)

envを利用してインスタンス名とかを生成

ロール毎のテンプレートとかにnameを動的に生成するために使えそうな技。

↓のように書けます。

{% set INSTANCE_NAME = 'foo-{deployment}-{name}'.format(**env) %}

この辺、普段からPython使っている人には常識なのかもしれないですが

  • 文字列のフォーマットに%よりも、format使えとどっかに書いてたからそうした
  • dictionary型の変数をformatに渡す際にはアンパックするべし

アンパックとか初めて知りました(ES2015で書いている人には{...props}的なといえば伝わるかも)

なお、envについては、

https://cloud.google.com/deployment-manager/configuration/adding-templates#environment_variables

のドキュメントを読むべし。

最後の手段としてマクロがある

↑のやり方で済んだので、使ってないですが、最終兵器ということで。

{% macro diskName(diskObj) -%}{{ env["deployment"]}}-disk-{{ diskObj["name"] }}{%- endmacro %}

# ...
    {% for diskObj in properties["disks"] %}
    - deviceName: {{ diskName(diskObj) }}
      type: PERSISTENT
      source: $(ref.{{ diskName(diskObj) }}.selfLink)
      autoDelete: true
    {% endfor %}

な書き方ができます。ほぼほぼ関数。

まとめ

まとめるほどのものはないですが。

Jinja2の公式ドキュメントをみながら、ちゃんとPythonを書ければ特に何もいうことはありません!

Template Designer Documentation — Jinja2 Documentation (2.8-dev)