v5.0.0
=====================================================================
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
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#####################################################################
|
||||
|
||||
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|/.*$||')"
|
||||
}
|
||||
Reference in New Issue
Block a user