VPNaaS-миграция: Neutron → Sprut (ipsec_migrator)
Инструмент для миграции VPNaaS (IPsec site-to-site) с Neutron-роутера OpenStack на «продвинутый» роутер (DC Router) в SDN Sprut.
Каждый Neutron-роутер из входного CSV сопоставлен с advanced-роутером в Sprut. Переносятся все IPsec-туннели, IKE/IPsec policy и endpoint groups, связанные с этим Neutron-роутером; объекты других роутеров того же OpenStack-проекта не затрагиваются.
Режимы запуска
1. Полный прогон (аудит + настройка Sprut)
python3 -m ipsec_migrator <input.csv> [output.json] [--dry-run]
Выполняет всё последовательно: аудит конфигурации Neutron (STAGE 1) → сбор существующих объектов в Sprut (STAGE 2) → создание недостающих объектов и site connection'ов (STAGE 3–4). output.json необязателен, по умолчанию — vpnaas_audit_<YYYYmmdd_HHMMSS>.json в текущей директории.
2. Только аудит (без обращений к Sprut на запись)
python3 -m ipsec_migrator --audit-only <input.csv> [output.json]
Выполняет только STAGE 1: проверяет, что Neutron- и advanced-роутеры существуют, собирает полную конфигурацию VPNaaS из Neutron и пишет её в JSON-файл. STAGE 2–4 (создание объектов в Sprut) не запускаются — скрипт завершается сразу после записи аудита.
3. Dry-run по ранее собранному аудиту
python3 -m ipsec_migrator --from-audit <audit.json> --dry-run
Пропускает повторный опрос OpenStack: все данные (IKE/IPsec policy, endpoint groups, VPN service, site connections) берутся из ранее сохранённого audit.json. Заново получает Keystone-токен и перепроверяет, что advanced-роутеры из аудита всё ещё существуют в Sprut (аудит мог быть сделан заранее). Дальше выполняются STAGE 2–4 в режиме симуляции: GET-запросы к Sprut выполняются по-настоящему (для сверки, что уже существует), но ни один объект не создаётся — вместо POST в лог пишется, что было бы отправлено (с маскированным PSK).
4. Реальная настройка продвинутого роутера по аудиту
python3 -m ipsec_migrator --from-audit <audit.json>
Рекомендуемый порядок для боевого прогона: --audit-only → ревью получившегося audit.json → --from-audit (без --dry-run). Так реальное создание объектов в Sprut — отдельный, осознанный шаг после проверки того, что именно будет создано.
Авто-создание целевого (advanced) роутера
Если advanced_router_id пуст, порт сам создаёт DC Router в Sprut.
В input.csv для порта вторая колонка (advanced_router_id) может быть
пустой:
neutron_router_id1,advanced_router_id1
neutron_router_id2,,MS1,standard
neutron_router_id3