Kubernetesマニフェストのリファクタリングが捗るスクリプトを書きました

2024/08/10に公開

背景

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