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