Collector daemon, FastAPI server (addresses, diff, collect, sources), SQLite storage with change journal, Docker Compose deployment, tests, documentation and project rules. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Итоги: форматы вывода, агрегация CIDR, ip_version
План: docs/plan-output-formats.md.
Сделано
formatters.py(новый): фильтр по версии IP, агрегация (ipaddress.collapse_addresses, отдельно v4/v6, после объединения источников), рендерnftables,mikrotik,bird,frr. Все скрипты идемпотентны (замена списка при повторном применении).GET /addresses: новые параметрыformat,ip_version,aggregate,name(валидация имени защищает от подстановки в конфиг, ошибки -> 422). Ответ по умолчанию не изменился.- README: таблица параметров, форматы и способы применения.
- Тесты:
tests/test_formats.py(3 теста, параметризованный на 4 формата). Всего 9 тестов, все в контейнере: 9 passed.
Проверка
- На реальных данных ответы
type=all|cidr|fqdnбез параметров побайтно совпадают с прежними. - Агрегация: 26 -> 14 записей;
ip_version=6отдаёт только IPv6. - Генерируемые конфиги: BIRD (
bird -p, Debian 12) - OK; nftables (nft -c, Alpine) - OK. - В процессе проверки найдена и исправлена ошибка: BIRD не принимает запятую после последнего элемента
[...](теперь запятые только между элементами).
Не проверено
- MikroTik и FRR не проверялись на реальном ПО (эмулятора нет), синтаксис сверен по документации. В FRR нужно убедиться, что
no ip prefix-list <name>для ещё не существующего списка не даёт ошибку приvtysh -f; если даёт - убрать эту строку или применять с-m. - Нет тестов на очень большие списки (десятки тысяч записей).
Замечания
- Формат
jsonсaggregate=trueпечатает/32и/128как «голый» IP. nftables: имя таблицы совпадает сname; свои правила пользователь добавляет в эту же таблицу (или создаёт набор в своей, изменивname).