Files
sless/examples/VM
Naeel fef441681e 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
2026-03-29 19:54:00 +03:00
..

Пример: Виртуальная машина (vApp + VM) в Nubes vDC

Создаёт:

  • vApp — виртуальный каталог (контейнер для ВМ в VMware vDC)
  • ВМ — Ubuntu 22.04, 2 CPU / 2 GB RAM / 20 GB disk

Что нужно сделать перед запуском

1. Сгенерировать SSH-ключ

Публичный ключ прописывается в ВМ при создании — это единственный способ зайти по SSH. Приватный ключ нужен хранить у себя.

ssh-keygen -t ed25519 -f ~/.ssh/sless-demo-vm -N "" -C "sless-demo-vm"

Публичный ключ (~/.ssh/sless-demo-vm.pub) — строка вида:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... sless-demo-vm

2. Заполнить terraform.tfvars

Открыть файл terraform.tfvars и заменить значения:

# Ваш API-токен из панели Nubes
api_token = "ВСТАВИТЬ_ТОКЕН"

# Публичный ключ из шага 1
vm_public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA..."

Токен — берётся в панели Nubes: профиль → API-токены.
Ключ — содержимое файла ~/.ssh/sless-demo-vm.pub (публичный, не приватный!).


Запуск

cd examples/VM

terraform init
terraform apply

После apply в выводе будет:

Outputs:

vm_id    = "..."
vm_state = {
  "externalIp" = "1.2.3.4"
  ...
}
vapp_id  = "..."

Подключение по SSH

ssh -i ~/.ssh/sless-demo-vm ubuntu@<externalIp из outputs>

Логин — ubuntu (задан в vm.tf).


Удаление

terraform destroy

Порядок автоматический: сначала suspend → потом delete. Без suspend удаление упадёт с ошибкой — это поведение Nubes, параметр suspend_on_destroy = true в ресурсах решает это.


Что можно менять

Параметр Файл Примечание
vm_cpu, vm_ram, vm_disk vm.tf Можно менять и переприменять
resource_name, vapp_name vapp.tf Не изменяется после создания
image_vm, user_login, user_public_key vm.tf Не изменяется после создания
vdc_uid, nsxt_uid vapp.tf Не изменяется после создания