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