From cdd967c48d7bf58b9f02e7c59aa3f18dbf38c666 Mon Sep 17 00:00:00 2001 From: James Downie Date: Wed, 4 Jun 2025 22:00:20 +1000 Subject: [PATCH] Added my k3s commands. --- jdownie/k3s/ka | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ jdownie/k3s/kd | 46 ++++++++++++++++++++++++++++++++++ jdownie/k3s/ke | 21 ++++++++++++++++ jdownie/k3s/kl | 25 +++++++++++++++++++ jdownie/k3s/ks | 45 +++++++++++++++++++++++++++++++++ 5 files changed, 205 insertions(+) create mode 100755 jdownie/k3s/ka create mode 100755 jdownie/k3s/kd create mode 100755 jdownie/k3s/ke create mode 100755 jdownie/k3s/kl create mode 100755 jdownie/k3s/ks diff --git a/jdownie/k3s/ka b/jdownie/k3s/ka new file mode 100755 index 0000000..bc6afe0 --- /dev/null +++ b/jdownie/k3s/ka @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +T="`mktemp`" +if [ "$1" = "-r" ]; then + find . -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T" + find . -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T" +else + find . -maxdepth 1 -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T" + find . -maxdepth 1 -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T" +fi +for f in $( sort "$T" ); do + if [ -d "$f" ]; then + if [[ "`basename $f`" =~ ^[0-9][0-9]-ConfigMap-.*$ ]]; then + NAME="" + NAMESPACE="" + if [ ! -f "$f/config.json" ]; then + echo "Warning: Missing $f/vars" + else + CFG="$f/config.json" + NAME="`jq -r .name "$CFG"`" + NAMESPACE="`jq -r .namespace "$CFG"`" + fi + FOUT="`mktemp`" + cat < $FOUT +apiVersion: v1 +kind: ConfigMap +metadata: + name: $NAME + namespace: $NAMESPACE +data: +EOF + FILES="`mktemp`" + find "$f" -type f > "$FILES" + for FILE in $(cat "$FILES"); do + BASENAME="`basename "$FILE"`" + if [ "$BASENAME" != "config.json" ]; then + jq -e ".base64[] | select(. == \"$BASENAME\")" "$CFG" > /dev/null + if [ $? -eq 0 ]; then + echo " $BASENAME.base64: |" >> "$FOUT" + base64 "$FILE" | tr -d '\n' | sed "s/^/ /" >> "$FOUT" + echo "" >> "$FOUT" + else + echo " $BASENAME: |" >> "$FOUT" + sed "s/^/ /" "$FILE" >> "$FOUT" + fi + fi + done + rm "$FILES" + kubectl apply -f "$FOUT" + rm "$FOUT" + else + echo "Dunno: $f" + fi + else + D="`dirname "$f"`" + if [ -f "$D/env" ]; then + source "$D/env" + fi + EXT="`echo "$f" | tr '.' '\n' | tail -n 1`" + if [ "$EXT" = "url" ]; then + url=$(head -n 1 "$f" | tr -d '\n') + kubectl apply -f "$url" + else + envsubst < "$f" | kubectl apply -f - + fi + fi +done +rm "$T" diff --git a/jdownie/k3s/kd b/jdownie/k3s/kd new file mode 100755 index 0000000..0e5743a --- /dev/null +++ b/jdownie/k3s/kd @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +T="`mktemp`" +if [ "$1" = "-r" ]; then + find . -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T" + find . -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T" +else + find . -maxdepth 1 -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T" + find . -maxdepth 1 -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T" +fi +for f in $( sort -r "$T" ); do + if [ -d "$f" ]; then + if [[ "`basename $f`" =~ ^[0-9][0-9]-ConfigMap-.*$ ]]; then + NAME="" + NAMESPACE="" + if [ ! -f "$f/config.json" ]; then + echo "Warning: Missing $f/vars" + else + CFG="$f/config.json" + NAME="`jq -r .name "$CFG"`" + NAMESPACE="`jq -r .namespace "$CFG"`" + fi + FOUT="`mktemp`" + cat < $FOUT +apiVersion: v1 +kind: ConfigMap +metadata: + name: $NAME + namespace: $NAMESPACE +EOF + kubectl delete -f "$FOUT" + rm "$FOUT" + fi + else + EXT="`echo "$f" | tr '.' '\n' | tail -n 1`" + if [ "$EXT" = "url" ]; then + url=$(head -n 1 "$f" | tr -d '\n') + echo "$url" + kubectl delete -f "$url" + else + kubectl delete -f "$f" + fi + fi +done +rm "$T" + diff --git a/jdownie/k3s/ke b/jdownie/k3s/ke new file mode 100755 index 0000000..8e44dcf --- /dev/null +++ b/jdownie/k3s/ke @@ -0,0 +1,21 @@ +#!/bin/bash + +NS="$1" +PODS="`mktemp`" +kubectl -n "$NS" --output=json get pods \ + | jq -r .items[].metadata.name \ + > "$PODS" +for POD in $(cat "$PODS"); do + CONTAINERS="`mktemp`" + kubectl -n "$NS" --output=json get pod "$POD" \ + | jq -r .spec.containers[].name \ + > "$CONTAINERS" + for CONTAINER in $(cat "$CONTAINERS"); do + # echo -e "$POD:\t$CONTAINER" + if [ "$CONTAINER" = "$2" ]; then + kubectl -n "$NS" exec -ti "$POD" -c "$CONTAINER" -- "$3" + fi + done + rm "$CONTAINERS" +done +rm "$PODS" diff --git a/jdownie/k3s/kl b/jdownie/k3s/kl new file mode 100755 index 0000000..fe53c4d --- /dev/null +++ b/jdownie/k3s/kl @@ -0,0 +1,25 @@ +#!/bin/bash + +NS="$1" +PODS="`mktemp`" +kubectl -n "$NS" --output=json get pods \ + | jq -r .items[].metadata.name \ + > "$PODS" +for POD in $(cat "$PODS"); do + CONTAINERS="`mktemp`" + kubectl -n "$NS" --output=json get pod "$POD" \ + | jq -r .spec.containers[].name \ + > "$CONTAINERS" + for CONTAINER in $(cat "$CONTAINERS"); do + # echo -e "$POD:\t$CONTAINER" + if [ "$CONTAINER" = "$2" ]; then + if [ "$3" = "-f" ]; then + kubectl -n "$NS" logs -f "$POD" -c "$CONTAINER" + else + kubectl -n "$NS" logs "$POD" -c "$CONTAINER" + fi + fi + done + rm "$CONTAINERS" +done +rm "$PODS" diff --git a/jdownie/k3s/ks b/jdownie/k3s/ks new file mode 100755 index 0000000..ee6614a --- /dev/null +++ b/jdownie/k3s/ks @@ -0,0 +1,45 @@ +#!/bin/bash + +function ks { + NAMESPACES="`mktemp`" + kubectl get namespaces --output=json \ + | jq -r .items[].metadata.name \ + | grep -v "^kube-system$" \ + | grep -v "^kube-public$" \ + | grep -v "^kube-node-lease$" \ + > "$NAMESPACES" + for NAMESPACE in $(cat "$NAMESPACES"); do + DEPLOYMENTS="`mktemp`" + DEPLOYMENT_PODS="`mktemp`" + kubectl -n "$NAMESPACE" get deployments --output=json \ + | jq -r .items[].metadata.name \ + > "$DEPLOYMENTS" + for DEPLOYMENT in $(cat "$DEPLOYMENTS"); do + PODS="`mktemp`" + kubectl -n "$NAMESPACE" --selector "app=$DEPLOYMENT" get pods --output=json \ + | jq -r .items[].metadata.name \ + > "$PODS" + cat "$PODS" >> "$DEPLOYMENT_PODS" + for POD in $(cat "$PODS"); do + STATUS="`kubectl -n "$NAMESPACE" --selector="app=$DEPLOYMENT" get pods --output=json | jq -r ".items[] | select(.metadata.name==\\\"$POD\\\") | .status.phase"`" + echo -e "$NAMESPACE\t$DEPLOYMENT\t$POD\t$STATUS" + done + rm "$PODS" + done + PODS="`mktemp`" + kubectl -n "$NAMESPACE" get pods --output=json \ + | jq -r .items[].metadata.name \ + | grep -v -f "$DEPLOYMENT_PODS" \ + > "$PODS" + for POD in $(cat "$PODS"); do + STATUS="`kubectl -n "$NAMESPACE" get pods --output=json | jq -r ".items[] | select(.metadata.name==\\\"$POD\\\") | .status.phase"`" + echo -e "$NAMESPACE\t_\t$POD\t$STATUS" + done + rm "$PODS" + rm "$DEPLOYMENT_PODS" + rm "$DEPLOYMENTS" + done + rm "$NAMESPACES" +} + +ks | column -t | sort