#! /usr/bin/env bash SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) USER_HOME=$HOME [[ -n "${SUDO_USER}" ]] && USER_HOME="$(eval "echo ~${SUDO_USER}")" . ${SHRC_D:-$SCRIPT_DIR}/01_util.functions set -e get-apps() { k3s kubectl get --all-namespaces deployments.apps --sort-by='.metadata.namespace' "${@}" } FILTER1=('') FILTER2=() OUTPUT=() while [[ -n "$1" ]]; do ARG="${1}" shift if [[ "${#OUTPUT[@]}" -eq 0 && "$ARG" =~ ^-(N|name|names-only)$ ]]; then OUTPUT=(awk "'{print \$1;}'" \| sort --unique) elif [[ "${#OUTPUT[@]}" -eq 0 && "$ARG" =~ ^-Nx$ ]]; then OUTPUT=(awk "'{print \$1;}'" \| sed -e "'s|^ix-||'" \| sort --unique) elif [[ "${#OUTPUT[@]}" -eq 0 && "$ARG" =~ ^-(H|(no-?)(head(e(r(s)?)?)?))$ ]]; then OUTPUT=('grep' '.') elif [[ -z "${FILTER1[*]}" && "$ARG" =~ ^- ]]; then if [[ "$ARG" =~ ^(-A|--all)$ ]]; then FILTER1=('.') elif [[ "$ARG" =~ ^-(a|-active)$ ]]; then FILTER1=(-v '\b0/0\b') elif [[ "$ARG" =~ ^-(r|-ready)$ ]]; then FILTER1=('\b([1-9]\d*)/\1\b') elif [[ "$ARG" =~ ^-(l|-limbo)$ ]]; then FILTER1=('\b([0-9]+)/(?!\1)([1-9][0-9]*)\b') elif [[ "$ARG" =~ ^-(s|-stop|-stopped)$ ]]; then FILTER1=('\b0/0\b') elif [[ "$ARG" =~ ^(-h|-?|/h|/?|--help)$ ]]; then printf '%s\n' \ 'Usage:' \ " $(basename "$0") [grep -P filter]" \ '' \ ' Default behavior will list all apps' \ '' \ 'Arguments:' \ ' -h | --help Display this help/usage message' \ '' \ 'Filters:' \ ' -A | --all (default) List all apps' \ ' -a | --active List all active (non-stopped) apps' \ ' -r | --ready List all active apps in ready state' \ ' -s | --stopped List all apps in stopped state' \ ' -l | --limbo List all active apps not in ready state' \ '' \ 'Output:' \ ' -N | --names-only App names only' \ ' -Nx App names only with "ix-" prefix removed' \ ' -H | --no-headers No headers' exit 0 else printf '%s\n' \ "Invalid argument: $ARG" \ >&2 exit 1 fi else FILTER2=("${FILTER2[@]}" "$ARG") fi done APPS="$(get-apps)" HEADER="$(head -n1 <<<"$APPS")" APPS="$(tail +1 <<<"$APPS")" APPS="$( grep -E --color=no "$( get-apps --output=json | jq -r ' [.items[] | select( .metadata.labels."app.kubernetes.io/managed-by" == "Helm" ) | .metadata.namespace] | join( "|" ) ' )" <<<"$APPS" \ | grep -P "${FILTER1[@]}" \ | grep -P "${FILTER2[@]:-.}" )" if [[ "${#OUTPUT[@]}" -le 1 ]]; then echo "$HEADER" fi echo "$APPS" \ | eval "${OUTPUT[*]:-grep .}"