Print this page

Изменение ресурсов в Proxmox VE 9.1 с помощью Terraform

29 November 2025

Разбираем на практике, как управлять VM в Proxmox через Terraform: изменять CPU/RAM, диски, cloud-init, теги, заметки, количество нод и параметры. Всё — как в реальной продовой конфигурации.

Кратко: меняем параметры VM → запускаем terraform plan → проверяем разницу → terraform apply. Proxmox провайдер делает всю грязную работу.


Почему Terraform + Proxmox

Proxmox VE 9.1 — мощная штука, но руками создавать VM не кайф. Terraform позволяет полностью описывать инфраструктуру кодом: VM, параметры, диски, cloud-init, сеть, storage. Изменения вносятся декларативно: ты просто правишь .tf, а Terraform приводит Proxmox к новому состоянию.

Начальная конфигурация VM

Пример минимальной VM в Proxmox через Terraform:

provider "proxmox" {
  pm_api_url      = "https://pve01:8006/api2/json"
  pm_api_token_id = "terraform@pve!tf"
  pm_api_token_secret = "YOURSECRET"
  pm_tls_insecure = true
}

resource "proxmox_vm_qemu" "vm01" {
  name        = "dev-vm01"
  target_node = "pve01"

  clone = "ubuntu-base-cloudinit"   # базовый cloud-init шаблон

  cores = 2
  memory = 2048

  disk {
    size = "10G"
    type = "scsi"
    storage = "local-lvm"
  }

  network {
    model = "virtio"
    bridge = "vmbr0"
  }

  agent = 1
}

Теперь — меняем параметры и смотрим, как Terraform с этим работает.

1) Изменение CPU и RAM

Хочешь апгрейднуть виртуалку? Просто меняешь значения:

resource "proxmox_vm_qemu" "vm01" {
  name        = "dev-vm01"
  target_node = "pve01"

  cores  = 4       # было 2
  memory = 4096    # было 2048

  # остальное без изменений
}

Поведение: Proxmox позволяет менять CPU/RAM без пересоздания VM. Terraform спокойно выполнит API-update, VM перезапустится при необходимости.

2) Изменение дисков (size, storage)

Увеличение размера диска

disk {
  size = "20G"   # было 10G
  type = "scsi"
  storage = "local-lvm"
}

Важно: в Proxmox увеличение дисков — ок, уменьшение — невозможно. Terraform правильно выполнит resize через API.

Перенос на другое хранилище

Перемещение storage почти всегда вызывает пересоздание VM!

disk {
  size = "20G"
  type = "scsi"
  storage = "ceph-storage"  # сменили storage
}

Terraform покажет destroy + create. Это норма — Proxmox API иначе не умеет.

3) Cloud-Init: изменение параметров

Proxmox VE 9.1 круто работает с cloud-init, а Terraform позволяет менять его значения:

os_type = "cloud-init"

ciuser      = "devops"
cipassword  = "StrongPass123!"
ipconfig0   = "ip=192.168.10.50/24,gw=192.168.10.1"
sshkeys     = file("~/.ssh/id_rsa.pub")

Поведение: изменения применяются без пересоздания VM, Terraform дергает API cloud-init options.

4) Заметки и теги в Proxmox 9.1

Proxmox 9.1 добавил нормальную поддержку тегов через API. Terraform — тоже.

tags = [
  "env-dev",
  "team-platform",
  "terraform-managed"
]

desc = "Dev virtual machine managed by Terraform"

Теги меняются без пересоздания, всё через API-update.

Работа с terraform plan и apply

Классический цикл:

terraform fmt
terraform validate
terraform plan
terraform apply

На что смотреть в плане:

  • Зелёный “+” — будет создано
  • Жёлтый “~” — изменится на месте
  • Красный “-” — будет удалено
  • -/+ — пересоздание (важно!)

Главный чек: если Terraform показывает пересоздание VM — убедись, что там нет важных данных.

Полезные советы и подводные камни

  • Используй QEMU Agentagent = 1. Без него Terraform иногда не может корректно получить статус.
  • Не меняй storage у дисков, если не готов пересоздать VM.
  • Cloud-init шаблон делай заранее → clone в Terraform работает идеально.
  • Держи state вне локалки (minio, S3-compatible, GitLab storage).
  • Не уменьшай диски — Proxmox не умеет.
  • Если VM критичная — через lifecycle { prevent_destroy = true } защищай от случайного удаления.