Skip to content

Instantly share code, notes, and snippets.

@jgsqware
Created December 19, 2019 09:29
Show Gist options
  • Save jgsqware/469c2dc673ef9c2e340216a71b1d6ea8 to your computer and use it in GitHub Desktop.
Save jgsqware/469c2dc673ef9c2e340216a71b1d6ea8 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -eu
# defaulting the context to a blank string just uses the currently configured context
context=${1:-""}
max_number_rev=10
declare -a namespaces=( "kube-system" )
for namespace in "${namespaces[@]}"
do
releases=$(kubectl --context="$context" --namespace=$namespace get cm -l OWNER=TILLER -o go-template --template='{{range .items}}{{ .metadata.labels.NAME }}{{"\n"}}{{ end }}' | sort -u)
for release in $releases
do
# get the revisions of this release
revisions=$(kubectl --context="$context" --namespace=$namespace get cm -l OWNER=TILLER -l STATUS=SUPERSEDED -l NAME=$release --no-headers | awk '{if(NR>1)print $1}' | sed 's/.*\.v//' | sort -n)
num_revisions=$(echo $revisions | tr " " "\n" | wc -l)
echo "release $release has $num_revisions revisions. Max number is $max_number_rev."
if [[ $num_revisions -gt $max_number_rev ]]; then
num_to_delete=$(($num_revisions-$max_number_rev))
echo "Will delete $num_to_delete revisions"
to_delete=$(echo $revisions | tr " " "\n" | head -n $num_to_delete)
for del_rev in $to_delete
do
cm=$release.v$del_rev
echo "Deleting $cm"
kubectl --context="$context" --namespace=$namespace delete cm $cm
done
fi
done
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment