fix(vm_stress_test): make read-only workflow, add instructions and docs
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
# 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 был изменён — АВАРИЙНЫЙ СТОП |
|
||||
Reference in New Issue
Block a user