Compare commits

..

2 commits

Author SHA1 Message Date
7e2bd241fb Merge pull request 'fix ordered domain' (#11) from refactor into main
All checks were successful
Deploy DNS Configuration / deploy (push) Successful in 7m45s
Reviewed-on: #11
2026-03-22 23:13:09 +03:00
c3a30da18f fix ordered domain 2026-03-22 22:59:49 +03:00

View file

@ -250,15 +250,21 @@ declare -a ORDERED_DOMS=()
for dom in $(printf '%s\n' "${!EXPANDED[@]}" | sort -u); do
[[ "${SOURCES[$dom]:-}" == "related" ]] && continue
# Базовый домен мог быть добавлен как related другим базовым доменом раньше по
# алфавиту — пропускаем, чтобы не дублировать запись в конфиге.
[[ -n "${WRITTEN[$dom]:-}" ]] && continue
# Собираем ещё не записанные связанные домены.
# while выполняется в subshell — читает снимок WRITTEN, что корректно исключает
# домены, уже занятые предыдущим базовым доменом.
# Базовые домены (SOURCES==base) пропускаем — у них будет своя секция.
mapfile -t base_related < <(
if [[ -n "${SITE_RELATED[$dom]:-}" ]]; then
tr ' ' '\n' <<< "${SITE_RELATED[$dom]}" | grep -v '^$' | sort -u | \
while IFS= read -r rd; do
[[ -z "${WRITTEN[$rd]:-}" ]] && printf '%s\n' "$rd"
[[ -n "${WRITTEN[$rd]:-}" ]] && continue
[[ "${SOURCES[$rd]:-}" == "base" ]] && continue
printf '%s\n' "$rd"
done
fi
)
@ -281,6 +287,27 @@ done
mapfile -t ALL_DOMAINS < <(printf "%s\n" "${!EXPANDED[@]}" | sort -u)
# ==============================
# Проверка уникальности ORDERED_DOMS перед записью
# ==============================
declare -A _seen=()
declare -a _dups=()
for _d in "${ORDERED_DOMS[@]}"; do
if [[ -n "${_seen[$_d]:-}" ]]; then
_dups+=("$_d")
fi
_seen["$_d"]=1
done
unset _seen
if [[ ${#_dups[@]} -gt 0 ]]; then
err "BUG: ${#_dups[@]} duplicate domain(s) found in output list — config NOT written"
for _d in "${_dups[@]}"; do
err " duplicate: $_d"
done
exit 5
fi
# Записываем конфиги одним батчем (не по одной строке через >>)
if ! $DRY_RUN; then
{