Files
ripe-cidr-collector/docs/summary-output-formats.md
T

23 lines
2.6 KiB
Markdown
Raw Normal View History

2026-09-21 07:29:38 +03:00
# Итоги: форматы вывода, агрегация 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`).