diff --git a/_home/private_dot_local/bin/executable_szetup-kubectl4k3s b/_home/private_dot_local/bin/executable_szetup-kubectl4k3s new file mode 100644 index 0000000..d82f8b0 --- /dev/null +++ b/_home/private_dot_local/bin/executable_szetup-kubectl4k3s @@ -0,0 +1,120 @@ +#! /usr/bin/env bash +# shellcheck disable=SC2034,SC1090 +# SC2034 variables appear unsued. export if used externally +# - uneeded, as this checked whether script is sourced +# SC1090 Can't follow non-constant source + +# User basename instead of ${0:##*/} to be POSIX compliant +BASE_0=${BASE_0:-$(basename $0)} +SCRIPT_DIR=${SCRIPT_DIR:-"$( cd -- "$( dirname -- "$0" )" &> /dev/null && pwd )"} +BASE_SHELL=$(basename "$SHELL") + +# Helper function +is_sourced() { + if [ -n "$ZSH_VERSION" ]; then + case $ZSH_EVAL_CONTEXT in *:file:*) return 0;; esac + else + # case ${0##*/} in dash|-dash|bash|-bash|ksh|-ksh|sh|-sh) return 0;; esac + case "$(basename $0)" in $BASE_SHELL|-$BASE_SHELL) return 0;; esac + fi + return 1; # NOT sourced. +} + +if is_sourced; then + # This part is sourced, and might run in a non-bash shell + DBG_="Is Sourced" + USER_HOME=$HOME + [[ -n "${SUDO_USER}" ]] && USER_HOME="$(eval "echo ~${SUDO_USER}")" + + [[ -n "$KUBECONFIG" && -r "$KUBECONFIG" ]] || unset KUBECONFIG + + [[ ! -r "$HOME/.kube/config" ]] \ + || export KUBECONFIG="${KUBECONFIG:-$HOME/.kube/config}" + + if [[ -z "$KUBECONFIG" && -z "$FIX_KUBECTL_RECALL" ]]; then + (unset kubectl 2>/dev/null) || (unalias kubectl 2>/dev/null) || true + + export KUBECONFIG=/etc/rancher/k3s/k3s.yaml + fi + + (unset kubectl-fix 2> /dev/null) || true + + DBG_="Check if k3s exists, but kubectl isn't available" + if (type 'k3s' >/dev/null 2>&1) && ! (type 'kubectl' >/dev/null 2>&1); then + DBG_="Define kubectl" + if [[ -r "${KUBECONFIG}" ]]; then + kubectl() { k3s kubectl "${@}"; } + elif [[ -n "${KUBECONFIG}" && -e "${KUBECONFIG}" ]]; then + eval " + kubectl-fix() { + mkdir \"$HOME/.kube\" -p + if [[ -e \"\${KUBECONFIG}\" && ! -r \"$HOME/.kube/config\" ]]; then + sudo install --mod 600 --owner \"$USER\" \"\${KUBECONFIG}\" \"$HOME/.kube/config\" + unset KUBECONFIG + fi + FIX_KUBECTL_RECALL=1 . \"${SCRIPT_DIR}/${BASE_0}\" + }" + printf '%s\n' \ + "KUBECONFIG[${KUBECONFIG}] exsits, but is unreadable." \ + 'Run kubectl-fix (which will invoke sudo) to fix' + fi + fi + + if (type 'kubectl' >/dev/null 2>&1); then + + . <( kubectl completion "${BASE_SHELL}" ) + + if (type 'kubectl-cnpg' >/dev/null 2>&1 ); then + . <( kubectl cnpg completion "${BASE_SHELL}" ) + fi + if ! (type 'kubectl-cnpg' >/dev/null 2>&1) || [[ -n "$UPGRADE" ]]; then + DL_VER=1.22.0 + GH_URL=https://github.com/cloudnative-pg/cloudnative-pg + DL_FILE="kubectl-cnpg_${DL_VER}_linux_x86_64.deb" + URL=${GH_URL}/releases/download/v${DL_VER}/${DL_FILE} + printf '%s\n' \ + 'To download and install cnpg kubectl plugin, run:' \ + " curl -sSLO ${URL}" \ + " sudo dpkg -i $DL_FILE" + fi + + if ! (type 'kubetui' >/dev/null 2>&1) || [[ -n "$UPGRADE" ]]; then + DL_VER=1.5.0 + GH_URL=https://github.com/sarub0b0/kubetui + DL_FILE=kubetui-x86_64-unknown-linux-musl-rustls + URL=${GH_URL}/releases/download/v${DL_VER}/${DL_FILE} + printf '%s\n' \ + 'To download and install kubetui, run:' \ + " curl -sSL ${URL} > ~/bin/kubetui" \ + " chmod +x ~/bin/kubetui" + fi + + if ! (type 'k9s' >/dev/null 2>&1) || [[ -n "$UPGRADE" ]]; then + printf '%s\n' \ + 'To download and install k9s, run:' \ + " curl -sS https://webinstall.dev/k9s | bash" + fi + + if (type 'k3s' >/dev/null 2>&1 ); then + . <( k3s completion "${SHELL##*/}" ) + fi + + if (type 'helm' >/dev/null 2>&1); then + . <( helm completion "${SHELL##*/}" 2>/dev/null ) + fi + + kg() { + kubectl get "${NS:+--namespace=}${NS:---all-namespaces}" "${@:-pods}" | { sed -u 1q; sort; } + } + fi +elif [[ "$1" == '-' ]]; then + printf 'BASE_0="%s"\nSCRIPT_DIR=%s\n' "${BASE_0}" "${SCRIPT_DIR}" + cat "${BASH_SOURCE[0]}" +else + SCRIPT_NAME="$BASE_0" + printf '%s\n' \ + "It seems $SCRIPT_NAME was invoked as a script. It should be sourced instead." \ + 'The easiest way is to call it like this:' \ + " $ . <( $SCRIPT_NAME - ) # Note the '-' after the script's name" \ + '' +fi