diff --git a/livekit-ip-watch.v1.sh b/livekit-ip-watch.v1.sh index c1917f8..e428db9 100644 --- a/livekit-ip-watch.v1.sh +++ b/livekit-ip-watch.v1.sh @@ -139,36 +139,45 @@ update_yaml_fallback() { local tmp tmp="$(mktemp)" awk -v newcidr="$cidr" ' - BEGIN{ in_rtc=0; in_ips=0; in_includes=0; injected=0 } + BEGIN{ in_rtc=0; in_ips=0; ips_indent=""; printed_ips=0 } + function print_ips_block() { + if (!printed_ips) { + print " ips:" + print " includes:" + print " - " newcidr + printed_ips=1 + } + } { 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 + if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; ips_indent=""; print; next } + if (in_rtc) { + if (in_ips) { + if (ips_indent=="" ) { next } + if ($0 ~ "^" ips_indent "[^[:space:]]") { next } + in_ips=0 + print_ips_block() } - } - 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 ($0 ~ /^[[:space:]]{2}ips:[[:space:]]*$/) { + in_ips=1 + match($0,/^([[:space:]]*)ips:/,m) + ips_indent=m[1]" " next - } else { - if (!injected) { - print " - " newcidr - injected=1 - } - in_includes=0 - in_ips=($0 ~ /^[[:space:]]*ips:/)?1:0 } + if ($0 ~ /^[[:space:]]{2}[[:alnum:]_]+:[[:space:]]*$/) { + if (!printed_ips) { print_ips_block() } + } + if ($0 ~ /^[[:alnum:]_]+:[[:space:]]*$/) { + if (!printed_ips && in_rtc) { print_ips_block() } + in_rtc=0 + } + print line + next } print line } END{ - if (in_rtc && !injected) { + if (in_rtc && !printed_ips) { print " ips:" print " includes:" print " - " newcidr