talos added

This commit is contained in:
2026-04-20 10:06:54 +02:00
parent 6ccfe53077
commit c95cd8b81c

71
bin/talos Normal file
View File

@@ -0,0 +1,71 @@
#!/usr/bin/env bash
### Usage ###
# talos context [optional-nodename] command
# Example:
# talos home dashboard
# talos home dashboard
# talos home talos-nuc-1 dashboard
# If wrong context or missing this script will output which contexts are available
CONFIG_FILE="$HOME/.talos/config"
# Check yq
if ! command -v yq &>/dev/null; then
echo "Error: yq (Go version v4+) not found."
exit 1
fi
# Read all contexts
mapfile -t CONTEXTS < <(yq e '.contexts | keys | .[]' "$CONFIG_FILE")
# Helper: check if value exists in array
function contains() {
local seeking=$1; shift
for element; do
[[ "$element" == "$seeking" ]] && return 0
done
return 1
}
# Require context
if [ -z "$1" ]; then
echo "Error: Context is required."
echo "Usage: talos <context> [node] <command>"
exit 1
fi
# Validate context
if ! contains "$1" "${CONTEXTS[@]}"; then
echo "Error: Invalid context '$1'"
echo "Available contexts:"
printf ' - %s\n' "${CONTEXTS[@]}"
exit 1
fi
CONTEXT="$1"
shift
# Load nodes for context
mapfile -t NODES < <(yq e ".contexts.${CONTEXT}.nodes[]" "$CONFIG_FILE")
NODE=""
# Check if next arg is a node
if [ -n "$1" ]; then
for n in "${NODES[@]}"; do
if [[ "$n" == "$1" || "${n%%.*}" == "$1" ]]; then
NODE="$n"
shift
break
fi
done
fi
# Execute
if [ -n "$NODE" ]; then
talosctl --context "$CONTEXT" -n "$NODE" -e "$NODE" "$@"
else
talosctl --context "$CONTEXT" "$@"
fi