add: documentation
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
# Анализ сбоя создания VM (f12vmbad.har)
|
||||
|
||||
## Операция: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
|
||||
|
||||
### Статус операции
|
||||
- **isSuccessful**: `false`
|
||||
- **isInProgress**: `false`
|
||||
- **Время выполнения**: 15:08:01 → 15:11:42 (≈3 минуты 40 секунд)
|
||||
- **Причина**: Зависание на этапе **"Добавление правил FW"**
|
||||
|
||||
---
|
||||
|
||||
## Хронология выполнения (Stages)
|
||||
|
||||
### ✅ Этап 1: Подготовка среды
|
||||
- **Статус**: Успешно
|
||||
- **Длительность**: 13 секунд
|
||||
- **Действия**:
|
||||
- Определение ресурсной платформы: OK
|
||||
- Подготовка операции: OK
|
||||
- Определение переменных для работы с VM: OK
|
||||
|
||||
### ✅ Этап 2: Работа с сервисом (Cloud Director)
|
||||
- **Статус**: Успешно
|
||||
- **Длительность**: 192.8 секунды (~3 минуты)
|
||||
- **Действия**:
|
||||
- Подготовка конфигурационных файлов: OK
|
||||
- Авторизация в Cloud Director: OK
|
||||
- **Установка сервиса**: OK ✓
|
||||
- **VM `ff12web01` успешно создана в Cloud Director**
|
||||
|
||||
### ❌ Этап 3: Работа с сервисом (Firewall Rules)
|
||||
- **Статус**: **FAILED** ❌
|
||||
- **Длительность**: 15.5 секунд (зависание)
|
||||
- **Действие**: "Добавление правил FW [PROCESS]"
|
||||
- **Проблема**:
|
||||
- Процесс начался в 15:11:35.807
|
||||
- `dtFinish`: `null` (не завершился)
|
||||
- Сообщение осталось в статусе `[PROCESS]`
|
||||
|
||||
### ✅ Этап 4: Настройка vIP
|
||||
- **Статус**: Успешно
|
||||
- **Длительность**: 0.7 секунды
|
||||
- **Действия**: Выделение VIP-адресов: OK
|
||||
|
||||
### ✅ Этап 5: Настройка DNS
|
||||
- **Статус**: Успешно
|
||||
- **Длительность**: 1 секунда
|
||||
- **Действия**: Подготовка DNS записей: OK
|
||||
|
||||
---
|
||||
|
||||
## Корневая причина сбоя
|
||||
|
||||
### 🔥 Систематический сбой на этапе Firewall
|
||||
|
||||
**Факты**:
|
||||
1. VM успешно создана в Cloud Director (VCD).
|
||||
2. VIP-адреса выделены корректно.
|
||||
3. DNS-записи настроены.
|
||||
4. **Firewall Rules НЕ применены** → операция застопорилась и упала по таймауту.
|
||||
5. Процесс завис именно на вызове **"Добавление правил FW [PROCESS]"** без финализации.
|
||||
|
||||
### Возможные причины
|
||||
|
||||
#### 1. Проблемы с доступом к NSX Manager/Edge Gateway
|
||||
- При применении правил FW оркестратор обращается к NSX-T API.
|
||||
- Возможен таймаут из-за сетевой недоступности или перегрузки NSX Manager.
|
||||
- Отсутствие `errorLog` в ответе говорит о том, что запрос "завис", а не упал с явной ошибкой.
|
||||
|
||||
#### 2. Конфликт конфигурации Firewall
|
||||
- VM `ff12web01` создана в vApp `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`.
|
||||
- Если в этом vApp или Edge Gateway уже существуют противоречивые правила, новые правила могут не применяться.
|
||||
- Возможна попытка создания дублирующих NAT/FW правил.
|
||||
|
||||
#### 3. Недостаточность прав или квот
|
||||
- Пустое значение `accessIpList: ""` могло быть интерпретировано бэкендом как запрос на открытие доступа со всех адресов (`0.0.0.0/0`).
|
||||
- Если в организации есть политики безопасности, запрещающие такие правила, запрос может быть заблокирован без явной ошибки.
|
||||
|
||||
#### 4. Анализ переданных параметров
|
||||
|
||||
**Все основные параметры корректны**:
|
||||
- **vappUid**: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` ✓
|
||||
- **vmName**: `ff12web01` ✓
|
||||
- **CPU**: `1` ✓
|
||||
- **RAM**: `1` GB ✓
|
||||
- **osImage**: `Ubuntu_22-20G` ✓
|
||||
- **userPublicKey**: Валидный SSH-ключ `ssh-ed25519 AAAAC3Nz...` ✓
|
||||
- **userName**: `myuser` ✓
|
||||
- **accessPortList**: `["22"]` (SSH) ✓
|
||||
- **needEnableExternalIp**: `true` ✓
|
||||
|
||||
**Потенциально проблемные значения**:
|
||||
|
||||
1. **Пустые строки в опциональных полях**:
|
||||
- **svcOperationCfsParamId 411** (вероятно `vmDisk`): `""` — лучше передавать `null` или число.
|
||||
- **svcOperationCfsParamId 413** (вероятно `accessIpList`): `""` — ожидается JSON-массив типа `["0.0.0.0/0"]`.
|
||||
- **svcOperationCfsParamId 415** (вероятно `cloudInit`): `""` — опционально.
|
||||
|
||||
2. **Значение "no-needed" (ID 412)**:
|
||||
- Неясное назначение параметра. Возможно, это placeholder для неиспользуемого поля.
|
||||
|
||||
**Вывод**: Основные параметры валидны. Пустые строки в опциональных полях технически допустимы, но могут некорректно обрабатываться бэкендом.
|
||||
|
||||
---
|
||||
|
||||
## Рекомендации
|
||||
|
||||
### Немедленные действия для отладки
|
||||
|
||||
1. **Проверить логи NSX Manager**:
|
||||
- Посмотреть, поступал ли запрос на создание FW правил в момент `15:11:35.807`.
|
||||
- Если запрос отсутствует → проблема на стороне оркестратора (не дошел до NSX).
|
||||
- Если запрос есть, но с ошибкой → причина в конфигурации или правах.
|
||||
|
||||
2. **Проверить текущее состояние Edge Gateway**:
|
||||
- Посмотреть список правил FW для vApp `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`.
|
||||
- Убедиться, что нет конфликтующих правил для VM `ff12web01`.
|
||||
|
||||
3. **Проверить доступность NSX Manager**:
|
||||
- Убедиться, что NSX API отвечает на запросы.
|
||||
- Проверить сетевую связность между Jenkins (оркестратор) и NSX Manager.
|
||||
|
||||
4. **Повторить создание с улучшенными параметрами**:
|
||||
- Передавать `accessIpList` как JSON-массив: `["0.0.0.0/0"]` вместо пустой строки.
|
||||
- Для `vmDisk` указать либо `null`, либо конкретное значение (например, `"10"` для 10 GB).
|
||||
|
||||
### Для Terraform Provider
|
||||
|
||||
1. **Добавить проверку статуса стадий**:
|
||||
- Если `stage.dtFinish == null` и `duration > 30s` → считать операцию зависшей.
|
||||
- Отдавать понятное сообщение: "VM создана, но Firewall не настроен".
|
||||
|
||||
2. **Повторная попытка при Firewall Timeout**:
|
||||
- Если сбой на этапе "Добавление правил FW", попробовать `retry` с экспоненциальной задержкой.
|
||||
- Добавить опцию `skip_firewall_on_timeout` для продолжения деплоя без FW.
|
||||
|
||||
3. **Валидация параметров перед отправкой**:
|
||||
- Не передавать пустые строки для списков (`accessIpList`, `cloudInit`).
|
||||
- Для числовых полей использовать либо валидное значение, либо `null`.
|
||||
- Проверять формат JSON-массивов перед сериализацией.
|
||||
|
||||
4. **Расширенное логирование**:
|
||||
- Записывать в лог полный JSON всех отправленных параметров.
|
||||
- Логировать промежуточные статусы стадий для отладки таймаутов.
|
||||
|
||||
---
|
||||
|
||||
## Заключение
|
||||
|
||||
VM физически создана в Cloud Director, но из-за **таймаута на этапе применения Firewall Rules** ресурс считается неуспешно развернутым (`isSuccessful: false`).
|
||||
|
||||
**Основные подозреваемые**:
|
||||
1. Недоступность NSX Manager или перегрузка API.
|
||||
2. Конфликт правил FW в целевом Edge Gateway.
|
||||
3. Пустые значения в параметрах (`accessIpList: ""`, `vmDisk: ""`), которые могли некорректно обработаться бэкендом.
|
||||
|
||||
Для точной диагностики необходимо проверить логи Jenkins (оркестратор) и NSX Manager на момент `15:11:35 → 15:11:42`.
|
||||
Reference in New Issue
Block a user