Skip to content

Instantly share code, notes, and snippets.

@ncknt
Created August 28, 2019 22:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ncknt/c962f1d81e3b7fda3df3ebb32a17c8aa to your computer and use it in GitHub Desktop.
Save ncknt/c962f1d81e3b7fda3df3ebb32a17c8aa to your computer and use it in GitHub Desktop.
#!/bin/bash
set -f
CONTEXT=$1
NAMESPACE=$2
contains() {
local e match="$1"
shift
for e; do [[ "$e" == "$match" ]] && return 0; done
return 1
}
echo "Getting secrets..."
s1=$(kubectl --context $CONTEXT -n $NAMESPACE get secrets -o jsonpath='{.items[*].metadata.name}' | xargs -n1 | sort | uniq)
allSecrets=(${s1// / })
echo "Found ${#allSecrets[@]} secrets..."
s2=$(kubectl --context $CONTEXT -n $NAMESPACE get pods -o jsonpath='{.items[*].spec.containers[*].env[*].valueFrom.secretKeyRef.name}' | xargs -n1 | sort | uniq)
envSecrets=(${s2// / })
echo "Found ${#envSecrets[@]} secrets used in environments..."
s3=$(kubectl --context $CONTEXT -n $NAMESPACE get pods -o jsonpath='{.items[*].spec.volumes[*].secret.secretName}' | xargs -n1 | sort | uniq)
volumeSecrets=(${s3// / })
echo "Found ${#volumeSecrets[@]} secrets used in volumes..."
s4=$(kubectl --context $CONTEXT -n $NAMESPACE get pods -o jsonpath='{.items[*].spec.imagePullSecrets[*].name}' | xargs -n1 | sort | uniq)
pullSecrets=(${s4// / })
echo "Found ${#pullSecrets[@]} secrets used in pull images..."
s5=$(kubectl --context $CONTEXT -n $NAMESPACE get ingress -o jsonpath='{.items[*].spec.tls[*].secretName}' | xargs -n1 | sort | uniq)
tlsSecrets=(${s5// / })
echo "Found ${#tlsSecrets[@]} secrets used in TLS secrets..."
s5=$(kubectl --context $CONTEXT -n $NAMESPACE get sa -o jsonpath='{.items[*].secrets[*].name}' | xargs -n1 | sort | uniq)
saSecrets=(${s5// / })
echo "Found ${#saSecrets[@]} secrets used in service accounts..."
toDelete=()
for s in "${allSecrets[@]}"
do
if contains "$s" "${volumeSecrets[@]}"; then
continue
elif contains "$s" "${envSecrets[@]}"; then
continue
elif contains "$s" "${pullSecrets[@]}"; then
continue
elif contains "$s" "${tlsSecrets[@]}"; then
continue
elif contains "$s" "${saSecrets[@]}"; then
continue
else
toDelete+=($s)
fi
done
read -p "Delete ${#toDelete[@]} secrets, y/N " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
while read -r s
do
kubectl --context $CONTEXT -n $NAMESPACE delete secrets ${s}
done < <(echo ${toDelete[@]} | xargs -n 100)
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment