===================================================================== Excited to bring V5 to life. This includes some BREAKING CHANGES to several aspects of ZSH-type scwrypts. Please refer to the readme for upgrade details (specifically docs/upgrade/v4-to-v5.md) --- New Features ------------------------- - ZSH testing library with basic mock capabilities - new scwrypts environment file format includes metadata and more advanced features like optional parent env overrides, selection inheritence, and improved structurual flexibility - speedup cache for non-CI runs of ZSH-type scwrypts - ${scwryptsmodule} syntax now allows a consistent unique-naming scheme for functions in ZSH-type scwrypts while providing better insight into origin of API calls in other modules - reusable, case-statement-driven argument parsers in ZSH-type scwrypts --- Changes ------------------------------ - several utility function renames in ZSH-type scwrypts to improve consistency - documentation comments included in ZSH libraries - ZSH-type scwrypts now allow library modules to live alongside executables (zsh/lib still supported; autodetection determines default) --- Bug Fixes ---------------------------- - hardened environment checking for REQUIRED_ENV variables; this removes the ability to overwrite variables in local function contexts
78 lines
2.5 KiB
Bash
78 lines
2.5 KiB
Bash
#####################################################################
|
|
|
|
use --group kube kubectl/cli
|
|
use --group kube kubectl/context
|
|
use --group kube kubectl/namespace
|
|
|
|
#####################################################################
|
|
|
|
${scwryptsmodule}.serve() {
|
|
[ "${CONTEXT}" ] || local CONTEXT="$(kube.kubectl.context.get)"
|
|
[ "${CONTEXT}" ] || echo.error 'must configure a context in which to serve'
|
|
|
|
[ "${NAMESPACE}" ] || local NAMESPACE="$(kube.kubectl.namespace.get)"
|
|
[ "${NAMESPACE}" ] || echo.error 'must configure a namespace in which to serve'
|
|
|
|
utils.check-errors --no-usage || return 1
|
|
|
|
[ "${SERVICE}" ] && SERVICE="$(kube.kubectl.service.list | jq -c "select (.service == \"${SERVICE}\")" || echo ${SERVICE})"
|
|
[ "${SERVICE}" ] || local SERVICE="$(kube.kubectl.service.select)"
|
|
[ "${SERVICE}" ] || echo.error 'must provide or select a service'
|
|
|
|
kube.kubectl.service.list | grep -q "^${SERVICE}$"\
|
|
|| echo.error "no service '${SERVICE}' in '${CONFIG}/${NAMESPACE}'"
|
|
|
|
utils.check-errors --no-usage || return 1
|
|
|
|
##########################################
|
|
|
|
SERVICE_PASSWORD="$(kube.kubectl.service.get-password)"
|
|
kube.kubectl.service.parse
|
|
|
|
echo.reminder "attempting to serve ${NAMESPACE}/${SERVICE_NAME}:${SERVICE_PORT}"
|
|
[ "${SERVICE_PASSWORD}" ] && echo.reminder "password : ${SERVICE_PASSWORD}"
|
|
|
|
kube.cli port-forward "service/${SERVICE_NAME}" "${SERVICE_PORT}"
|
|
}
|
|
|
|
#####################################################################
|
|
|
|
${scwryptsmodule}.select() {
|
|
[ "${NAMESPACE}" ] || local NAMESPACE="$(kube.kubectl.namespace.get)"
|
|
[ "${NAMESPACE}" ] || return 1
|
|
|
|
local SERVICES="$(kube.kubectl.service.list)"
|
|
local SELECTED="$({
|
|
echo "namespace service port"
|
|
echo ${SERVICES} \
|
|
| jq -r '.service + " " + .port' \
|
|
| sed "s/^/${NAMESPACE} /" \
|
|
;
|
|
} \
|
|
| column -t \
|
|
| utils.fzf 'select a service' --header-lines=1 \
|
|
| awk '{print $2;}' \
|
|
)"
|
|
|
|
echo "${SERVICES}" | jq -c "select (.service == \"${SELECTED}\")"
|
|
}
|
|
|
|
${scwryptsmodule}.list() {
|
|
kube.cli get service --no-headers\
|
|
| awk '{print "{\"service\":\""$1"\",\"ip\":\""$3"\",\"port\":\""$5"\"}"}' \
|
|
| jq -c 'select (.ip != "None")' \
|
|
;
|
|
}
|
|
|
|
${scwryptsmodule}.get-password() {
|
|
[ "${PASSWORD_SECRET}" ] && [ "${PASSWORD_KEY}" ] || return 0
|
|
|
|
kube.cli get secret "${PASSWORD_SECRET}" -o jsonpath="{.data.${PASSWORD_KEY}}" \
|
|
| base64 --decode
|
|
}
|
|
|
|
${scwryptsmodule}.parse() {
|
|
SERVICE_NAME="$(echo "${SERVICE}" | jq -r .service)"
|
|
SERVICE_PORT="$(echo "${SERVICE}" | jq -r .port | sed 's|/.*$||')"
|
|
}
|