zsh/.zsh/functions/kube-ctx.zsh

# zsh/.zsh/functions/kube-ctx.zsh
# Per-shell KUBECONFIG so different tmux panes can target different clusters.

kctx() {
  if [[ $# -eq 0 ]]; then
    kubectl config current-context 2>/dev/null
    return
  fi
  local ctx="$1"
  if ! kubectl config get-contexts -o name | grep -qx "$ctx"; then
    print -u2 "kctx: unknown context '$ctx'"
    return 1
  fi
  # Use a per-shell config file to isolate this context to this pane.
  export KUBECONFIG="${TMPDIR:-/tmp}/kubeconfig.$$.$ctx"
  cp "${HOME}/.kube/config" "$KUBECONFIG"
  kubectl --kubeconfig="$KUBECONFIG" config use-context "$ctx" >/dev/null
  print "context: $ctx (pane-local)"
}

kns() {
  local ns="${1:?namespace required}"
  kubectl config set-context --current --namespace="$ns" >/dev/null
  print "namespace: $ns"
}

# Clean up per-shell KUBECONFIG temp files on exit.
TRAPEXIT() {
  [[ -n "${KUBECONFIG:-}" && "$KUBECONFIG" == ${TMPDIR:-/tmp}/kubeconfig.* ]] \
    && rm -f -- "$KUBECONFIG"
}