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

Ресурсы TF

zvirt_disk
Примеры использования
resource "zvirt_disk" "disk" {
  alias             = "disk"
  size              = 10 * pow(1024, 3)
  format            = "cow"
  sparse            = true
  storage_domain_id = "78412f05-ab87-4b9c-94f7-d48fd1f8d0a8"
}
resource "zvirt_disk" "disk" {
  alias             = "disk"
  size              = 10 * pow(1024, 3)
  format            = "raw"
  sparse            = false
  storage_domain_id = "78412f05-ab87-4b9c-94f7-d48fd1f8d0a8"
}

Cхема

Required
  • alias (String) - альтернативное имя (алиас) диска.

  • size (Number) - размер диска в байтах.

  • storage_domain_id (String) - идентификатор домена хранения, в котором будет создан диск.

Optional
  • format (String) - формат диска. Возможные значения: cow или raw. Значение по умолчанию: cow.

  • sparse (Boolean) - определяет является ли диск динамически расширяемым. По умолчанию имеет значение true.

  • backup (String) - определяет настройки резервного копирования диска. Возможные значения: none, incremental.

Read-Only
  • id (String) - уникальный идентификатор диска.

Import

Импорт поддерживается с использованием следующего синтаксиса:

# VM can be imported using the ID
# Example:
terraform import zvirt_disk.disk 2481aa39-d0a4-4014-b2e3-6c0cc0784eab

Ограничения

Для корректного отключения управляемого диска от ВМ при удалении (destroy) диска, необходимо в ресурсе диска указать lifecycle = { create_before_destroy = true }. Диск будет корректно деинициализирован и удалён. Процесс включает два этапа: вначале производится отключение диска от виртуальной машины, после успешного завершения которого выполняется непосредственное удаление ресурса диска.

Пример использования
resource "zvirt_disk" "this" {
  alias             = "data"
  size              = 7 * 1024 * 1024 * 1024
  storage_domain_id = data.zvirt_storage_domain.this.id

  lifecycle {
    create_before_destroy = true
  }
}

resource "zvirt_vm" "this" {
  name        = "tf-import-test"
  cluster_id  = data.zvirt_cluster.this.id
  template_id = data.zvirt_template.this.id

  disk_attachment {
    id        = zvirt_disk.this.id
    interface = "virtio_scsi"
  }
}
zvirt_vm

Ресурс zvirt_vm используется для управления жизненным циклом виртуальной машины.

Функция определения необходимости перезагрузки

Ресурс zvirt_vm поддерживает вычисляемый атрибут reboot_required, который автоматически определяет, когда изменения конфигурации ВМ требуют перезагрузки для вступления в силу.

В рамках работы данной функции terraform-провайдер сравнивает планируемые изменения с текущим состоянием и устанавливает reboot_required = true, если обнаруживается любое из следующих изменений:

  • Изменения конфигурации ЦП:

    • cpu_sockets- количество сокетов ЦП

    • cpu_cores - количество ядер ЦП на сокет

    • cpu_threads - количество потоков ЦП на ядро

  • Изменения конфигурации памяти:

    • memory - объем выделенной памяти.

    • max_memory - максимальный лимит памяти.

    • guaranteed_memory - гарантированный объем памяти.

    • ballooning - настройка перераспределения памяти.

  • Изменения сетевых интерфейсов:

    • добавление/удаление сетевых интерфейсов (NIC).

    • изменение свойств сетевого интерфейса (имя, тип интерфейса, профиль vNIC).

  • Изменения подключений дисков:

    • Добавление/удаление дисков с интерфейсами, не поддерживающими горячую замену (все интерфейсы, кроме virtio или virtio_scsi).

    • Изменение свойств подключения диска, включая изменение атрибута interface, означающего смену типа используемого интерфейса диска.

  • Изменения параметров инициализации:

    • имя хоста.

    • конфигурация DNS (DNS-серверы, параметры поиска).

    • конфигурация аутентификации (Имя пользователя, SSH-ключи).

    • пользовательские скрипты.

    • конфигурация сетевых интерфейсов (NIC).

Изменения, НЕ требующие перезагрузки:

  • name- имя виртуальной машины.

  • description - описание виртуальной машины.

  • comment- комментарий к виртуальной машине.

  • power_state - состояние питания (включена/выключена/run_on_create).

  • disk attachments:

    • Добавление/удаление подключений дисков с поддержкой горячего подключения (интерфейсы virtio или virtio_scsi).

    • Изменение размера нативных дисков (только увеличение).

Функция управления дисками

Ресурс zvirt_vm поддерживает динамические блоки disk_attachment, которые позволяют пользователям управлять дисками, подключенными к виртуальной машине. Диски разделены на логические группы: нативные и управляемые подключения дисков.

Нативное подключение диска относится к дискам, которые либо унаследованы от шаблона, либо вручную подключены к виртуальной машине. Для взаимодействия с этими дисками используется атрибут alias.

Управляемое подключение диска относится к дискам, которые были подключены к виртуальной машине через Terraform. Для взаимодействия с этими дисками используется атрибут id.

Атрибуты id и alias являются взаимоисключающими.

Нативные диски поддерживают атрибут size, который позволяет пользователям изменять их размер. Предполагается, что размер управляемых дисков изменяется с помощью собственного ресурса.

Terraform игнорирует диски, унаследованные от шаблона или подключенные вручную, до тех пор, пока они не появятся в манифесте. После того как вы указали их в манифесте и применили его, Terraform начинает их отслеживать.

Ограничения

  • Для нативных дисков:

    • Отключение диска средствами Terraform невозможно. Для осуществления операции рекомендуется предварительно отсоединить диск посредством веб-интерфейса или ZVirt API, исключить соответствующую запись из Terraform-манифеста и применить изменения командой terraform apply для фиксации изменений в файле состояния;

    • Невозможно уменьшить размер диска;

    • Поскольку в качестве уникального идентификатором выступает alias, использование дисков с совпадающими псевдонимами внутри одной виртуальной машины не поддерживается;

    • Процесс обработки манифеста Terraform завершится ошибкой, если клиент не сможет обнаружить нужный нативный диск по указанному псевдониму(alias).

  • Для управляемых дисков:

    • Изменение размера диска недоступно для управляемых дисков.

Пример использования
resource "zvirt_vm" "vm" {
  name        = "vm"
  cluster_id  = data.zvirt_cluster.default.id
  template_id = data.zvirt_template.astra.id
}

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

Cхема

Required
  • cluster_id (String) - идентификатор кластера, в котором будет развернута виртуальная машина.

  • name (String) - имя виртуальной машины.

  • template_id (String) - идентификатор шаблона, на основе которого создана виртуальная машина.

Optional
  • ballooning (Boolean) - включение или отключение перераспределения памяти для виртуальной машины. Значение по умолчанию зависит от политики кластера.

  • comment (String) - комментарий к виртуальной машине.

  • cpu_cores (Number) - количество ядер ЦП на сокет для виртуальной машины. Наследуется из шаблона, если не указано.

  • cpu_sockets (Number) - количество сокетов ЦП для виртуальной машины. Наследуется из шаблона, если не указано.

  • cpu_threads (Number) - количество потоков ЦП на ядро для виртуальной машины. Наследуется из шаблона, если не указано.

  • description (String) - описание виртуальной машины.

  • disk_attachment (Block Set) - набор дисков для подключения к виртуальной машине. (см. вложенную схему ниже).

  • guaranteed_memory (Number) - гарантированный объем памяти для виртуальной машины. Значение по умолчанию зависит от политики кластера.

  • initialization (Block, Optional) - настройки инициализации виртуальной машины. (см. вложенную схему ниже).

  • max_memory (Number) - максимальный объем памяти, который может быть выделен виртуальной машине. Значение по умолчанию зависит от политики кластера.

  • memory (Number) - объем памяти, выделенный виртуальной машине. Наследуется из шаблона, если не указано.

  • nic (Block Set) - набор сетевых интерфейсов для подключения к виртуальной машине. Важно: отключение и подключение сетевых интерфейсов требует выключения ВМ. ВМ будет автоматически выключена при изменении сетевых интерфейсов и автоматически запущена, если это требуется.

  • power_state (String) - состояние питания виртуальной машины. Возможные значения: up, down или run_on_create.

  • clone (Boolean) - определяет будет ВМ создана как тонкий или независимый клон.

    При создании виртуальной машины из шаблона Blank необходимо явно указать параметр клонирования clone = true. Создание тонких (thin-provisioned) клонов из данного шаблона не поддерживается.
Read-Only
  • id (String) - Уникальный идентификатор виртуальной машины.

  • reboot_required (Boolean) - Указывает, требуется ли перезагрузка для применения ожидающих изменений

Вложенная схема disk_attachment
Required
  • interface (String) - тип интерфейса для диска. Допустимые значения: virtio, virtio_scsi.

Optional
  • alias (String) - альтернативное имя (алиас) подключенного диска.

  • id (String) - идентификатор требуемого диска.

  • size (Number) - размер подключенного диска.

Read-only
  • active (Boolean) - определяет, активен ли диск. По умолчанию: true. В настоящее время только для чтения.

Вложенная схема initialization

Механизм инициализации функционирует исключительно с использованием Cloud Init и не предусматривает совместимости с технологией Sysprep.

Optional
  • authorized_ssh_keys (Set of String) - авторизованные SSH-ключи для виртуальной машины.

  • custom_script (String) - пользовательский скрипт, выполняемый на виртуальной машине.

  • dns_search (String) - домен поиска DNS для виртуальной машины.

  • dns_servers (Set of String) - DNS-серверы для виртуальной машины.

  • hostname (String) - имя хоста виртуальной машины.

  • nic_configuration (Block Set) - конфигурация сетевых интерфейсов (см. вложенную схему ниже).

  • username (String) - имя пользователя виртуальной машины.

Вложенная схема initialization.nic_configuration

Параметр boot_protocol_dhcp настраивает сетевой интерфейс на использование DHCP и конфликтует со статическими параметрами: ip_address, netmask, gateway и version.

Провайдер в настоящее время поддерживает только конфигурацию IPv4.

Required
  • name (String) - имя сетевого интерфейса в гостевой ОС.

Optional
  • boot_protocol_dhcp (Boolean) - использование DHCP для сетевого интерфейса.

  • gateway (String) - шлюз для сетевого интерфейса.

  • ip_address (String) - IP-адрес сетевого интерфейса.

  • netmask (String) - маска подсети для сетевого интерфейса.

  • on_boot (Boolean) - активировация сетевого интерфейса при загрузке.

  • version (String) - версия адресации для сетевого интерфейса. Допустимое значение: v4

Вложенная схема nic
Required
  • name (String) - имя сетевого интерфейса.

  • vnic_profile_id (String) - идентификатор профиля vNIC для подключения к сетевому интерфейсу.

Optional
  • interface (String) - тип сетевого интерфейса для сетевой карты. Допустимые значения: virtio, e1000, e1000e, rtl8139. По умолчанию: virtio.

Import

Импорт поддерживается с использованием следующего синтаксиса:

# VM can be imported using the ID
# Example:
terraform import zvirt_vm.vm 668c7b9e-ae8b-422d-936b-8853de610e39