Skip to content

Instantly share code, notes, and snippets.

@fire-ant
Last active July 26, 2023 21:43
Show Gist options
  • Save fire-ant/4b143cc522614f8958c3903fa7151e8d to your computer and use it in GitHub Desktop.
Save fire-ant/4b143cc522614f8958c3903fa7151e8d to your computer and use it in GitHub Desktop.
merged cluster kubeconfigs
# #!/bin/bash
# hacky way of retrieving and merging vluster kubeconfigs by passing a vlaid k8s namespace as the first argument to the script
# storage
mkdir -p .kc
rm -f .kc/config
# check $1 is set
[ -z "$1" ] && echo "Usage: $0 <namespace>" && exit 1
# grab all the vluster kubeconfigs
get_kubeconfigs() {
kubectl get secrets -o json -n $1 | jq -r '.items[] | select(.metadata.name | test("-kubeconfig")).metadata.name'
}
# set to var
kc=$(get_kubeconfigs $1)
rename() {
echo $1 | sed 's/-.*//g'
}
# convert to kubeconfigs and rename contexts and cluster names
for i in $kc; do
name=$(rename $i)
echo "retrieving kubeconfig for $i.."
kubectl get secret $i -o json -n $1 | jq -r '.data.value' | base64 -d >> .kc/$name-config
kubectl config rename-context my-vcluster $i --kubeconfig=.kc/$name-config
VAL=$name yq -i e '.clusters[].name |= strenv(VAL)' .kc/$name-config
done
# merge kubeconfigs
export KUBECONFIG=$(find .kc/ -type f | tr '\n' ':')
echo $KUBECONFIG
kubectl config view --flatten >> .kc/config
for i in $kc; do
name=$(rename $i)
rm .kc/$name-config
done
echo "merged kubeconfig is now in .kc/config"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment