examples/VM: sless_job provisioning (packages, nginx, docker)

- Add sless.tf: three sless_job resources with depends_on chain
  - vm-install-packages: jq, python3-pip, htop, unzip
  - vm-install-nginx: nginx 1.18 (HTTP 200 verified)
  - vm-install-docker: Docker CE 29.3.1 + Compose v5.1.1
- Add functions/install-{packages,nginx,docker}/handler.py
  - _wait_apt_lock: cloud-init status --wait + systemctl mask
    fixes Ubuntu 22.04 first-boot apt lock (unattended-upgrades)
  - DPkg::Lock::Timeout=600 on all apt-get calls
- Add variables.tf (install_run_id, vm_public_key, vm_private_key)
- Add outputs.tf (install_*_result)
- Bump nubes provider 5.0.49 -> 5.0.51
- doc/progress.md: document step 6 with bug analysis
This commit is contained in:
Naeel
2026-03-29 19:54:00 +03:00
parent b4c2e7f6b1
commit fef441681e
13 changed files with 1160 additions and 8 deletions
+57
View File
@@ -1417,3 +1417,60 @@ G15 перезапущен → **21/21 PASS ✅**
### Версия оператора
`v0.1.51` — задеплоен, работает
---
## Шаг 6: VM provisioning через sless_job (2026-03-29)
### Цель
Установить пакеты, nginx и docker на свежую Nubes VM через sless_job.
### Что реализовано
- `examples/VM/sless.tf` — три `sless_job` ресурса с `depends_on` цепочкой:
- `vm-install-packages` → jq, python3-pip, htop, unzip
- `vm-install-nginx` → nginx (depends_on install-packages)
- `vm-install-docker` → Docker CE 29.3.1 + Compose v5.1.1 (depends_on install-nginx)
- `examples/VM/variables.tf` — переменная `install_run_id` для управления rebuildом
---
## Шаг 6: VM provisioning через sless_job (2026-03-29)
### Цель
Установить пакеты, nginx и docker на свежую Nubes VM через sless_job.
### Что реализовано
- `examples/VM/sless.tf` — три `sless_job` ресурса с `depends_on` цепочкой:
- `vm-install-packages` → jq, python3-pip, htop, unzip
- `vm-install-nginx` → nginx (depends_on install-packages)
- `vm-install-docker` → Docker CE 29.3.1 + Compose v5.1.1 (depends_on install-nginx)
- `examples/VM/variables.tf` — переменная `install_run_id` для управления rebuild'ом
- `examples/VM/outputs.tf` — вывод результатов job'ов
- `examples/VM/functions/install-packages/handler.py` — SSH установка пакетов
- `examples/VM/functions/install-nginx/handler.py` — SSH установка nginx
- `examples/VM/functions/install-docker/handler.py` — SSH установка Docker CE
### Баги найдены и исправлены
#### Баг 1: Ubuntu 22.04 — cloud-init держит apt lock при старте VM
- **Симптом**: `E: Could not get lock /var/lib/dpkg/lock-frontend (held by process 2191)`
- **Причина**: `unattended-upgrades` держит lock через cloud-init 15-20 мин после старта VM
- **Фикс**: `_wait_apt_lock()` начинает с `cloud-init status --wait` (timeout 300s), затем `systemctl mask` сервисов авто-обновления
#### Баг 2: Оператор запускает СТАРЫЙ образ после upload
- **Симптом**: `image already exists in registry, skipping build` — новый код не применялся
- **Причина**: Go DEFLATE создавал идентичные байты zip для разных версий handler.py, sha256(zip) не менялся
- **Фикс**: изменение requirements.txt гарантирует уникальный zip hash
#### Баг 3: WaitJobDone мгновенно возвращал ошибку на старый Failed статус
- **Симптом**: terraform apply падает мгновенно без ожидания нового build
- **Причина**: FunctionJob CRD хранил phase=Failed от предыдущего запуска
- **Воркараунд**: удалить FunctionJob CRD перед apply
### Результат
- vm-install-packages: status=ok, installed=[jq, python3-pip, htop, unzip]
- vm-install-nginx: status=already_installed, version=1.18.0, http_check=200
- vm-install-docker: status=ok, docker=29.3.1, compose=v5.1.1
### nubes провайдер
Обновлён с 5.0.49 до 5.0.51 (fix: findInstanceUidByDisplayNameRefSvc возвращал deleted instance UUID)