107 lines
4.1 KiB
Markdown
107 lines
4.1 KiB
Markdown
# 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 был изменён — АВАРИЙНЫЙ СТОП |
|