記述したテンプレートから YAML を生成するツール 「ytt」 を試す.ytt は YAML に対して「テンプレート機能」と「オーバーレイ機能」が使える.VMware 社を中心に開発されているツールセット Carvel に含まれている.
YAML のテンプレート機能やオーバーレイ機能と言えば,特に Kubernetes の文脈だと Kustomize や Helm が代表的だと思う.ytt も似たように使えるけど Kubernetes に限らず「汎用的に使える」というメリットがある.他にはテンプレート構文を含めても「YAML フォーマットとしては valid のまま」という点もメリットに挙げられると思う.汎用的に使えるということは,例えば AWS CloudFormation テンプレートを生成することにも活用できる.ytt と関連ツールの違いは以下のドキュメントに詳細に載っている.
インストール
今回は Homebrew で macOS にインストールする.最新版 v0.41
を使う.
$ brew tap vmware-tanzu/carvel $ brew install ytt $ ytt version ytt version 0.41.1
ドキュメントに載っている Shell Completion を設定すれば ytt
コマンドの補完も使えるようになる.
$ ytt completion zsh > /usr/local/share/zsh/site-functions/_ytt $ ytt [tab] completion -- Generate the autocompletion script for the specified shell fmt -- Format YAML templates help -- Help about any command template -- Process YAML templates (deprecated; use top-level command -- e.g. `ytt -f-` instead of `ytt template -f-`) version -- Print version website -- Starts website HTTP server
もし ytt をササッと試すならドキュメントに含まれている「Interactive Playground」を使うと便利!
ytt を試す : テンプレート機能
ytt では YAML のコメント記法 #@
を使ってテンプレートを記述する.そして ytt -f xxx.yaml
のように ytt
コマンドを実行すると YAML を生成できる.基本的な構文を試していく.
1. 変数
ytt YAML
#@ title = 'kakakakakku blog' #@ author = 'kakakakakku' #@ url = 'https://kakakakakku.hatenablog.com/' blog: title: #@ title author: #@ author url: #@ url
生成した YAML
blog: title: kakakakakku blog author: kakakakakku url: https://kakakakakku.hatenablog.com/
2. if (boolean)
ytt YAML
#@ is_debug = True #@ if is_debug: debug: enabled #@ else: debug: disabled #@ end
生成した YAML
debug: enabled
3. if (>=)
ytt YAML
#@ score = 70 #@ threshold = 80 #@ if score >= threshold: result: pass #@ else: result: fail #@ end
生成した YAML
result: fail
4. for (index)
ytt YAML
ids: #@ for id in range(0, 5): - #@ id + 1 #@ end
生成した YAML
ids: - 1 - 2 - 3 - 4 - 5
5. for (value)
ytt YAML
users: #@ for name in ['alice', 'bob', 'kakakakakku']: - #@ name #@ end
生成した YAML
users: - alice - bob - kakakakakku
6. 関数
ytt YAML
#@ on_sale = True #@ def price(x): #@ if on_sale: #@ return x * 0.7 #@ else: #@ return x #@ end #@ end price: #@ price(1000)
生成した YAML
price: 700
ytt を試す : オーバーレイ機能
オーバーレイ機能を使うと YAML を部分的に書き換えられる.例えば「プロダクション環境」と「開発環境」で YAML の値を変えられる.そして ytt -f _config.yaml -f xxx.yaml
のように ytt
コマンドを実行すると YAML を生成できる.
1. 上書き
ytt YAML (template)
autoscaling: min: 1 max: 1
ytt YAML (config)
#@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all --- autoscaling: min: 5 max: 20
生成した YAML
autoscaling: min: 5 max: 20
2. 追加
ytt YAML (template)
users: - admin
ytt YAML (config)
#@ load("@ytt:overlay", "overlay") #@overlay/match by=overlay.all --- users: - prd-user1 - prd-user2 - prd-user3
生成した YAML
users: - admin - prd-user1 - prd-user2 - prd-user3
まとめ
記述したテンプレートから YAML を生成するツール 「ytt」 を使って基本的な「テンプレート機能」と「オーバーレイ機能」を試した.Kubernetes に限らず「汎用的に使える」のは便利だと思う.そして簡単に使えるので導入自体もしやすいと思う.テンプレート構文を含めても「YAML フォーマットとしては valid のまま」なのもメリットだとは思うけど,YAML のコメント記法 #@
に依存している仕組みは複雑になりすぎると個人的にはちょっと可読性の観点でデメリットになりそうだと感じた.なお #@
に続いて書く擬似コードは Starlark に準拠している.
ytt のドキュメントを読んだら他にも多くの構文をサポートしていた.使えそうな機会があったら導入してみるぞ!