🔧
Kustomizeの依存関係を可視化するツールを作った
はじめに
先日、こんな記事を書いたのですが、ツールの紹介もしておこうと思います。
TL;DR
Graphmize
- 探した所、Kustomizeの可視化ツールで人気なものはなさそうだったので作った(もしあったら教えてください)
- このツールのモチベーションはKustomizeのファイル同士の依存関係を木構造で見れたらいいなという所にあります。特に、base, overlaysのようなディレクトリ構成で複雑になってしまった時などに使えると思います。
- 例えばターミナルで実行すると以下のような出力になります。実際のディレクトリ構造はこちら
/
├── overlays/production
│ └── base
│ └── base/a_service
│ ├── deployment.yaml
│ └── service.yaml
└── overlays/staging
└── base
└── base/a_service
├── deployment.yaml
└── service.yaml
- インストールはgo modulesかhomebrewでできます。
# homebrew
brew tap hourglasshoro/homebrew-graphmize
brew install graphmize
# go
go get github.com/hourglasshoro/graphmize
実装について
現在
現在のv0.1.1ではresourcesのみ表示することができます。patchなどに関しては今後の機能追加で実装するつもりです。
参考にしたもの
こちらを参考にkustomizeファイルを読み込む部分を作りました。このライブラリは実行するディレクトリにあるkustomization.yamlからしか読み込めません。それだと使いにくいので、ルートディレクトリを指定したら探索して全ての依存関係のツリーを作るよう拡張をしました。
具体的には実装のこのあたりになります。また、すでに出てきた子のツリーに関してはメモリ上に保存し探索効率をあげています。
使ったライブラリ
spf13/cobra
もともとCLIツールを作ったことがなかったのですが、おなじみ(?)のcobraのテンプレートを使い簡単に作ることができました
spf13/afero
同じ作者のaferoも優秀で、ファイルシステムの抽象化ライブラリです。以下の記事にも書いてありますがos パッケージのファイル系関数や io/ioutil の代わりに使うもので、テスト時にOSのファイルシステムではなくモックのファイルシステムを使うことのできるものです。
たとえば以下のようなディレクトリ構成にしたい場合
/app
├── kustomization.yaml
└── sub
├── kustomization.yaml
├── a.yaml
└── b.yaml
以下のようにします。
func TestExampleFiles(t *testing.T) {
fakeFileSystem := afero.NewMemMapFs()
fakeFileSystem.Mkdir("app", 0755)
fakeFileSystem.Mkdir("app/sub", 0755)
fileContents := `
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- sub
`
afero.WriteFile(fakeFileSystem, "app/kustomization.yaml", []byte(fileContents), 0644)
fileContents = `
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- a.yaml
- b.yaml
`
afero.WriteFile(fakeFileSystem, "app/sub/kustomization.yaml", []byte(fileContents), 0644)
fileContents = `
apiVersion: apps/v1
kind: Deployment
`
afero.WriteFile(fakeFileSystem, "app/sub/a.yaml", []byte(fileContents), 0644)
afero.WriteFile(fakeFileSystem, "app/sub/b.yaml", []byte(fileContents), 0644)
}
まとめ
Graphmizeという自作ツールの紹介でした。もし使えそうであれば活用していただけると幸いです。contributeも歓迎していますので、よろしくお願いします!
Discussion