=====================================================================
DEPRECATION REMINDER!
The following functions and APIS are no longer available:
- FZF_HEAD : use FZF as a drop-in replacement
- FZF_TAIL : use FZF as a drop-in replacement
- SCWRYPTS__GET_RUNSTRING__zsh_v3 : upgrade to zsh/scwrypts v4
                                    runstrings
--- Bug Fixes ----------------------------
- removed legacy INFO references in plugins/kubectl
- the zsh-builder plugin (CTRL+Y) now show clean helpdocs (no more
  visual terminal artifacts)
--- New Features -------------------------
- differentiate manual / managed versions of scwrypts in versioning;
  this will prevent 'scwrypts --update' from operating against managed
  installations
- created SCWRYPTS__GET_RUNSTRING__zsh__generic to provide an easy way
  to write custom runstrings; this will do all the nice things default
  zsh/scwrypts v4 do (multiflag separation, help flag injection, USAGE
  definitions, and required MAIN() {} wrapper).
		
	
		
			
				
	
	
		
			159 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #####################################################################
 | |
| 
 | |
| DEPENDENCIES+=(
 | |
| 	kubectl
 | |
| )
 | |
| 
 | |
| REQUIRED_ENV+=()
 | |
| 
 | |
| use redis --group kubectl
 | |
| 
 | |
| #####################################################################
 | |
| 
 | |
| KUBECTL() {
 | |
| 	local NAMESPACE=$(REDIS get --prefix "current:namespace")
 | |
| 	local CONTEXT=$(KUBECTL__GET_CONTEXT)
 | |
| 
 | |
| 	local KUBECTL_ARGS=()
 | |
| 	[ $NAMESPACE ] && KUBECTL_ARGS+=(--namespace $NAMESPACE)
 | |
| 	[ $CONTEXT   ] && KUBECTL_ARGS+=(--context $CONTEXT)
 | |
| 
 | |
| 	kubectl ${KUBECTL_ARGS[@]} $@
 | |
| }
 | |
| 
 | |
| #####################################################################
 | |
| 
 | |
| KUBECTL__GET_CONTEXT() { REDIS get --prefix "current:context"; }
 | |
| 
 | |
| KUBECTL__SET_CONTEXT() {
 | |
| 	local CONTEXT=$1
 | |
| 	[ ! $CONTEXT ] && return 1
 | |
| 
 | |
| 	[[ $CONTEXT =~ reset ]] && {
 | |
| 		: \
 | |
| 			&& REDIS del --prefix "current:context" \
 | |
| 			&& KUBECTL__SET_NAMESPACE reset \
 | |
| 			;
 | |
| 		return $?
 | |
| 	}
 | |
| 
 | |
| 	: \
 | |
| 		&& REDIS set --prefix "current:context" "$CONTEXT" \
 | |
| 		&& KUBECTL__SET_NAMESPACE reset \
 | |
| 		;
 | |
| }
 | |
| 
 | |
| KUBECTL__SELECT_CONTEXT() {
 | |
| 	KUBECTL__LIST_CONTEXTS | FZF 'select a context'
 | |
| }
 | |
| 
 | |
| KUBECTL__LIST_CONTEXTS() {
 | |
| 	echo reset
 | |
| 	local ALL_CONTEXTS=$(KUBECTL config get-contexts -o name | sort)
 | |
| 
 | |
| 	echo $ALL_CONTEXTS | grep -v '^arn:aws:eks'
 | |
| 
 | |
| 	[[ $AWS_ACCOUNT ]] && {
 | |
| 		echo $ALL_CONTEXTS | grep "^arn:aws:eks:.*:$AWS_ACCOUNT"
 | |
| 		true
 | |
| 	} || {
 | |
| 		echo $ALL_CONTEXTS | grep '^arn:aws:eks'
 | |
| 	}
 | |
| }
 | |
| 
 | |
| #####################################################################
 | |
| 
 | |
| KUBECTL__GET_NAMESPACE() { REDIS get --prefix "current:namespace"; }
 | |
| 
 | |
| KUBECTL__SET_NAMESPACE() {
 | |
| 	local NAMESPACE=$1
 | |
| 	[ ! $NAMESPACE ] && return 1
 | |
| 
 | |
| 	[[ $NAMESPACE =~ reset ]] && {
 | |
| 		REDIS del --prefix "current:namespace"
 | |
| 		return $?
 | |
| 	}
 | |
| 
 | |
| 	REDIS set --prefix "current:namespace" "$NAMESPACE"
 | |
| }
 | |
| 
 | |
| KUBECTL__SELECT_NAMESPACE() {
 | |
| 	KUBECTL__LIST_NAMESPACES | FZF 'select a namespace'
 | |
| }
 | |
| 
 | |
| KUBECTL__LIST_NAMESPACES() {
 | |
| 	echo reset
 | |
| 	echo default
 | |
| 	KUBECTL get namespaces -o name | sed 's/^namespace\///' | sort
 | |
| }
 | |
| 
 | |
| #####################################################################
 | |
| 
 | |
| KUBECTL__SERVE() {
 | |
| 	[ $CONTEXT ] || local CONTEXT=$(KUBECTL__GET_CONTEXT)
 | |
| 	[ $CONTEXT ] || ERROR 'must configure a context in which to serve'
 | |
| 
 | |
| 	[ $NAMESPACE ] || local NAMESPACE=$(KUBECTL__GET_NAMESPACE)
 | |
| 	[ $NAMESPACE ] || ERROR 'must configure a namespace in which to serve'
 | |
| 
 | |
| 	CHECK_ERRORS --no-fail --no-usage || return 1
 | |
| 
 | |
| 	[ $SERVICE ] && SERVICE=$(KUBECTL__LIST_SERVICES | jq -c "select (.service == \"$SERVICE\")" || echo $SERVICE)
 | |
| 	[ $SERVICE ] || local SERVICE=$(KUBECTL__SELECT_SERVICE)
 | |
| 	[ $SERVICE ] || ERROR 'must provide or select a service'
 | |
| 
 | |
| 	KUBECTL__LIST_SERVICES | grep -q "^$SERVICE$"\
 | |
| 		|| ERROR "no service '$SERVICE' in '$CONFIG/$NAMESPACE'"
 | |
| 
 | |
| 	CHECK_ERRORS --no-fail --no-usage || return 1
 | |
| 
 | |
| 	##########################################
 | |
| 
 | |
| 	SERVICE_PASSWORD="$(KUBECTL__GET_SERVICE_PASSWORD)"
 | |
| 	KUBECTL__SERVICE_PARSE
 | |
| 
 | |
| 	REMINDER "attempting to serve ${NAMESPACE}/${SERVICE_NAME}:${SERVICE_PORT}"
 | |
| 	[ $SERVICE_PASSWORD ] && REMINDER "password : $SERVICE_PASSWORD"
 | |
| 
 | |
| 	KUBECTL port-forward service/$SERVICE_NAME $SERVICE_PORT
 | |
| }
 | |
| 
 | |
| KUBECTL__SELECT_SERVICE() {
 | |
| 	[ $NAMESPACE ] || local NAMESPACE=$(KUBECTL__GET_NAMESPACE)
 | |
| 	[ $NAMESPACE ] || return 1
 | |
| 
 | |
| 	local SERVICES=$(KUBECTL__LIST_SERVICES)
 | |
| 	local SELECTED=$({
 | |
| 		echo "namespace service port"
 | |
| 		echo $SERVICES \
 | |
| 			| jq -r '.service + " " + .port' \
 | |
| 			| sed "s/^/$NAMESPACE /" \
 | |
| 			;
 | |
| 	} \
 | |
| 		| column -t \
 | |
| 		| FZF 'select a service' --header-lines=1 \
 | |
| 		| awk '{print $2;}' \
 | |
| 	)
 | |
| 
 | |
| 	echo $SERVICES | jq -c "select (.service == \"$SELECTED\")"
 | |
| }
 | |
| 
 | |
| KUBECTL__LIST_SERVICES() {
 | |
| 	KUBECTL get service --no-headers\
 | |
| 		| awk '{print "{\"service\":\""$1"\",\"ip\":\""$3"\",\"port\":\""$5"\"}"}' \
 | |
| 		| jq -c 'select (.ip != "None")' \
 | |
| 		;
 | |
| }
 | |
| 
 | |
| KUBECTL__GET_SERVICE_PASSWORD() {
 | |
| 	[ $PASSWORD_SECRET ] && [ $PASSWORD_KEY ] || return 0
 | |
| 
 | |
| 	KUBECTL get secret $PASSWORD_SECRET -o jsonpath="{.data.$PASSWORD_KEY}" \
 | |
| 		| base64 --decode
 | |
| }
 | |
| 
 | |
| KUBECTL__SERVICE_PARSE() {
 | |
| 	SERVICE_NAME=$(echo $SERVICE | jq -r .service)
 | |
| 	SERVICE_PORT=$(echo $SERVICE | jq -r .port | sed 's|/.*$||')
 | |
| }
 |