Files

3.7 KiB
Raw Permalink Blame History

VPNaaS Neutron to Sprut

Инструмент для миграции 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 34). 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