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を書ければ特に何もいうことはありません!