diff --git a/ktx b/ktx old mode 100644 new mode 100755 index f3a76fc..0facef8 --- a/ktx +++ b/ktx @@ -2,6 +2,16 @@ CUR_FILE="$HOME/.kube/current" +_create_file_and_switch() { + CONTEXT=${1} + NAMESPACE=${2} + FILENAME="$HOME/.kube/ktx/${CONTEXT}_${NAMESPACE}.conf" + kubectl config view --minify --flatten --context ${CONTEXT} > ${FILENAME} + export KUBECONFIG=${FILENAME} + kubectl config set-context --current --namespace=${NAMESPACE} + ln -sf ${FILENAME} ${CUR_FILE} +} + # Switch context # Usage: ktx [cluster] [namespace] @@ -11,24 +21,18 @@ ktx() { NAMESPACE=${2:-} if [ -z $CONTEXT ]; then - SELECTION=$(kubectl config get-contexts | awk '{print $2"|"$4}' | tail +2 | sort -r | fzf) + # unset KUBECONFIG= variable here to always start with the global config + SELECTION=$(KUBECONFIG= kubectl config view -o json | jq -r '.contexts[] | "\(.name)|\(.context.namespace // "default")"' | sort -r | fzf) CONTEXT=$(echo $SELECTION | cut -d"|" -f1) DEFAULT_NS=$(echo $SELECTION | cut -d"|" -f2) fi + # Take default namespace if user didn't supplied a specific one if [ -z $NAMESPACE ]; then NAMESPACE=${DEFAULT_NS} fi - FILENAME="$HOME/.kube/frickel/${CONTEXT}_${NAMESPACE}.conf" - - kubectl config view --minify --flatten --context $CONTEXT > ${FILENAME} - - export KUBECONFIG=${FILENAME} - - kubectl config set-context --current --namespace=$NAMESPACE - - ln -sf ${FILENAME} ${CUR_FILE} + _create_file_and_switch ${CONTEXT} ${NAMESPACE} } # Switch namespace @@ -37,10 +41,11 @@ kn() { NAMESPACE=${1:-} if [ -z $NAMESPACE ]; then - NAMESPACE=$(kubectl get namespace | awk '{ print $1 }' | tail +2 | sort -r | fzf) + NAMESPACE=$(kubectl get namespace --no-headers | awk '{print $1}' | sort -r | fzf) fi - - kubectl config set-context --current --namespace=$NAMESPACE + + CONTEXT=$(kubectl config get-contexts | grep "*" | awk '{print $2}') + _create_file_and_switch ${CONTEXT} ${NAMESPACE} } if [ -f ${CUR_FILE} ]; then