sless-primer/VM/VM_TEST_README.md

4.1 KiB
Raw Blame History

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):

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 пропускаются):

SKIP_DESTROY=1 bash vm_stress_test.sh 2>&1 | tee /tmp/vm_stress.log

Количество stress-циклов (default: 2):

STRESS_CYCLES=3 bash vm_stress_test.sh 2>&1 | tee /tmp/vm_stress.log

Анализ результатов

Быстрый обзор:

grep -E '\[(PASS|FAIL|SKIP)\]' /tmp/vm_stress.log

Только ошибки:

grep '\[FAIL\]' /tmp/vm_stress.log

Итоговая сводка — последние 20 строк лога:

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