SHELL := /bin/bash DC := docker compose # Скрипты подготовки хоста требуют root. Под root sudo не нужен и может # отсутствовать в системе. SUDO := $(shell [ "$$(id -u)" = 0 ] || echo sudo) .PHONY: help prereq shim shim-down build up down restart attach detach flows verify logs ports health slots drain enable metrics conns trace fdb shell help: @echo "Стенд hpnn_v2 — OVS: маршрутизация, балансировка, коммутация сегментов" @echo @echo " make prereq загрузить модуль openvswitch на хосте" @echo " make shim поднять macvlan-shim (проверка стенда с самого хоста)" @echo " make shim-down снять shim" @echo " make up собрать образы и запустить стенд" @echo " make down остановить стенд и удалить сети" @echo " make attach подключить ВМ сегментов к br-lb (после пересоздания)" @echo " make detach снять порты сегментов с моста" @echo " make flows перечитать pipeline.sh и перезалить пайплайн" @echo " make verify прогнать проверки" @echo " make ports порты моста br-lb" @echo " make health состояние членов пула по данным health-проб" @echo " make slots раскладка таблицы слотов и счётчики" @echo " make drain M=be1 вывести член из балансировки" @echo " make enable M=be1 вернуть член в балансировку" @echo " make metrics метрики Prometheus" @echo " make conns таблица соединений ct" @echo " make trace SRC=192.168.5.7 [SPORT=40000] [SEG=pub|p2|p3] ofproto/trace" @echo " make fdb таблица коммутации сегментов (выученные MAC)" @echo " make logs логи контейнеров" @echo " make shell shell в контейнере lb-router" prereq: $(SUDO) scripts/host-prereq.sh shim: $(SUDO) scripts/host-prereq.sh --shim shim-down: $(SUDO) scripts/host-prereq.sh --shim-down build: $(DC) build up: prereq $(DC) up -d --build @echo "Ждём готовности балансировщика..." @for i in $$(seq 40); do \ $(DC) exec -T lb-router curl -fsS --max-time 2 http://127.0.0.1:9111/status >/dev/null 2>&1 && break; \ sleep 1; \ done @$(MAKE) --no-print-directory attach @echo "Ждём, пока health-пробы увидят членов пула..." @sleep 6 @$(MAKE) --no-print-directory health # Порты ВМ сегментов создаёт гипервизор; в стенде их создаёт этот скрипт. # Повторить нужно после пересоздания любого контейнера сегмента. attach: $(SUDO) scripts/attach-segment.sh detach: $(SUDO) scripts/attach-segment.sh --detach down: $(DC) down restart: $(DC) restart lb-router flows: $(DC) exec -T lb-router /opt/lb/apply.sh verify: @scripts/verify.sh logs: $(DC) logs --tail=80 ports: $(DC) exec -T lb-router lbctl ports health: $(DC) exec -T lb-router lbctl health slots: $(DC) exec -T lb-router lbctl slots drain: $(DC) exec -T lb-router lbctl drain $(M) enable: $(DC) exec -T lb-router lbctl enable $(M) metrics: $(DC) exec -T lb-router lbctl metrics conns: $(DC) exec -T lb-router lbctl conns trace: $(DC) exec -T lb-router lbctl trace $(SRC) $(SPORT) $(SEG) fdb: $(DC) exec -T lb-router lbctl fdb shell: $(DC) exec lb-router bash