k14s/ytt: YAML templating tool that works on YAML structure instead of text
これ何
YAML templating tool。これを利用するとYAMLファイルにロジックを持たせることができる。 このようなYAMLを操作するツールは結構存在する。 パッと思いつくのは以下。
- kubernetes-sigs/kustomize: Customization of kubernetes YAML configurations
- Creating Ops Files — Cloud Foundry BOSH
- template — The Go Programming Language
GitHubリポジトリ内のドキュメントでこれらの類似ツールとの比較が行われている。 ytt/ytt-vs-x.md at master · k14s/ytt
比較されているツールは利用したことのないものもあるが、自分がいいなと思ったところは以下だ。
- YAMLファイルとして記述することができる
- 記述がシンプル
- 汎用性が高い
YAMLファイルとして記述することができる
YAMLファイルがoutputされる以上、やはりinputもYAMLファイルとして記述したい。
jsonnetでの変換の例は以下。 Jsonnet — The Data Templating Language
jsonnetはYAMLのために作られたものではないからツールの優劣のことを述べるつもりはないが、YAMLファイルを作成したいのであれば、outputを想像しやすいのはyttの方だろう。
記述がシンプル
if
やfor
などの構文を利用することができる。 利用できるものは以下にまとまっている。 ytt/lang.md at master · k14s/ytt
よく使われている高級言語と同じような感覚で利用できる。
ytt — YAML Templating Tool にいろいろサンプルが置いてあり、いずれもオンライン上で試すことができる。
たとえば、YAMLにはアンカーとエイリアスがあるが、これはytt#Function — YAML Templating Tool を利用して記述することも可能だ。
アンカー & エイリアス
cappyzawa: &cappyzawa
name: cappyzawa
github: https://github.com/cappyzawa
users:
- <<: *cappyzawa
ytt#func
#@ def cappyzawa():
name: cappyzawa
github: https://github.com/cappyzawa
#@ end
users:
- #@ cappyzawa()
この出力はどちらも同じになる。
users:
- name: cappyzawa
github: https://github.com/cappyzawa
記述がシンプルで簡単だ。(毎回アンカーとリンクの記号忘れてうんざりすることもない)
汎用性が高い
1ファイルのYAMLでもfor
を利用すれば記述を繰り返すことができたり、if
を使えば分岐することできて、それだけでも嬉しいことがだが、YAMLファイルにpatchを当てることもできる。 このpatchを当てるというのは、kustomizeでいうところのoverlayのようなもので、boshでいうところのopsfileのようなものだ。
上記のサンプルは以下。 ytt — YAML Templating Tool
BOSH folksからすると嬉しいかぎり。
まーーーーたConcourseかよと思うかもしれないがyttはConcourseと相性がいいと思う。
Concourseにはpatchを管理する機能はない。(pipelineの読み込みはBOSHと同じものを利用しているのだが、Concourseではopsfileを利用しない設定になっている)
もしyttが広く普及している世界線に生きていたのなら、pipelineのサンプルを公開し、それを利用する人が自分たちでpatchを管理することができる。(Bosh-deploymentの同じ発想)
pipelineのサンプルをコピーして、それをカスタマイズしてしまった場合、サンプルのアップデートへの追従が億劫になる。
その点、patchだけを管理すればいいのであれば幾分か追従は楽になるだろう。
まとめ
今回紹介したのはあくまで個人の所見と、機能の一部である。
yttそのものの詳細はk14s/ytt: YAML templating tool that works on YAML structure instead of textを、ちょっと触ってみたい!と思ったらytt — YAML Templating Tool をみると良い。
感覚的な話だが、とにかく書いていて気持ちいい。ファイルシンタックスが崩れないのもそれを後押ししている要因の1つかもしれない。
ytt — YAML Templating Tool も The Go Playground のように書いたコードがシェアできるようになればもっと便利だと思った。