diff --git a/livekit-ip-watch.v1.sh b/livekit-ip-watch.v1.sh index 3f8928d..1c7b83b 100644 --- a/livekit-ip-watch.v1.sh +++ b/livekit-ip-watch.v1.sh @@ -5,9 +5,9 @@ # Synapse: https://git.techniverse.net/scriptos/livekit-ip-watch.git # Autor: Patrick Asmus # Web: https://www.cleveradmin.de -# Version: 1.1 +# Version: 1.2 # Datum: 27.10.2025 -# Modifikation: healthcheck auf HTTP mit Custom URL umgestellt. +# Modifikation: Funktionen "update_yaml_with_yq" und "update_yaml_fallback" überarbeitet ##################################################### set -euo pipefail @@ -124,13 +124,25 @@ backup_config() { echo "$backup" } +is_mikefarah_yq() { + yq --version 2>&1 | grep -qi 'mikefarah' +} + update_yaml_with_yq() { local cidr="$1" - YQ_VAR_CIDR="$cidr" yq -i ' - .rtc |= (. // {}) | - .rtc.ips |= (. // {}) | - .rtc.ips.includes = [env(YQ_VAR_CIDR)] - ' "$CONFIG_FILE" + if is_mikefarah_yq; then + CIDR="$cidr" yq eval -i ' + .rtc = (.rtc // {}) | + .rtc.ips = (.rtc.ips // {}) | + .rtc.ips.includes = [env(CIDR)] + ' "$CONFIG_FILE" + else + yq -y -i --arg CIDR "$cidr" ' + .rtc = (.rtc // {}) | + .rtc.ips = (.rtc.ips // {}) | + .rtc.ips.includes = [$CIDR] + ' "$CONFIG_FILE" + fi } update_yaml_fallback() { @@ -138,35 +150,55 @@ update_yaml_fallback() { local tmp tmp="$(mktemp)" awk -v newcidr="$cidr" ' - BEGIN{ in_rtc=0; in_ips=0; in_includes=0; injected=0 } + function indent_of(s, m,sp) { match(s,/^([ ]*)/,m); sp=length(m[1]); return sp } + BEGIN { in_rtc=0; rtc_indent=-1; skipping_ips=0; ips_indent=-1; injected=0 } { line=$0 - if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; in_includes=0 } - else if (in_rtc && $0 ~ /^[[:space:]]*[[:alnum:]_]+:[[:space:]]*$/ && $0 !~ /^[[:space:]]*ips:/) { - if (!in_ips && !in_includes && !injected) { - print " ips:" - print " includes:" - print " - " newcidr - injected=1 - } + ind=indent_of(line) + + if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { + in_rtc=1; rtc_indent=ind; injected=0 + print line + next } - if (in_rtc && $0 ~ /^[[:space:]]*ips:[[:space:]]*$/) { in_ips=1; in_includes=0 } - if (in_ips && $0 ~ /^[[:space:]]*includes:[[:space:]]*$/) { in_includes=1; next } - if (in_includes) { - if ($0 ~ /^[[:space:]]*-[[:space:]]*[^[:space:]]+/) { + + if (in_rtc) { + if (skipping_ips) { + if (ind <= ips_indent) { + if (!injected) { + print " ips:" + print " includes:" + print " - " newcidr + injected=1 + } + skipping_ips=0 + } else { next } + } + + if ($0 ~ /^[[:space:]]*ips:[[:space:]]*$/ && ind > rtc_indent) { + skipping_ips=1; ips_indent=ind next - } else { + } + + if (ind <= rtc_indent && $0 ~ /^[[:alnum:]]_+:[[:space:]]*$/) { if (!injected) { + print " ips:" + print " includes:" print " - " newcidr injected=1 } - in_includes=0 - in_ips=($0 ~ /^[[:space:]]*ips:/)?1:0 + in_rtc=0; rtc_indent=-1 + print line + next } + + print line + next } + print line } - END{ + END { if (in_rtc && !injected) { print " ips:" print " includes:" @@ -177,14 +209,6 @@ update_yaml_fallback() { mv "$tmp" "$CONFIG_FILE" } -detect_compose_cmd() { - if command -v docker-compose >/dev/null 2>&1; then - echo "docker-compose" - else - echo "docker compose" - fi -} - restart_service() { if [[ "$RUNTIME" == "compose" ]]; then local dir file