Files
hpnn-proto/lb/apply.sh
T

34 lines
1.7 KiB
Bash
Raw Normal View History

#!/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