sless-primer/VM/VM_TEST_README.md

107 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VM Stress Test — Инструкция по запуску
# 2026-03-30
## ⛔⛔⛔ КРИТИЧЕСКИЕ ПРАВИЛА ⛔⛔⛔
### ЗАПРЕЩЕНО (без исключений):
- **НЕ РЕДАКТИРОВАТЬ** `terraform.tfvars` — там JWT-токен, потеря = катастрофа
- **НЕ РЕДАКТИРОВАТЬ** `*.tf` файлы
- **НЕ РЕДАКТИРОВАТЬ** `vm_stress_test.sh`
- **НЕ ЗАПУСКАТЬ** `terraform` напрямую — только через скрипт
- **НЕ СОЗДАВАТЬ** новые файлы в этой директории
- **НЕ ДЕЛАТЬ** `sed`, `awk`, `cat >`, `tee` в terraform.tfvars
### ПОЧЕМУ:
Предыдущая версия скрипта содержала функцию `write_tfvars()` которая
перезаписывала `terraform.tfvars`. В процессе перезаписи был потерян
JWT-токен `api_token` (1200+ символов). Это привело к полному отказу
terraform и потере рабочего состояния. Восстановление заняло час.
### КАК РАБОТАЕТ НОВЫЙ СКРИПТ:
Переменные переопределяются через `-var` в terraform CLI.
Файл `terraform.tfvars` читается terraform автоматически,
но **НИКОГДА не перезаписывается** скриптом.
После каждой фазы проверяется md5sum terraform.tfvars.
Если файл изменился — **АВАРИЙНАЯ ОСТАНОВКА** (exit code 99).
---
## Запуск
### На VM (naeel@5.172.178.213):
```bash
cd ~/terra/sless/examples/VM
bash vm_stress_test.sh 2>&1 | tee /tmp/vm_stress_$(date +%Y%m%d_%H%M).log
```
### Быстрый прогон (без destroy/resurrect — фазы 7-9 пропускаются):
```bash
SKIP_DESTROY=1 bash vm_stress_test.sh 2>&1 | tee /tmp/vm_stress.log
```
### Количество stress-циклов (default: 2):
```bash
STRESS_CYCLES=3 bash vm_stress_test.sh 2>&1 | tee /tmp/vm_stress.log
```
---
## Анализ результатов
### Быстрый обзор:
```bash
grep -E '\[(PASS|FAIL|SKIP)\]' /tmp/vm_stress.log
```
### Только ошибки:
```bash
grep '\[FAIL\]' /tmp/vm_stress.log
```
### Итоговая сводка — последние 20 строк лога:
```bash
tail -20 /tmp/vm_stress.log
```
---
## Фазы теста
| # | Имя | Что делает |
|---|-----------------|---------------------------------------------------|
| 1 | BASELINE | apply с полным набором (packages+nginx+docker) |
| 2 | IDEMPOTENT | plan → "No changes" (проверка идемпотентности) |
| 3 | PARTIAL_DISABLE | отключить nginx + docker через -var |
| 4 | PARTIAL_ENABLE | включить обратно nginx + docker |
| 5 | REORDER_PACKAGES| изменить набор base_packages через -var |
| 6 | MANUAL_PURGE | удалить пакеты с VM по SSH → переустановить |
| 7 | DESTROY | terraform destroy → VM в suspend |
| 8 | RESURRECT | apply после destroy → VM просыпается |
| 9 | STRESS_CYCLES | N циклов destroy/apply подряд |
|10 | FINAL_SANITY | финальная проверка VM + пакеты + plan |
---
## Текущее состояние (baseline)
5 ресурсов в state:
- `nubes_vapp.vapp`
- `nubes_vc_vm_v3.vm`
- `sless_job.install_packages[0]`
- `sless_job.install_nginx[0]`
- `sless_job.install_docker[0]`
---
## Exit codes
| Code | Значение |
|------|---------------------------------------------|
| 0 | Все тесты PASS |
| 1 | Есть FAIL (см. лог) |
| 99 | terraform.tfvars был изменён — АВАРИЙНЫЙ СТОП |