LoginSignup
9
4

More than 5 years have passed since last update.

(Python)(jinja2) 設定ファイルの値をテンプレートに埋め込んで出力する方法

Last updated at Posted at 2018-02-05

やりたいこと

インフラエンジニアは、環境間で値だけが異なる設定ファイルをメンテナンスすることが多い。

そんなことを繰り返していると、次のようなことを考えるようになる。

  • 別ファイルに用意した設定値を、いい感じで設定ファイルに反映したい

今回は Python の jinja2 を使って、YAML の設定値を JSON に埋め込む方法を紹介したい。

(裏の)やりたいこと

Python 系の記事を書くと、いいねがもらえるらしいので、本当かどうか確かめたい。

yaml を jinja2 に流し込むサンプルコード

import sys, yaml, jinja2
_loader         = jinja2.FileSystemLoader("./", encoding='utf-8')
_environment    = jinja2.Environment(loader=_loader)
_template       = _environment.get_template(sys.argv[1])
sys.stdout.write(_template.render(yaml.load(sys.stdin)))

本コードは、YAML の値を標準出力から受け取り、第一引数で指定されたテンプレートファイルの中に埋め込んで出力する処理を行っている。

あとで利用するので、yaml_jinja2.py のファイル名で保存しておくこと。

テキストの中に設定値を埋め込むサンプルスクリプト

cat > param.yml <<'EOF'
---
hoge: HOGE
hage: HAGE
...
EOF

cat > template.j2 <<'EOF'
{{ hoge }} は、{{ hage }} だ。

EOF

cat param.yml \
  | python yaml_jinja2.py template.j2
rm param.yml template.j2

実行すると以下の出力を得る。

HOGE は、HAGE だ。

JSON の中に設定を埋め込むサンプルスクリプト

cat > param.yml <<'EOF'
---
hoge: HOGE
hage: HAGE
...
EOF

cat > template.j2 <<'EOF'
{
  "hoge": {{ hoge|tojson }}
  "hage": {{ hage|tojson }}
}

EOF

cat param.yml \
  | python yaml_jinja2.py template.j2
rm param.yml template.j2

実行すると以下の出力を得る。

ポイントは、テンプレートの中に記載している tojson というフィルターである。これを入れないと、いい感じには変換ができないので注意してほしい。

{
  "hoge": "HOGE"
  "hage": "HAGE"
}

今後にむけて

反響がよければ、配列の展開も説明する。

あと、出力の文言も見直すかを要検討。

参考情報

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4