Функция доступна в версии провайдера 4.5.1 и выше.

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

Важно: при удалении в конфигурационном файле Terraform любого блока disks, на платформе будет удален последний. При необходимости удалить не последний блок, рекомендуем пользоваться web интерфейсом платформы. Поведение будет исправлено в следующих версиях.

## Аргументы
_Resource_ функция **decort_cb_kvmvm** принимает следующие аргументы:

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| name | string | :heavy_check_mark: | Имя виртуальной машины. Обратите внимание, что имя должно быть уникальным в рамках ресурсной группы. |
| rg_id | int | :heavy_check_mark: | Идентификатор ресурсной группы, которой принадлежит данная виртуальная машина. |
| driver | string | :heavy_check_mark: | Аппаратная архитектура виртуальной машины.<br/>Может принимать одно из следующих значений:<br/> * "KVM_X86" - виртуальная машина KVM на аппаратной платформе x86.<br/> * "KVM_PPC" - виртуальная машина KVM на аппаратной платформе IBM Power. |
| cpu | int | :heavy_check_mark: | Количество процессоров. |
| ram | int | :heavy_check_mark: | Объём оперативной памяти в МБ.<br/> |
| boot_disk_size | int | :x: | Размер загрузочного диска виртуальной машины в ГБ. |
| image_id | int | :x: | Идентификатор образа, на базе которого создаётся загрузочный диск виртуальной машины.<br/> |
| sep_id | int | :x: | ID SEP для создания загрузочного диска. Если не задан, будет использоваться sepId образа. Значение по умолчанию 0. |
| pool | string | :x: | Пул (если установлен sepId). Если значение не задано, то пул будет выбран системой. |
| cloud_init | string | :x: | Используется на этапе создания вм.<br/>Параметры для утилиты _cloud_init_, которая используется в платформе DECORT для первичного конфигурирования виртуальной машины после её создания. |
| description | string | :x: | Текстовое описание виртуальной машины. |
| force_resize | bool | :x: | Флаг для изменения CPU и RAM в принудительном порядке |
| started | bool | :x: | Флаг запуска машины,<br/>по-умолчанию - true.<br/>Если true - машина включена,<br/>если false - выключена. |
| alt_boot_id | int | :x: | ID live CD-ROM для загрузки образа. |
| stack_id | int | :x: | id стэка |
| is | string | :x: | Наименование системы |
| ipa_type | string | :x: | Тип аутентификатора |
| custom_fields | string | :x: | Кастомные поля |
| network | []Struct [см. ниже](#описание-блока-network-args) | :x: | Параметры сетевого подключения.<br/>Если нужно сконфигурировать несколько сетевых подключений, данный блок можно задавать многократно - по одному на каждое подключение. |
| reason | string | :x: | Причина вызова |
| affinity_label | string | :x: | Метка для правил affinity |
| affinity_rules | []Struct [см. ниже](#описание-блока-affinity_rules-args) | :x: | Блок описания правил affinity. Блоков может быть несколько, один или отсутствовать. |
| anti_affinity_rules | []Struct [см. ниже](#описание-блока-anti_affinity_rules-args) | :x: | Блок описания правил anti-affinity. Блоков может быть несколько, один или отсутствовать. |
| disks | []Struct [см. ниже](#описание-блока-disks-args) | :x: | Описание диска. Таких может быть любое кол-во, либо не быть вообще |
| extra_disks | []int | :x: | Список идентификаторов дополнительных дисков, которые подключены к данной виртуальной машине помимо загрузочного диска. Если такие диски отсутствуют, то список будет пустым. |
| tags | []Struct [см. ниже](#описание-блока-tags-args) | :x: | Задание тэгов компьюта |
| port_forwarding | []Struct [см. ниже](#описание-блока-port_forwarding-args) | :x: | Настройка порт форвардинга для компьюта |
| user_access | []Struct [см. ниже](#описание-блока-user_access-args) | :x: | Предоставление доступов к компьюту |
| snapshot | []Struct [см. ниже](#описание-блока-snapshot-args) | :x: | Создание мнапшотов |
| rollback | []Struct [см. ниже](#описание-блока-rollback-args) | :x: | Rollback на определенный снапшот |
| cd | []Struct [см. ниже](#описание-блока-cd-args) | :x: | Добавление диска cd rom |
| pin_to_stack | bool | :x: | Флаг, отвечающий за добавление кмпьюта в стэк |
| target_stack_id | int | :x: | Узел, на который переместится машина |
| force_pin | bool | :x: | Флаг для принужительного добавления компьюта на стэк |
| enabled | bool | :x: | Флаг доступности компьюта для проведения с ним операций |
| pause | bool | :x: | Флаг, отвечающий за pause/resume компьюта |
| reset | bool | :x: | Флаг, отвечающий за reset компьюта |
| restore | bool | :x: | Восстановить удаленный компьют из корзины |
| auto_start | bool | :x: | Флаг, отвечающий за авто старт при редеплое компьюта |
| depresent | bool | :x: | Флаг, отвечающий за остановку доступа узла к дискам виртуальной машины, при остановке |
| force_stop | bool | :x: | Флаг, отвечающий за стоп при редеплое компьюта |
| data_disks | string | :x: | Указание того, что делать с дисками при редеплое. Возможные значения: "KEEP", "DETACH" и "DESTROY" |
| detach_disks | bool | :x: | Отсоединение прикрепленных к виртуальной машине дисков перед ее удалением. Параметр считывается только при использовании команды `terraform destroy`, то есть только при удалении ресурса |
| permanently | bool | :x: | Мгновенное удаление виртуальной машины, минуя корзину. Параметр считывается только при использовании команды `terraform destroy`, то есть только при удалении ресурса |
| cpu_pin | bool | :x: | Необходимость запускать ВМ на выделенных CPU ядрах |
| numa_affinity | string | :x: | Необходимость выравнивать ВМ по NUMA. Возможные значения - "none, "strict", "loose" |
| hp_backed | bool | :x: | Необходимость использовать для выделения RAM виртуальной машины Huge Pages ядрах |
| without_boot_disk | bool | :x: | Флаг отсутствия загрузочного диска |
| pci_devices | []int | :x: | Список PCI девайсов |

### Описание блока disks args

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| disk_name | string | :heavy_check_mark: | Наименование диска |
| size | int | :heavy_check_mark: | Размер диска, GB |
| disk_type | string | :x: | Тип диска. Возможные значения: "D" - диск с данными, "B" - загрузочный диск |
| sep_id | int | :x: | ID storage endpoint |
| pool | string | :x: | Наименование пула для размещения диска |
| desc | string | :x: | Описание диска |
| node_ids | []int | :x: | Список ID ресурсов, которым будет предоставлен диск (ID узла, в котором создается виртуальная машина, указывается автоматически) |
| image_id | int | :x: | ID образа |
| permanently | bool | :x: | Флаг для удаления диска. Если выставлен в true - диск будет моментально удален с платформы, иначе будет добавлен в корзину и его можно будет восстановить. Значение поля считывается только при операции `terraform destroy`. По умолчанию - false |

### Описание блока network args

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| net_type | string | :heavy_check_mark: | тип сети, соответствующей данному подключению. "EXTNET" в случае прямого подключения во внешнюю сеть, "VINS" в случае подключения к Virtual Network Segment. |
| net_id | int | :heavy_check_mark: | идентификатор соответствующего сетевого сегмента: внешней сети в случае `net_type = "EXTNET"`,  ViNS в случае `net_type = "VINS"`, и VFNIC в случае `net_type="VFNIC` |
| ip_address | string | :x: | IP адрес, выделенный данному подключению. |
| mac | string | :x: | MAC адрес, назначенный соответствующему сетевому интерфейсу виртуальной машины. |

### Описание блока affinity_rules args

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

### Описание блока anti_affinity_rules args

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

### Описание блока tags args

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| key | string | :heavy_check_mark: | Ключ тэга |
| val | string | :heavy_check_mark: | Значение тэга |

### Описание блока port_forwarding args

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

### Описание блока user_access args

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

### Описание блока snapshot args

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

### Описание блока rollback args

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

### Описание блока cd args

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| cdrom_id | int | :heavy_check_mark: | Идентификатор образа cdrom диска |

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| account_id | int | Уникальный идентификатор подписчика-владельца ("account") данной виртуальной машины. |
| account_name | string | Имя подписчика, которому принадлежит данная виртуальная машина. |
| acl | []Struct [см. ниже](#описание-структуры-acl) | Cписок Acces Control |
| affinity_label | string | Лейбл аффинити |
| affinity_rules | []Struct [см. ниже](#описание-структуры-affinity-rules) | Правила аффинити для компьютов |
| affinity_weight | int | weight аффинити |
| anti_affinity_rules | []Struct [см. ниже](#описание-структуры-affinity-rules) | Правила анти аффинити для компьютов |
| arch | string | Архитектура |
| boot_order | []string | Boot order |
| clone_reference | int | кол-во клонов |
| clones | []int | id клонов |
| compute_id | int | Идентификатор экземпляра _compute_, соответствующего данной виртуальной машине. |
| computeci_id | int | ID вычислительного ресурса |
| cd_image_id | int | ID cd image id |
| cpu | int | Количество виртуальных CPU, выделенных данному серверу. |
| created_by | string | Кем создан _compute_ |
| created_time | int | Время создания _compute_ |
| custom_fields | string | Кастомные поля |
| deleted_by | string | Кем удален _compute_ |
| deleted_time | int | Время удаления _compute_ |
| description | string | Текстовое описание виртуальной машины. |
| devices | string | Девайсы |
| disks | []Struct [см. ниже](#описание-структуры-disks) | информация о дисках компьюта |
| driver | string | Аппаратная архитектура данной виртуальной машины. |
| gid | int | GRID ID |
| guid | int | ID ресурса |
| image_id | int | Идентификатор образа ОС, на базе которого создан загрузочный диск этой виртуальной машины. |
| image_name | string | Имя образа |
| interfaces | []Struct [см. ниже](#описание-структуры-interfaces) | Информация о интерфейсах компьюта |
| lock_status | string | Статус доступности |
| manager_id | int | Manager id |
| manager_type | string | Type manager |
| migrationjob | int | Migrationjob |
| milestones | int | Вехи |
| name | string | Имя компьюта |
| 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 | флаг, указывающий, что требуется перезагрузка |
| need_reboot | bool | Флаг перезапуска |
| numa_node_id | int | ID узла  NUMA |
| os_users | []Struct [см. ниже](#описание-структуры-os-users) | Имена и пароли пользователей гостевой ОС, установленные платформой при создании виртуального сервера. |
| pinned | bool | добавлен ли компьют на стек |
| ram | int | Объём оперативной памяти в МБ, выделенной этой виртуальной машине. |
| reference_id | string | ID ссылки |
| registered | bool | Компьют зарегестрирован |
| res_name | string | Наименование ресурса |
| reserved_node_cpus | []int | Количество зарезервированных CPU в узле |
| rg_id | int | Идентификатор ресурсной группы, к которой принадлежит виртуальная машина. |
| rg_name | string | Имя ресурсной группы, к которой принадлежит виртуальная машина. |
| snap_sets | []Struct [см. ниже](#описание-структуры-snap-sets) | Snap sets |
| stack_id | int | id стэка |
| stack_name | string | Название стэка |
| stateless_sep_id | int | ID сеп |
| stateless_sep_type | string | Тип сеп |
| status | string | Статус компьюта |
| tags | []Struct [см. ниже](#описание-структуры-tags) | Тэги |
| tech_status | string | Технический статус компьюта в составе группы |
| updated_by | string | Кем компьют был обновлен |
| updated_time | int | Время последнего обновления |
| user_managed | bool | Флаг, показывает управление пользователем вычислительной мощностью |
| pci_devices | []int | Список PCI девайсов |
| vgpus | []int | Список vgpu |
| virtual_image_id | int | ID виртуального образа |
| virtual_image_name | string | Имя виртуального образа |
| boot_disk_id | int | Идентификатор загрузочного диска виртуальной машины. |
| boot_disk_size | int | Размер загрузочного диска в ГБ. |
| sep_id | int | ID sep |
| pool | string | Pool |
| extra_disks | []int | Список идентификаторов дополнительных дисков, которые подключены к данной виртуальной машине помимо загрузочного диска. Если такие диски отсутствуют, то список будет пустым. |
| network | []Struct [см. ниже](#описание-структуры-network) | Характеристики сетевых сегментов, к которым подключен данный сервер. |

### Описание структуры network
| Параметр | Тип | Описание |
| --- | --- | --- |
| net_id | int | ID сети |
| net_type | string | Тип сети |
| ip_address | string | IP адрес |
| mac | string | MAC адрес |

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

### Описание структуры tags
| Параметр | Тип | Описание |
| --- | --- | --- |
| key | string | Ключ тэга |
| val | string | Значение тэга |

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

### Описание структуры interfaces
| Параметр | Тип | Описание |
| --- | --- | --- |
| conn_id | int | ID connect |
| conn_type | string | Тип connect |
| def_gw | string | Шлюз по умолчанию |
| enabled | bool | Доступность подключения |
| flip_group_id | int | id flip group |
| guid | string | GUID |
| ip_address | string | IP адрес |
| 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) | QOS |
| target | string | Цель сети |
| type | string | Тип |
| vnfs | []int | VNFS |

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

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

### Описание структуры affinity rules
| Параметр | Тип | Описание |
| --- | --- | --- |
| guid | string | guid |
| key | string | Ключ |
| mode | string | Режим сравнения |
| policy | string | Степень "строгости" этого правила |
| topology | string | Топология |
| value | string | Значение |

### Описание структуры disks
| Параметр | Тип | Описание |
| --- | --- | --- |
| pool | string | Имя пула в системе хранения, на ресурсах которой размещён данный диск |
| sep_id | int | Идентификатор Storage Endpoint Provider (SEP). SEP это способ идентифицировать конкретную систему хранения, на ресурсах которой размещён данный диск |
| size | int | Размер диска в ГБ |
| disk_type | string | Тип диска с точки зрения его роли в составе _compute_. Может принимать одно из фиксированных значений:<br/>"B" - признак загрузочного диска ("boot").<br/>"D" - признак дополнительного диска ("data") |
| disk_name | string | Наименование диска |
| desc | string | Описание |
| image_id | int | ID образа |
| disk_id | int | ID диска |
| shareable | bool | Флаг, отвечающий за доступность диска дургим ресурсам |
| size_max | int | Максимальный размер диска |
| size_used | int | Кол-во используемого места, в ГБ |

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

## Пример использования
В нижеприведённом примере с помощью _resource_ функции **decort_cb_kvmvm** создаётся виртуальная машина (экземпляр _compute_ в терминологии платформы DECORT) следующими характеристиками:
* Имя виртуальной машины - "tf-managed-vm"
* Характеристики виртуальной машины - 1 CPU, 1024Мб RAM, размер загрузочного диска 10Гб
* К виртуальной машине будет подключён один дополнительный диск с идентификатором 56789
* Идентификатор ресурсной группы, в которой создаётся виртуальная машина - поступает из переменной _decort_cb_rg.my_rg.id_
* Идентификатор образа ОС, который будет установлен на загрузочный диск - поступает из переменной _data.decort_cb_image.os_image.id_
* Виртуальная машина будет иметь одно сетевое подключение - во внешнюю сеть с идентификатором 12, IP адрес этого подключения платформа установит автоматически

```terraform
resource "decort_cb_kvmvm" "my_new_vm" {
  #имя compute
  #обязательный параметр
  #мб изменен
  #тип - строка
  name = "test-tf-compute-update-new"

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

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

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

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

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

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

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

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

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

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

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

  #stack id
  #опциональный параметр
  #тип - целое число
  #stack_id = 1

  #id образа CD-ROM для загрузки
  #используется при изменении ресурса, при повторном старте вм 
  #опциональный параметр
  #тип - целое число
  #alt_boot_id = 1

  #необходимость выравнивать ВМ по 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]

  #создание и добавление диска дял compute
  #опциональный параметр
  #тип - список дисков
  #disks {
  #Имя диска
  #Обязательный для диска параметр
  #Тип - строка
  #disk_name = "disk_name"

  #размер диска
  #Обязательный для диска параметр
  #тип - целое число
  #size = 5

  #тип диска
  #опциональный параметр
  #тип - строка
  #disk_type = "D"

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

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

  #список node
  #опциональный параметр
  #тип - массив целых чисел
  #node_ids = [10,11]

  #описание диска
  #опциональный параметр
  #тип - строка
  #desc = ""

  #id образа
  #опциональный параметр
  #image_id = 378

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

  #правила 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"


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

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

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

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

  #описание необходимости выполнения действия
  #опциональный параметр
  #тип - строка
  #reason = "need"

  #присоеденения сетей и удаление сетей в компьюте
  #опциональный параметр
  #тип - блок
  #network {
  #тип сети VINS/EXTNET (для любого драйвера) и VFNIC (для KVM_X86)
  #обязательный параметр
  #тип - строка
  #net_type = "VINS"

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

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

  #добавление и удаление тэгов
  #опциональный параметр
  #тип - блок
  #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"
  #}

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

  #вставить/удалить СD rom
  #опциональный параметр
  #максимальное кол-во - 1
  #тип - блок
  #cd {
  #id образа диска CD rom
  #обязательный параметр
  #тип - целое число
  #cdrom_id = 344
  #}

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

  #id stack для добавления компьюта на этот стэк
  #опциональный параметр
  #тип - целое число
  #target_stack_id = 1

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

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

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

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

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

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

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

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

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

  #поле для редеплоя компьюта
  #опциональный параметр
  #тип - строка
  #data_disks = "KEEP"

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

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

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

Данный пример подразумевает, что ранее по тексту tf-файла :
* выполнена корректная инициализация провайдера (подробнее об инициализации Terraform провайдера DECORT см. соответствующий [раздел](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/04.02-Инициализация-Terraform-провайдера-DECORT.md)). 
* создан ресурс типа decort_resgroup (см. _resource_ функцию [decort_resgroup](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/07.01.02-Resource_decort_resgroup.md)) и результат записан в переменную _decort_resgroup.my_rg_ 
* считана информация об образе ОС(см. _data_ функцию [decort_image](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/06.01.07-Data_decort_image.md)) и результат записан в переменную _decort_resgroup.os_image_ 

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