35 lines
1.7 KiB
Bash
Executable File
35 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Генерация и применение OpenFlow-пайплайна.
|
|
# Вызывается из entrypoint.sh при старте и вручную (make flows) при правках.
|
|
#
|
|
# apply.sh применить пайплайн и попросить hcd перезалить слоты
|
|
# apply.sh --no-reapply только пайплайн (демон ещё не запущен)
|
|
set -euo pipefail
|
|
|
|
LB_DIR=/opt/lb
|
|
# shellcheck disable=SC1091
|
|
source "$LB_DIR/topology.env"
|
|
|
|
FLOWS=/var/run/openvswitch/flows.txt
|
|
|
|
# Группа балансировки шага 1 больше не используется: её место заняла таблица
|
|
# слотов (таблица 11), которую ведёт демон hcd.
|
|
ovs-ofctl -O "$OF" del-groups "$BR" 2>/dev/null || true
|
|
|
|
# Правила применяются атомарным бандлом: датапас не проходит через
|
|
# промежуточное состояние с частично залитым пайплайном.
|
|
"$LB_DIR/pipeline.sh" > "$FLOWS"
|
|
ovs-ofctl -O "$OF" --bundle replace-flows "$BR" "$FLOWS"
|
|
|
|
echo "[lb-router] пайплайн применён: $(grep -cv '^\s*\(#\|$\)' "$FLOWS") правил"
|
|
|
|
# replace-flows стирает и таблицу слотов, поэтому демона просят залить её
|
|
# заново — в актуальном составе пула, а не в полном.
|
|
if [ "${1:-}" != "--no-reapply" ]; then
|
|
if out=$(curl -fsS --max-time 5 "http://$HC_API/reapply" 2>&1); then
|
|
echo "[lb-router] $out"
|
|
else
|
|
echo "[lb-router] hcd недоступен ($out) — таблица слотов пуста, датапас в fail-close" >&2
|
|
fi
|
|
fi
|