Skip to content

Instantly share code, notes, and snippets.

@drGrove
Created October 12, 2023 03:40
Show Gist options
  • Save drGrove/fa0bc4933e23abc086946368b75e2477 to your computer and use it in GitHub Desktop.
Save drGrove/fa0bc4933e23abc086946368b75e2477 to your computer and use it in GitHub Desktop.
kubectl RBAC Resource and Verb list
#!/usr/bin/env bash
set -eou pipefail
list() {
CONTEXT="${1}"
APIS=$(kubectl --context "${CONTEXT}" get --raw /apis | jq -r '[.groups | .[].name] | join(" ")')
get "${CONTEXT}" "core"
for api in $APIS; do
get "${api}"
done
}
get() {
local api
api=${1:?api not provided}
local CONTEXT
CONTEXT=${2}
if [ "${api}" == "core" ]; then
kubectl --context "${CONTEXT}" get --raw /api/v1 | jq -r --arg api "${api}" '.resources | .[] | "\($api) \(.name): \(.verbs | join(" "))"'
else
version=$(kubectl --context "${CONTEXT}" get --raw "/apis/${api}" | jq -r '.preferredVersion.version')
kubectl --context "${CONTEXT}" get --raw "/apis/${api}/${version}" | jq -r --arg api "${api}" '.resources | .[]? | "\($api) \(.name): \(.verbs | join(" "))"'
fi
}
main() {
local VERSION
VERSION="1.0.0"
local CONTEXT
CONTEXT=""
local API
API=""
local COMMAND
COMMAND=""
while [ $# -gt 0 ]; do
case "$1" in
--context)
shift
CONTEXT="$1"
;;
--context=*)
CONTEXT="${1#*=}"
;;
version)
echo "${VERSION}"
exit 0
;;
list)
COMMAND="list"
;;
get)
COMMAND="get"
shift
API="$1"
;;
esac
shift
done
case "${COMMAND}" in
list)
list "${CONTEXT}"
;;
get)
get "${API}" "${CONTEXT}"
;;
esac
}
main $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment