penguin/utils

my env utils

commit 13dc0770b82d111aae6bf4640302934fcf0b7bc7

author斟酌 鵬兄 <tgckpg@gmail.com>
date2023-10-08T17:30:56Z
subjectAdded kcontext-k8s
commit 13dc0770b82d111aae6bf4640302934fcf0b7bc7
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date:   2023-10-08T17:30:56Z

    Added kcontext-k8s
---
 bash/sources/17_kcontext | 84 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 81 insertions(+), 3 deletions(-)

diff --git a/bash/sources/17_kcontext b/bash/sources/17_kcontext
index 180c1f0..67dd61a 100644
--- a/bash/sources/17_kcontext
+++ b/bash/sources/17_kcontext
@@ -6,7 +6,7 @@ if [ $? -ne 0 ]; then
 	return 1
 fi
 
-complete -W "k8s docker s3-arch" kcontext 
+complete -W "k8s docker s3-arch" kcontext
 
 function kcontext {
 	case $1 in
@@ -23,11 +23,89 @@ function kcontext {
 	return $?
 }
 
+function kcontext-k8s {
+	local _NAME _CONF
+	case $1 in
+		list)
+			kstore query -list "SELECT SUBSTR( prop, 5 ) FROM store WHERE key = 'kcontext' AND prop LIKE 'k8s.%'"
+			return $?
+			;;
+		save)
+			_NAME=$( kubectl config current-context )
+			if [ $? -ne 0 ]; then
+				return 1
+			fi
+
+			kstore get "kcontext" "k8s.$_NAME" 2> /dev/null > /dev/null
+			if [ $? -eq 0 ]; then
+				read -p "Replace existing config for \"$_NAME\"? (y/n): " _CONFIRM
+				if [ "$_CONFIRM" != "y" ]; then
+					return 0
+				fi
+				kubectl config view --minify --flatten | kstore update "kcontext" - "k8s.$_NAME"
+				return $?
+			else
+				kubectl config view --minify --flatten | kstore add "kcontext" - "k8s.$_NAME"
+				return $?
+			fi
+			;;
+		use)
+			_NAME=$2
+			if [ -z "$_NAME" ]; then
+				echo "Please specify a context name" >&2
+				return 1
+			fi
+
+			_CONF="$RBASH_HOME/k8s.conf"
+			kstore get "kcontext" "k8s.$_NAME" > "$_CONF"
+			if [ $? -ne 0 ]; then
+				echo "No such context: $_NAME" >&2
+				return 1
+			fi
+
+			chmod 600 "$_CONF"
+
+			echo $KUBECONFIG | grep "$_CONF" -q
+			if [ $? -eq 0 ]; then
+				export KUBECONFIG="$_CONF"
+			else
+				export KUBECONFIG="$_CONF:$KUBECONFIG"
+			fi
+			;;
+		del)
+			_NAME=$2
+			if [ -z "$_NAME" ]; then
+				echo "Please specify a context name" >&2
+				return 1
+			fi
+			kstore get "kcontext" "k8s.$_NAME" 2> /dev/null > /dev/null
+			if [ $? -eq 0 ]; then
+				read -p "Delete context \"$_NAME\"? (y/n): " _CONFIRM
+				if [ "$_CONFIRM" != "y" ]; then
+					return 0
+				fi
+				kstore query "DELETE FROM store WHERE key = 'kcontext' AND prop = 'k8s.$_NAME'"
+				return $?
+			else
+				echo "No such context: $_NAME" >&2
+			fi
+			;;
+		*)
+			__func_head "list"
+			__func_help "save"
+			__func_help "use NAME"
+			__func_help "del NAME"
+			;;
+	esac
+	return 1
+}
+
 function kcontext-s3-arch {
 	local _NAME _CONFIRM _URL _AUTH
 	case $1 in
 		list)
 			kstore query -list "SELECT SUBSTR( prop, 16 ) FROM store WHERE key = 'kcontext' AND prop LIKE 's3-arch.bucket.%'"
+			return $?
 			;;
 		save)
 			_NAME=$2
@@ -54,7 +132,7 @@ function kcontext-s3-arch {
 				echo "No s3-arch settings can be found in env" >&2
 			fi
 			;;
-		load)
+		use)
 			_NAME=$2
 			if [ -z "$_NAME" ]; then
 				echo "Please specify a context name" >&2
@@ -97,7 +175,7 @@ function kcontext-s3-arch {
 		*)
 			__func_head "list"
 			__func_help "save NAME"
-			__func_help "load NAME"
+			__func_help "use NAME"
 			__func_help "del NAME"
 			;;
 	esac