✨
Kubernetesマニフェストのリファクタリングが捗るスクリプトを書きました
背景
HelmチャートやKustomizeマニフェストをリファクタリングするとき、helm template
(kubectl kustomize
)の実行結果が変更前と変更後で変わらないことを確認する必要があります。
変更前にhelm template
(kubectl kustomize
)の結果をとっておいて変更後の出力と比較するだけではあるのですが、誤って変更前のファイルを上書きしてしまったり削除してしまったりなど、手作業に頼る以上ミスがつきものだと思います(そして何より、面倒くさい)。
そこで今回、mktemp
の一時ファイルとgit stash
を使って、変更前と変更後を比較するシェル関数を用意しました。
前提条件
- gitで管理されているマニフェストであること
- git-split-diffsをインストールしていること
インストール方法
fish-shell
以下の関数を~/.config/fish/config.fishに追記してください。
function helm-diff
set -x file1 (mktemp)
set -x file2 (mktemp)
git stash > /dev/null
helm template $argv > $file1
git stash pop > /dev/null
helm template $argv > $file2
diff -u $file1 $file2 | git-split-diffs --color
rm $file1 $file2
end
function kustomize-diff
set -x file1 (mktemp)
set -x file2 (mktemp)
git stash > /dev/null
kubectl kustomize $argv > $file1
git stash pop > /dev/null
kubectl kustomize $argv > $file2
diff -u $file1 $file2 | git-split-diffs --color
rm $file1 $file2
end
bash
以下の関数を.bashrc
に追記してください。
function helm-diff {
file1=$(mktemp)
file2=$(mktemp)
git stash > /dev/null
helm template $@ > $file1
git stash pop > /dev/null
helm template $@ > $file2
diff -u $file1 $file2 | git-split-diffs --color
rm $file1 $file2
}
function kustomize-diff {
file1=$(mktemp)
file2=$(mktemp)
git stash > /dev/null
kubectl kustomize $@ > $file1
git stash pop > /dev/null
kubectl kustomize $@ > $file2
diff -u $file1 $file2 | git-split-diffs --color
rm $file1 $file2
}
実行方法
helm-diff <helm templateの引数>
# helm-diff diff . など
helm-kustomize <kubectl kustomizeの引数>
# helm-kustomize . など
実行例
gha:
chart:
version: 0.9.3
こちらはマニフェストの複数箇所から参照されているgha.chart.version
です。この値を0.9.4
に変えて実行してみます。
実行結果
変更前と変更後の差分が確認できました😊
まとめ
今回紹介したシェル関数が皆さんのKubernetesライフのお役に立てれば嬉しいです。
Twitterでは、おうちKubernetesや技術関連の内容を日々ツイートしているので、興味があればぜひフォローしていってください🎉
Twitter: https://twitter.com/_matoruru
Discussion