Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Заметки к релизу 1.1.0

Дата релиза: 01.12.2025

1. Что нового

  • Добавлена поддержка механизма Resource Taint при частичном создании ресурсов (подробнее см.Terraform Resource Taint).

  • Поддержка параметров HA виртуальной машины:

    • High Availability

    • Lease storage domain

    • Resume Behaviour

  • Поддержка параметра Delete Protected ВМ; корректная реакция на флаг Delete Protected при попытке удалить ВМ.

  • Добавлено управление параметром backup нативных дисков виртуальной машины

  • Добавлена ранняя валидация изменения, потенциально приводящих к перезагрузке. Теперь изменения, требующие перезагрузки, проверяются на валидность перед тем, как ВМ выключится.

Подробная информация представлена на вкладке Документация релиза 1.1.0.

2. Исправления

  • Параметры sparse и format у ресурса диска теперь приводят к пересозданию ресурса.

3. Terraform Resource Taint

3.1. Общее описание

В Terraform 1.1.0 добавлена поддержка Taint-ресурсов, создание которых не было завершено корректно. Метка taint применяется только на этапе создания ресурса. Если ресурс создается некорректно и оказывается неполноценным, его статус отмечается как tainted. Ресурсы с таким статусом при последующем применении манифеста (apply) будут автоматически удалены и созданы заново.

Возможно вручную отменить статус Tainted, выполнив команду:

terraform untaint zvirt_vm.this
Где zvirt_vm это тип ресурса, а this это его название.

3.2. Пример использования

В качестве примера, используем манифест:

resource "zvirt_vm" "this" {
  cluster_id  = data.zvirt_cluster.this.id
  template_id = data.zvirt_template.this.id
  name        = "vm_test_taint"
  power_state = "down"

  disk_attachment {
    alias     = "does_not_exist"
    interface = "virtio"
    size      = 20 * 1024 * 1024 * 1024
  }
}

В данном манифесте проиходит попытка поиска несуществующего нативного диска.

При создании ресурса возникнет ошибка, следующего вида:

│ Error: Error Creating VM
│
│   with zvirt_vm.this,
│   on main.tf line 1, in resource "zvirt_vm" "this":
│    1: resource "zvirt_vm" "this" {
│
│ Could not create VM: failed to process disk attachments for VM 63d5dda3-b739-481e-b47f-b9bd40045254: failed to find native disk attachment with alias does_not_exist: native disk with alias does_not_exist not found

Данный ресурс будет иметь статус tainted.

{
    "mode": "managed",
    "type": "zvirt_vm",
    "name": "this",
    "provider": "provider[\"terraform-registry.orionsoft.ru/orionsoft/zvirt\"]",
    "instances": [
      {
        "status": "tainted",  // Cтатус ресурса Tainted
        "schema_version": 0,
        "attributes": {...},
        "sensitive_attributes": [],
        "identity_schema_version": 0,
        "dependencies": [
          "data.zvirt_cluster.this",
          "data.zvirt_template.this"
        ]
      }
    ]
}

После выполнения команды terraform plan, такой ресурс будет заменён и ВМ будет создана заново:

Terraform will perform the following actions:

  # zvirt_vm.this is tainted, so must be replaced
-/+ resource "zvirt_vm" "this" {
       ...
    }

Plan: 1 to add, 0 to change, 1 to destroy.

Чтобы избежать повторного создания виртуальной машины, достаточно скорректировать имя диска в манифесте на правильное значение и применить команду terraform untaint для соответствующего ресурса.

terraform untaint zvirt_vm.this

Теперь в выводе команды terraform plan, Terraform не предложит пересоздание всей виртуальной машины. Вместо этого виртуальная машина будет обновлена, и все ранее неприменённые параметры будут учтены в процессе обновления VM.

  # zvirt_vm.this will be updated in-place
  ~ resource "zvirt_vm" "this" {
        id                = "63d5dda3-b739-481e-b47f-b9bd40045254"
        name              = "vm_test_taint"
      ~ status            = "tainted" -> (known after apply)
        # (16 unchanged attributes hidden)

      + disk_attachment {
          + active    = true
          + alias     = "boot"
          + interface = "virtio"
          + size      = 21474836480
        }
    }

Plan: 0 to add, 1 to change, 0 to destroy.