You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 KiB

Resource функция dynamix_kvmvm служит для управления виртуальными машинами, создаваемыми на платформе DYNAMIX на базе технологии виртуализации KVM.

Работа с custom_fields

CustomFields - метод работы с XML ВМ. Для описания конфигурации используется файл в формате JSON, например:

customfields.json:

{
  "title": "test",
  "name": "basename",
  "cpu": {
    "mode": "host-model"
  }
}

После этого, достаточно передать файл в качестве значения параметра:

custom_fields = file("customfields.json")

Возможные затруднения при импорте kvmvm с extra_disks

При импорте kvmvm c extra_disks, терраформ не может записать в стейт информацию об extra_disks по следующим причинам:

  • терраформ на стадии импорта не производит чтение конфигурации, кроме проверки необходимых (requirement) полей, из-за чего данные, хранящиеся в поле extra_disks, будут непрочитаны; Из-за этого, при первом запуске команды terraform apply, терраформ сообщит что удалит эти диски из disks, но, при этом, удалены они не будут, если указаны в массиве extra_disks.

По умолчанию, sep_id и pool на платформе выбираются те же, на которых размещается загрузочный диск (создается вместе с виртуальной машиной). Из-за этого, могут возникать ошибки следующего характера:

  • Cannot attach disk to Compute ID XXX: Pool xxxx does not support disk type X - данная ошибка означает то, что выбранный пул не поддерживает выбранные тип диска Пути решения:
  • Выполнить dynamix_disk_list_types_detailed. Результатом выполнения этой функции станет список доступных пулов хранилища вместе с их идентификаторами (sep_id).
  • Заполнить поля sep_id и pool подходящими полями для диска.

Работа boot_disk

В стейт в поле boot_disk записывается первый найденный диск с типом "B", остальные диски с типом "B" обрабатываются и записываются в массив disks.

Работа с cloud_init

Cloud Init позволяет запустить ВМ с предустановленными настройками пользователя, группами и доступами. Подробнее про настройку cloud_init можно прочесть по ссылке.

Пароли, указанные в cloud_init не сохраняются на платформе и не отображаются в API!

Для использования cloud_init конфигурации, следует:

  1. Создать файл с расширением .tftpl в рабочей директории.
  2. Описать в созданном файле конфигурацию cloud_init в формате JSON:

initconfig.tftpl

{
  "users": [
    {
      "groups": "users, wheel",
      "name": "user",
      "plain_text_passwd": "examplePassword",
      "primary_group": "user",
      "ssh_authorized_keys": [
        "ssh-rsa EXAMPLE%id_rsa.pub"
      ],
      "sudo": "ALL=(ALL) NOPASSWD:ALL"
    }
  ]
}
  1. Указать путь до файла initconfig.tftpl в качестве значения параметра cloud_init в ресурсе dynamix_kvmvm:
resource "dynamix_kvmvm" "compute1" {
   # ...

   cloud_init = file("initconfig.tftpl")

   # ...
}
  1. Выполнить terraform apply

Конфигурация cloud_init применяется только при создании компьюта, во всех остальных случаях - игнорируется

Работа с полем weight в блоке network

В версии 1.1.0 в блоке network добавлено опциональное поле weight, которое можно использовать, в случае, когда необходимо указать порядок подключения сетей, т.к. по умолчанию сети подключаются в случайном порядке. Сети с наименьшим весом будут подключены в первую очередь. Сети с неуказанным или нулевым значением будут подключены в последнюю очередь (иметь наименьший приоритет) В случае, если все сети не имеют параметра весов, подключение будет производится как и раньше. При выполнении update сортироваться будут только вновь подключаемые сети, порядок уже подключенных сетей остается без изменения. Так же следует обратить внимание, что если при update была отключена какая либо сеть, то вновь подключаемые сети с наименьшим весом сети займут ранее освобожденные интерфейсы, и только после будут добавляться в конец списка подключенных сетей. При изменении или удалении данного поля, в уже созданном ресурсе, сеть будет считаться вновь подключаемой и следовательно будет отключена от VM и подключена по новой, с учетом веса подключаемых сетей.

Аргументы

Resource функция dynamix_kvmvm принимает следующие аргументы:

Аргумент Тип Обязательный Описание
driver string ✔️ Аппаратная архитектура виртуальной машины.
Может принимать одно из следующих значений:
_ "KVM_X86" - stateful виртуальная машина KVM на аппаратной платформе x86.
_ "SVA_KVM_X86" - stateless ВМ на аппаратной платформе x86.
cpu int ✔️ Количество процессоров
name string ✔️ Имя виртуальной машины. Обратите внимание, что имя должно быть уникальным в рамках ресурсной группы
rg_id int ✔️ Идентификатор ресурсной группы, которой принадлежит данная виртуальная машина
ram int ✔️ Объём оперативной памяти в МБ.
Должен быть кратен 128
boot_disk_size int Размер загрузочного диска виртуальной машины в ГБ
chipset string Тип эмулируемой системы
custom_fields string (json-encoded) Управление XML виртуальной машины
extra_disks []int Список идентификаторов дополнительных дисков, которые требуется подключить к данной виртуальной машине помимо загрузочного диска
image_id int Идентификатор образа, на базе которого создаётся загрузочный диск виртуальной машины.
cd_image_id int ID образа диска CD rom
cloud_init string Используется на этапе создания вм.
Параметры для утилиты cloud_init, которая используется на платформе DYNAMIX для первичного конфигурирования виртуальной машины после её создания
network []Struct см. ниже Параметры сетевого подключения.
description string Текстовое описание виртуальной машины
started bool Флаг запуска машины,
по-умолчанию - true.
Если true - машина включена,
если false - выключена
sep_id int Идентификатор SEP
pool string Наименование пула для размещения
is string Наименование системы
ipa_type string Тип аутентификатора
permanently bool Мгновенное удаление виртуальной машины, минуя корзину. Параметр считывается только при использовании команды terraform destroy, то есть только при удалении ресурса
detach_disks bool Отсоединение прикрепленных к виртуальной машине дисков перед ее удалением. Параметр считывается только при использовании команды terraform destroy, то есть только при удалении ресурса
enabled bool Доступность вычислительной машины
affinity_label string Метка для правил affinity
affinity_rules []Struct см. ниже Список описания правил affinity. Правил может быть несколько, одно или отсутствовать
anti_affinity_rules []Struct см. ниже Список описания правил anti-affinity. Правил может быть несколько, одно или отсутствовать
tags []Struct см. ниже Задание тэгов компьюта
port_forwarding []Struct см. ниже Настройка порт форвардинга для компьюта
user_access []Struct см. ниже Предоставление доступов к компьюту
snapshot []Struct см. ниже Создание мнапшотов
snapshot_delete_async bool Флаг, отвечающий за асинхронное удаление снапшотов
rollback Struct см. ниже Rollback на определенный снапшот
pin_to_stack bool Флаг, отвечающий за добавление компьюта в стек. По умолчанию false.
preferred_cpu []int Список ядер для использования в механизме vcpupinning
auto_start_w_node bool Автостарт при рестарте ноды. По умолчанию false.
pause bool Флаг, отвечающий за pause/resume компьюта
reset bool Флаг, отвечающий за reset компьюта
force_stop bool Флаг, отвечающий за стоп при редеплое компьюта
force_resize bool Флаг для изменения CPU и RAM в принудительном порядке
restore bool Восстановить удаленный компьют из корзины
cpu_pin bool Необходимость запускать ВМ на выделенных CPU ядрах
numa_affinity string Необходимость выравнивать ВМ по NUMA. Возможные значения - "none, "strict", "loose"
hp_backed bool Необходимость использовать для выделения RAM виртуальной машины Huge Pages ядрах
without_boot_disk bool Флаг отсутствия загрузочного диска
pci_devices []int Список ID PCI девайсов
loader_type string Тип ВМ. Возможные значения - linux, windows, unknown
boot_type string Тип загрузки образа. Возможные значения - bios, uefi
hot_resize bool Изменение размера ВМ
network_interface_naming string Наименование сетевого интерфейса. Возможные значения - eth, ens

Описание структуры network

Аргумент Тип Обязательный Описание
net_type string ✔️ Тип сети, соответствующей данному подключению. Возможные значения: "EXTNET" (прямое подключение во внешнюю сеть), "VINS" (подключение к Virtual Network Segment), "VFNIC" или "DPDK".
net_id int ✔️ Идентификатор соответствующего сетевого сегмента: внешней сети в случае net_type = "EXTNET", ViNS в случае net_type = "VINS", VFNIC в случае net_type="VFNIC, и DPDK в случае net_type = "DPDK"
ip_address string IP адрес, выделенный данному подключению.
mac string MAC адрес, выделенный данному подключению.
weight int Вес сети, указывается при необходимости указания порядка подключения сетей. Первой подключается сеть с наименьшим весом. Сеть с нулевым или неуказанным весом имеет наименьший приоритет
mtu int Максимальный объём данных, который может быть передан за одну итерацию. Применяется только для DPDK сетей. Может быть от 1 до 9216

Описание структуры affinity_rules

Аргумент Тип Обязательный Описание
topology string ✔️ Тип правила. Возможные значения - node, compute
policy string ✔️ Строгость правила. Возможные значения - RECOMMENDED (рекомендовано) и REQUIRED (обязательно)
mode string ✔️ Режим проверки. Возможные значения - EQ (равно), NE (не равно), ANY - любое
key string ✔️ Ключ правила
value string Значение правила

Описание структуры anti_affinity_rules

Аргумент Тип Обязательный Описание
topology string ✔️ Тип правила. Возможные значения - node, compute
policy string ✔️ Строгость правила. Возможные значения - RECOMMENDED (рекомендовано) и REQUIRED (обязательно)
mode string ✔️ Режим проверки. Возможные значения - EQ (равно), NE (не равно), ANY - любое
key string ✔️ Ключ правила
value string Значение правила

Описание структуры tags

Аргумент Тип Обязательный Описание
key string ✔️ Ключ тэга
value string ✔️ Значение тэга

Описание структуры port_forwarding

Аргумент Тип Обязательный Описание
public_port_start int ✔️ Начало диапазона внешних портов для данного правила pfw
public_port_end int Конец диапазона внешних портов для данного правила pfw
local_port int Локальный порт для данного правила pfw
proto string ✔️ Протокол создания правила pfw. Возможные значения: "tcp" или "udp"

Описание структуры user_access

Аргумент Тип Обязательный Описание
username string ✔️ Юзер, которому необходимо выдать определенные права на компьют
access_type string ✔️ Права, которые выдадутся юзеру на компьют. Возможные значения: "R", "RCX" или "ARCXDU"

Описание структуры snapshot

Аргумент Тип Обязательный Описание
label string ✔️ Лейбл снапшота

Описание структуры rollback

Аргумент Тип Обязательный Описание
label string ✔️ Лейбл снапшота на который нужно сделать rollback

Возвращаемые значения

В случае успешного выполнения resource функция dynamix_kvmvm возвращает в указанную при вызове переменную следующие значения:

Параметр Тип Описание
account_id int Уникальный идентификатор аккаунта-владельца ("account") данной виртуальной машины.
account_name string Имя аккаунта, которому принадлежит данная виртуальная машина.
acl structсм. ниже Список доступов
affinity_label string Метка для правил affinity
affinity_rules []Struct см. ниже
anti_affinity_rules []Struct см. ниже
affinity_weight int weight аффинити
arch string Архитектура
auto_start_w_node bool Автостарт при рестарте ноды
boot_order []string Boot order
boot_disk struct см. ниже Полная информация о бутдиске
boot_disk_id int Идентификатор загрузочного диска виртуальной машины.
boot_disk_size int Размер загрузочного диска в ГБ.
boot_type string Тип загрузки образа. Возможные значения - bios, uefi
driver string Аппаратная архитектура данной виртуальной машины.
chipset string Тип эмулируемой системы
clone_reference int кол-во клонов
clones []int id клонов
computeci_id int Id computeci
cd_image_id int ID образа диска CD rom
cpu_pin bool Необходимость запускать ВМ на выделенных CPU ядрах
cpu int Количество виртуальных CPU, выделенных данному серверу.
created_by string Кем создан ресурс
created_time int Время создания ресурса
custom_fields string Кастомные поля
deleted_by string Кем удален ресурс
deleted_time int Время удаления ресурса
description string Текстовое описание виртуальной машины.
detach_disks bool Отсоединение прикрепленных к виртуальной машине дисков перед ее удалением. Параметр считывается только при использовании команды terraform destroy, то есть только при удалении ресурса
devices string Девайсы
disks []struct см. ниже Полная информация о подключенных дисках
enabled bool Доступность вычислительной машины
extra_disks []int Список идентификаторов дополнительных дисков, которые подключены к данной виртуальной машине помимо загрузочного диска. Если такие диски отсутствуют, то список будет пустым.
gid int GID
guid int GUID
hp_backed bool Необходимость использовать для выделения RAM виртуальной машины Huge Pages ядрах
hot_resize bool Изменение размера ВМ
compute_id int Идентификатор экземпляра compute, соответствующего данной виртуальной машине.
id int Уникальный идентификатор этой виртуальной машины на облачной платформе. Всегда совпадает с compute_id.
image_id int Идентификатор образа ОС, на базе которого создан загрузочный диск этой виртуальной машины.
interfaces []Struct см. ниже Информация о интерфейсах компьюта
ipa_type string Тип аутентификатора
is string Наименование системы
lock_status string Статус доступности
loader_type string Тип ВМ
manager_id int Manager id
manager_type string Type manager
migrationjob int Migrationjob
milestones int Вехи
name string Имя виртуального сервера.
Возвращаемое значение name совпадает со значением соответствующего аргумента, переданного при вызове функции.
natable_vins_id int NAT vins id
natable_vins_ip string NAT vins ip
natable_vins_name string NAT vins name
natable_vins_network string NAT vins network
natable_vins_network_name string NAT vins network name
need_reboot bool Флаг, указывающий, что требуется перезагрузка
network_interface_naming string Наименование сетевого интерфейса
numa_affinity string Необходимость выравнивать ВМ по NUMA
numa_node_id int ID узла NUMA
network []Struct см. ниже Параметры сетевого подключения
os_users []Struct см. ниже Имена и пароли пользователей гостевой ОС, установленные платформой при создании виртуального сервера.
permanently bool Мгновенное удаление виртуальной машины, минуя корзину. Параметр считывается только при использовании команды terraform destroy, то есть только при удалении ресурса
pci_devices []int Список ID PCI девайсов
pinned bool добавлен ли компьют на стек
preferred_cpu []int список ядер для использования в механизме vcpupinning
pool string Наименование пула для размещения
port_forwarding []Struct см. ниже
ram int Объём оперативной памяти в МБ, выделенной этой виртуальной машине.
reference_id string ID reference
registered bool Компьют зарегестрирован
res_name string Res name
reserved_node_cpus []int Количество зарезервированных CPU в узле
reset bool Флаг отвечающий за reset компьюта
rg_id int Идентификатор ресурсной группы, к которой принадлежит виртуальная машина.
rg_name string Имя ресурсной группы, к которой принадлежит виртуальная машина.
rollback Struct см. ниже
sep_id int Идентификатор SEP
snapshot []Struct см. ниже
snap_sets []Struct см. ниже Snap sets
started bool Опциональный параметр, флаг запуска машины,
по-умолчанию - true.
Если true - машина включена,
если false - выключена.
snapshot_delete_async bool
stateless_sep_id int ID сепа
stateless_sep_type string Тип сепа
status string атус
tags []Struct см. ниже
tech_status string Технический статус
updated_by string Кем обновлен ресурс
updated_time int Время обновления ресурса
user_access []Struct см. ниже
user_managed bool User managed
cloud_init string Параметры cloud_init
vgpus []Struct см. ниже Список vgpu
virtual_image_id int ID виртуального образа
virtual_image_name string Имя образа ОС, на базе которого создан загрузочный диск этой виртуальной машины.
vnc_password string VNC пароль

Описание структуры acl

Параметр Тип Описание
account_acl []struct см. ниже Информация о списке пользователей аккаунтов
compute_acl []Struct см. ниже Информация о списке пользователей компьютов
rg_acl []Struct см. ниже Информация о списке пользователей ресурной группы

Описание структуры list acl

Параметр Тип Описание
explicit bool Явно ли указан доступ
guid string guid Ресурса
right string Права на ресурс
status string Статус ресурса
type string Тип ресурса
user_group_id string ID user group

Описание структуры disk

Параметр Тип Описание
account_id int Уникальный идентификатор аккаунта-владельца диска
acl string acl
boot_partition int boot_partition
bus_number int Номер шины
created_time int Время создания
deleted_time int Время удаления
desc string Текстовое описание диска
destruction_time int Время окончательного удаления
disk_id int Идентификатор диска
disk_path string Адрес диска
gid int Идентификатор площадки (grid id)
guid int guid
image_id int Идентификатор образа, содержимое которого было склонировано/скопировано в данный диск при его создании. 0 означает, что данный диск не создавался как клон/копия какого-либо образа
images []int Идентификаторы образов, использующих диск
iotune Struct{}см. ниже Информация об ограничениях IO диска
iqn string iqn
login string Логин
milestones int Milestones
name string Наименование диска
order int Номер диска
params string Параметры диска
parent_id int id родительского диска
passwd string Password
pci_slot int id pci слота, к которому подключен диск
pool string Имя пула в системе хранения, на ресурсах которой размещён данный диск
present_to map[string]int Список ID ресурсов, которым предоставлен диск
purge_time int Время последней попытки
reality_device_number int Reality device number
reference_id string Reference id
replication Struct{} см. ниже Информация о реплике диска
res_id string ID ресурса
role string Роль диска
sep_id int Идентификатор Storage Endpoint Provider (SEP). SEP это способ идентифицировать конкретную систему хранения, на ресурсах которой размещён данный диск
shareable bool Флаг, отвечающий за доступность диска дургим ресурсам
size_available float Кол-во свободного места, в ГБ
size_max int Размер диска в ГБ
size_used float Кол-во используемого места, в ГБ
snapshots []Struct{}см. ниже Снимки состояния диска
status string Статус диска
tech_status string Технический статус диска
type string Тип диска с точки зрения его роли в составе compute. Может принимать одно из фиксированных значений:
"B" - признак загрузочного диска ("boot").
"D" - признак дополнительного диска ("data")
vmid int Идентификатор виртуальной машины (устаревшее)

Описание структуры iotune

Параметр Тип Описание
read_bytes_sec int Кол-во байт для чтения в секунду
read_bytes_sec_max int Максимальное кол-во байт для чтения
read_iops_sec int Кол-во операций чтения io в секунду
read_iops_sec_max int Максимальное число io операций чтения
size_iops_sec int Размер io операций
total_bytes_sec int Общий размер байт в секунду
total_bytes_sec_max int Максимальный общий размер байт в секунду
total_iops_sec int Общее кол-во io операций в секунду
total_iops_sec_max int Максимальное общее кол-во io операций в секунду
write_bytes_sec int Кол-во байт для записи в секунду
write_bytes_sec_max int Максимальное кол-во байт для записи в секунду
write_iops_sec int Кол-во операций записи в секунду
write_iops_sec_max int Максимальное число операций записей

Описание структуры networks

Параметр Тип Описание
net_type string Тип сети, соответствующей данному подключению. Возможные значения: "EXTNET" (прямое подключение во внешнюю сеть), "VINS" (подключение к Virtual Network Segment), "VFNIC" или "DPDK".
net_id int Идентификатор соответствующего сетевого сегмента: внешней сети в случае net_type = "EXTNET", ViNS в случае net_type = "VINS", VFNIC в случае net_type="VFNIC, и DPDK в случае net_type = "DPDK"
ip_address string IP адрес, выделенный данному подключению.
mac string MAC адрес, назначенный соответствующему сетевому интерфейсу виртуальной машины.
weight int Вес сети, указывается при необходимости указания порядка подключения сетей. Первой подключается сеть с наименьшим весом. Сеть с нулевым или неуказанным весом имеет наименьший приоритет
mtu int Максимальный объём данных, который может быть передан за одну итерацию. Применяется только для DPDK сетей.

Описание структуры replication

Параметр Тип Описание
disk_id int id диска
pool_id string id пула
role string Роль диска (главный или реплика)
self_volume_id string id раздела
storage_id string id хранилища
volume_id string id раздела

Описание структуры snapshots

Параметр Тип Описание
guid string id снимка
label string Наименование снимка
reference_id string Ссылка на снимок
res_id string id ресурса
snap_set_guid string Установленный id снимка
snap_set_time int Установленное время снимка
timestamp int Время снимка

Описание структуры interfaces

Параметр Тип Описание
bus_number int Номер шины
conn_id int ID connect
conn_type string Тип connect
get_gw string Шлюз по умолчанию
enabled bool Доступность подключения
flip_group_id int id flip group
guid string GUID
ip_address string IP адрес
libvirt_settings Struct{}см. ниже Параметры libvirt virtio интерфейса
listen_ssh bool открыт ли ssh connect
mac string MAC адрес устройства
name string Имя
net_id int ID сети
netmask int Маска сети
net_type string Тип сети
node_id int ID узла
pci_slot int Pci Slot
qos Struct{}см. ниже QOS
target string Цель сети
type string Тип
vnfs []int VNFS

Описание структуры libvirt_settings

Параметр Тип Описание
guid string GUID
txmode string TX mode
ioeventfd string IO event
event_idx string Event ID
queues int Количество очередей
rx_queue_size int Длина очереди RX
tx_queue_size int Длина очереди TX

Описание структуры qos

Параметр Тип Описание
e_rate int E rate
guid string ID ресурса
in_brust int In brust
in_rate int In rate

Описание структуры os users

Параметр Тип Описание
guid string GUID
login string Логин
password string Пароль
public_key string Публичный ssh ключ

Описание структуры snap sets

Параметр Тип Описание
disks []int Список id дисков
guid string GUID
label string Лейбл
timestamp int Время

Описание структуры vgpu

Аргумент Тип Описание
id int Идентификатор ресурса
gid int ID платформы
type string Тип
mode string Режим работы ресурса
status string Статус ресурса
profile_id int Идентификатор профиля
ram int Объем оперативной памяти
last_update_time int Время последнего обновления
created_time int Время создания
deleted_time int Время удаления
vmid int Идентификатор виртуальной машины
pgpuid int Идентификатор GPU профиля
reference_id string Ссылочный идентификатор
account_id int Идентификатор аккаунта
rg_id int Идентификатор ресурсной группы
last_claimed_by int Последний пользователь, запросивший ресурс
pci_slot int Номер PCI слота
bus_number int Номер шины
guid int GUID

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

В нижеприведённом примере с помощью resource функции dynamix_kvmvm создаётся виртуальная машина (экземпляр compute в терминологии платформы DYNAMIX) следующими характеристиками:

  • Имя виртуальной машины - "tf-managed-vm"
  • Характеристики виртуальной машины - 1 CPU, 1024Мб RAM, размер загрузочного диска 10Гб
  • К виртуальной машине будет подключён один дополнительный диск с идентификатором 56789
  • Идентификатор ресурсной группы, в которой создаётся виртуальная машина - поступает из переменной dynamix_resgroup.my_rg.id
  • Идентификатор образа ОС, который будет установлен на загрузочный диск - поступает из переменной data.dynamix_image.os_image.id
  • Виртуальная машина будет иметь одно сетевое подключение - во внешнюю сеть с идентификатором 12, IP адрес этого подключения платформа установит автоматически
resource "dynamix_kvmvm" "comp" {
  #имя compute
  #может быть изменен
  #обязательный параметр
  #тип - строка
  #используется при создании и обновлении
  name = "test-tf-compute-update-new"

  #id resource group
  #обязательный параметр
  #тип - целое число
  #используется при создании
  rg_id = 1111

  #тип драйвера для compute
  #обязательный параметр
  #тип - строка
  #возможные значения: "SVA_KVM_X86", "KVM_X86"
  #используется при создании
  driver = "KVM_X86"

  #число cpu
  #обязательный параметр
  #тип - целое число
  #используется при создании и обновлении
  cpu = 1

  #кол-во оперативной памяти, МБ
  #обязательный параметр
  #тип - целое число
  #возможные значения: кратные 128
  #используется при создании и обновлении
  ram = 2048

  #размер загрузочного диска
  #опциональный параметр
  #тип - целое число
  #используется при создании и обновлении
  #boot_disk_size = 20

  #тип эмулируемой системы
  #опциональный параметр
  #тип - строка
  #возможные значения: "i440fx", "Q35"
  #используется при создании и обновлении
  #chipset = "i440fx"

  #id сепа для boot диска
  #опциональный параметр
  #тип - целое число
  #используется при создании
  #sep_id = 1

  #название пула
  #опциональный параметр
  #тип - строка
  #используется при создании
  #pool = "data02"

  #конфигурация cloud init
  #опциональный параметр
  #тип - файл в формате JSON
  #используется при создании
  #cloud_init = file("initconfig.tftpl")

  #описание compute
  #опциональный параметр
  #тип - строка
  #используется при создании и обновлении
  #description = "test update description in tf words update"

  #id образа диска для создания compute
  #опциональный параметр
  #тип - целое число
  #используется при создании и обновлении
  #image_id = 111

  #создание без загрузочного диска в остановленном состоянии
  #опциональный параметр
  #если значение равно True, параметры image_id, boot_disk_size, sep_id, pool должны быть пустыми
  #тип - булев
  #используется при создании
  #without_boot_disk = true

  #необходимость выравнивать ВМ по NUMA
  #опциональный параметр
  #возможные значения - "none "strict" "loose"
  #по умолчанию - "none"
  #тип - строка
  #используется при создании и обновлении
  #numa_affinity = "loose"

  #необходимость запускать ВМ на выделенных CPU ядрах
  #опциональный параметр
  #по умолчанию - false
  #тип - булев
  #используется при создании и обновлении
  #cpu_pin = true

  #необходимость использовать для выделения RAM виртуальной машины Huge Pages
  #опциональный параметр
  #по умолчанию - false
  #тип - булев
  #используется при создании и обновлении
  #hp_backed = true

  #список PCI девайсов
  #опциональный параметр
  #тип - массив целых чисел
  #используется при создании и обновлении
  #pci_devices = [1,2]

  #правила affinity
  #опциональный параметр
  #может быть один, несколько или ни одного
  #тип - список объектов правил
  #используется при создании и обновлении
  #affinity_rules = [{
    #тип правила
    #обязательный параметр
    #возможные значения - compute или node
    #тип - строка
    #topology = "compute"

    #строгость правила
    #обязательный параметр
    #возможные значения - RECOMMENDED и REQUIRED
    #тип - строка
    #policy = "RECOMMENDED"

    #режим проверки 
    #обязательный параметр
    #возможные значения - ANY, EQ, NE
    #тип - строка
    #mode = "ANY"

    #ключ правила
    #обязательный параметр
    #тип - строка
    #key = "testkey"

    #ключ правила
    #опциональный параметр
    #тип - строка
    #value = "testvalue"
  #}]

  #правила anti-affinity
  #опциональный параметр
  #может быть один, несколько или ни одного
  #тип - список объектов правил
  #используется при создании и обновлении
  #anti_affinity_rules = [{
    #тип правила
    #обязательный параметр
    #возможные значения - compute или node
    #тип - строка
    #topology = "compute"

    #строгость правила
    #обязательный параметр
    #возможные значения - RECOMMENDED и REQUIRED
    #тип - строка
    #policy = "RECOMMENDED"

    #режим проверки 
    #обязательный параметр
    #возможные значения - ANY, EQ, NE
    #тип - строка
    #mode = "ANY"

    #ключ правила
    #обязательный параметр
    #тип - строка
    #key = "testkey"

    #ключ правила
    #опциональный параметр
    #тип -строка
    #value = "testvalue"
  #}]

  #установка метки для вм
  #опциональный параметр
  #тип - строка
  #используется при создании и обновлении
  #affinity_label = "test4"

  #Управление XML виртуальной машины
  #опциональный параметр
  #тип - строка (json-encoded)
  #используется при создании и обновлении
  #custom_fields = "{`key`:`value`}"

  #наименование системы
  #опциональный параметр
  #используется при создании вм
  #по умолчанию - не задан
  #тип - строка
  #используется при создании
  #is = ""

  #назначение вм
  #опциональный параметр
  #используется при создании вм
  #по умолчанию - не задан
  #тип - строка
  #используется при создании
  #ipa_type = ""

  #id экстра дисков
  #опциональный параметр
  #тип - массив целых чисел
  #используется при создании и обновлении
  #extra_disks = [1234, 4322, 1344]

  #присоединения сетей и удаление сетей в компьюте
  #опциональный параметр
  #тип - список объектов сетей
  #используется при создании и обновлении
  #network = [{
    #тип сети
    #обязательный параметр
    #тип - строка
    #возможные значения - "VINS", "EXTNET", "VFNIC", "DPDK" (при выборе типа DPDK, необходимо указать hp_backed = true)
    #net_type = "VINS"

    #id сети
    #обязательный параметр
    #тип - целое число
    #net_id = 1234

    #ip адрес входящий в сеть
    #опциональный параметр
    #тип - строка
    #ip_address = "127.0.0.1"

    #mac-адрес интерфейса компьюта
    #опциональный параметр
    #тип - строка
    #mac = "52:54:01:12:34:60"

    #вес сети, указывается при необходимости указания порядка подключения сетей
    #первой подключается сеть с наименьшим весом
    #сеть с нулевым или неуказанным весом имеет наименьший приоритет
    #опциональный параметр
    #тип - целое число
    #weight = 15

    #максимальный объём данных, который может быть передан за одну итерацию
    #используется только с сетями типа "DPDK"
    #возможные значения - 1-9216
    #опциональный параметр
    #тип - целое число
    #mtu = 1500
  #}]

  #добавление и удаление тэгов
  #опциональный параметр
  #тип - список тэгов
  #используется при создании и обновлении
  #tags = [{
    #ключ для тэга
    #обязательный параметр
    #тип - строка
    #key = "key"

    #значения тэга
    #обязательный параметр
    #тип - строка
    #value = "value"
  #}]

  #добавление и удаление port forwarding
  #опциональный параметр
  #тип - список объектов переадресации портов
  #используется при создании и обновлении
  #port_forwarding = [{
    #номер внешнего начального порта для правила
    #Обязательный параметр
    #тип - целое число
    #public_port_start = 2023

    #номер внешнего последнего порта для правила
    #опциональный параметр
    #тип - целое число
    #по умолчанию - -1
    #public_port_end = 2023

    #номер внутреннего базового порта
    #обязательный параметр
    #тип - целое число
    #local_port = 80

    #сетевой протокол
    #обязательный параметр
    #тип - строка
    #proto = "tcp"
  #}]

  #предоставить/забрать пользователю доступ к компьюту
  #опциональный параметр
  #тип - список объектов прав пользователя
  #используется при создании и обновлении
  #user_access = [{
    #имя юзера, которому предоставляем доступ
    #обязательный параметр
    #тип - строка
    #username = "some@decs3o"

    #права: 'R' - только на чтение, 'RCX' - чтение/запись, 'ARCXDU' - админ
    #обязательный параметр
    #тип - строка
    #access_type = "ARCXDU"
  #}]

  #создать/удалить снапшот компьюта
  #опциональный параметр
  #тип - список объектов снапшотов
  #используется при создании и обновлении
  #snapshot = [{
    #лейбл снапшота
    #обязательный параметр
    #тип - строка
    #label = "label1"
  #}]

  #флаг для удаления снапшотов в асинхронном режиме
  #опциональный параметр
  #по умолчанию - false
  #тип - булев
  #используется при удалении
  #snapshot_delete_async = true

  #rollback на нужный снапшот
  #опциональный параметр
  #не имеет смысла при отсутсвии снапшотов
  #тип - объект
  #используется при обновлении
  #rollback = {
    #лейбл снапшота
    #обязательный параметр
    #тип - строка
    #label = "label1"
  #}

  #вставить/удалить СD rom
  #опциональный параметр
  #тип - целое число
  #используется при создании и обновлении
  #cd_image_id = 344

  #список ядер для использования в механизме vcpupinning. Количество указанных ядер должно быть равно количеству виртуальных процессоров ВМ
  #игнорируется если cpu_pin=false или pin_to_stack=false
  #опциональный параметр
  #тип - массив целых чисел
  #используется при создании и обновлении
  #preferred_cpu = [1234, 456]

  #добавить компьют на стэк
  #опциональный параметр
  #тип - булев
  #используется при создании и обновлении
  #pin_to_stack = true

  #флаг для старта компьюта при рестарте ноды
  #опциональный параметр
  #тип - булев
  #используется при создании и обновлении
  #auto_start_w_node = true

  #флаг доступности компьюта для проведения с ним операций
  #опциональный параметр
  #тип - булев
  #используется при создании и обновлении
  #enabled = true

  #pause/resume компьюта
  #опциональный параметр
  #тип - булев
  #по умолчанию - false
  #используется при создании и обновлении
  #pause = true

  #reset компьюта
  #опциональный параметр
  #тип - булев
  #по умолчанию - false
  #используется при обновлении
  #reset = true

  #восстановить компьют из корзины
  #опциональный параметр
  #тип - булев
  #по умолчанию - true
  #используется при обновлении
  #restore = true

  #флаг для редеплоя компьюта
  #опциональный параметр
  #тип - булев
  #по умолчанию - false
  #используется при обновлении
  force_stop = true

  #флаг для ресайза компьюта
  #опциональный параметр
  #тип - булев
  #по умолчанию - false
  #используется при обновлении
  #force_resize = true

  #запуск/стоп компьюта
  #опциональный параметр
  #тип - булев
  #по умолчанию - true
  #используется при создании и обновлении
  #started = true

  #detach диска при удалении компьюта
  #опциональный параметр
  #тип - булев
  #по умолчанию - true
  #используется при удалении
  #detach_disks = true

  #флаг для удаления компьюта
  #опциональный параметр
  #тип - булев
  #по умолчанию - true
  #используется при удалении
  #permanently = false

  #тип вм
  #возможные значения - linux, windows, unknown
  #опциональный параметр
  #тип - строка
  #используется при создании и обновлении
  #loader_type = "unknown"

  #тип загрузки образа
  #возможные значения - bios, uefi
  #опциональный параметр
  #тип - строка
  #используется при создании и обновлении
  #boot_type = "bios"

  #изменение размера ВМ
  #опциональный параметр
  #тип - булев
  #используется при создании и обновлении
  #hot_resize = false

  #наименование сетевого интерфейса
  #возможные значения - eth, ens
  #опциональный параметр
  #тип - строка
  #используется при создании и обновлении
  #network_interface_naming = "ens"

}

initconfig.tftpl

{
  "users": [
    {
      "groups": "users, wheel",
      "name": "user",
      "plain_text_passwd": "examplePassword",
      "primary_group": "user",
      "ssh_authorized_keys": [
        "ssh-rsa EXAMPLE%id_rsa.pub"
      ],
      "sudo": "ALL=(ALL) NOPASSWD:ALL"
    }
  ]
}

Данный пример подразумевает, что ранее по тексту tf-файла :

  • выполнена корректная инициализация провайдера (подробнее об инициализации Terraform провайдера DYNAMIX см. соответствующий раздел).
  • создан ресурс типа dynamixresgroup (см. _resource функцию dynamix_resgroup) и результат записан в переменную dynamix_resgroup.my_rg
  • считана информация об образе ОС(см. data функцию dynamix_image) и результат записан в переменную dynamix_resgroup.os_image

После успешного завершения такого вызова resource функции dynamix_kvmvm в переменной dynamix_kvmvm.comp будут сохранены возвращаемые значения. В частности, для получения идентификатора виртуальной машины следует использовать конструкцию dynamix_kvmvm.comp.id.