Ресурсы 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хема
-
alias(String) - альтернативное имя (алиас) диска. -
size(Number) - размер диска в байтах. -
storage_domain_id(String) - идентификатор домена хранения, в котором будет создан диск.
-
format(String) - формат диска. Возможные значения:cowилиraw. Значение по умолчанию:cow. -
sparse(Boolean) - определяет является ли диск динамически расширяемым. По умолчанию имеет значениеtrue. -
backup (String)- определяет настройки резервного копирования диска. Возможные значения:none,incremental.
-
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хема
-
cluster_id(String) - идентификатор кластера, в котором будет развернута виртуальная машина. -
name(String) - имя виртуальной машины. -
template_id(String) - идентификатор шаблона, на основе которого создана виртуальная машина.
-
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) клонов из данного шаблона не поддерживается.
-
id(String) - Уникальный идентификатор виртуальной машины. -
reboot_required(Boolean) - Указывает, требуется ли перезагрузка для применения ожидающих изменений
Вложенная схема disk_attachment
-
interface(String) - тип интерфейса для диска. Допустимые значения: virtio, virtio_scsi.
-
alias(String) - альтернативное имя (алиас) подключенного диска. -
id(String) - идентификатор требуемого диска. -
size(Number) - размер подключенного диска.
-
active(Boolean) - определяет, активен ли диск. По умолчанию: true. В настоящее время только для чтения.
Вложенная схема initialization
Механизм инициализации функционирует исключительно с использованием Cloud Init и не предусматривает совместимости с технологией Sysprep.
-
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.
-
name(String) - имя сетевого интерфейса в гостевой ОС.
-
boot_protocol_dhcp(Boolean) - использование DHCP для сетевого интерфейса. -
gateway(String) - шлюз для сетевого интерфейса. -
ip_address(String) - IP-адрес сетевого интерфейса. -
netmask(String) - маска подсети для сетевого интерфейса. -
on_boot(Boolean) - активировация сетевого интерфейса при загрузке. -
version(String) - версия адресации для сетевого интерфейса. Допустимое значение: v4
Вложенная схема nic
-
name(String) - имя сетевого интерфейса. -
vnic_profile_id(String) - идентификатор профиля vNIC для подключения к сетевому интерфейсу.
-
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