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.
wiki-terraform-provider-decort/4.9.1/07.01.01-Resource_decort_kv...

1082 lines
64 KiB

1 month ago
_Resource_ функция **decort_kvmvm** служит для управления виртуальными машинами, создаваемыми на платформе DECORT на базе технологии виртуализации KVM.
### Работа с custom_fields
CustomFields - это новый метод работы с XML ВМ, пришедший на замену ComputeCI ачиная с версии провайдера 4.3.0.
Для описания конфигурации используется файл в формате 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.
### Работа boot_disk
В стейт в поле boot_disk записывается первый найденный диск с типом "B", остальные диски с типом "B" обрабатываются и записываются в массив disks.
### Убраны deprecated поля
- network_id
- network_type
### Возможные затруднения при работе с блоком disks.
По умолчанию, sep_id и pool на платформе выбираются те же, на которых размещается загрузочный диск (создается вместе с виртуальной машиной). Из-за этого, могут возникать ошибки следующего характера:
- `Cannot add disk to Compute ID XXX: Pool xxxx does not support disk type X ` - данная ошибка означает то, что выбранный пул не поддерживает выбранные тип диска
Пути решения:
- Выполнить **decort_disk_list_types_detailed**. Результатом выполнения этой функции станет список доступных пулов хранилища вместе с их идентификаторами (sep_id).
- Заполнить поля sep_id и pool подходящими полями для диска.
- При удалении не последнего блока в списке, перед подтверждением Terraform не правильно отображает диск, который будет удаляться. На самом деле из состояние будет удален тот диск, который был убран из файла. Также будет нужен дополнительное выполнение terraform apply для того чтобы все блоки сейта терраформа встали на свои места и не отличались от настоящего состояния ресурса
Важно: при удалении в конфигурационном файле Terraform любого блока disks, на платформе будет удален последний. При необходимости удалить не последний блок, рекомендуем пользоваться web интерфейсом платформы. Поведение будет исправлено в следующих версиях.
### Работа с cloud_init
Cloud Init позволяет запустить ВМ с предустановленными настройками пользователя, группами и доступами. Подробнее про настройку cloud_init можно прочесть по [ссылке](https://cloudinit.readthedocs.io/en/latest/reference/examples.html).
**Пароли, указанные в cloud_init не сохраняются на платформе и не отображаются в API!**
Для использования cloud_init конфигурации, следует:
1. Создать файл с расширением `.tftpl` в рабочей директории.
2. Описать в созданном файле конфигурацию cloud_init в формате JSON. Если ранее конфигурация cloud_init ранее была создана в формате YAML, можно воспользоваться любым онлайн конвертером, например: https://onlineyamltools.com/convert-yaml-to-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"
}
]
}
```
3. Указать путь до файла `initconfig.tftpl` в качестве значения параметра `cloud_init` в ресурсе `decort_kvmvm`:
```terraform
resource "decort_kvmvm" "compute1" {
# ...
cloud_init = file("initconfig.tftpl")
# ...
}
```
4. Выполнить `terraform apply`
**Конфигурация cloud_init применяется только при создании компьюта, во всех остальных случаях - игнорируется**
### Работа с полем weight в блоке network
В версии 4.7.0 в блоке network добавлено опциональное поле weight, которое можно использовать, в случае, когда необходимо указать порядок подключения сетей, т.к. по умолчанию сети подключаются в случайном порядке.
Сети с наименьшим весом будут подключены в первую очередь. Сети с неуказанным или нулевым значением будут подключены в последнюю очередь (иметь наименьший приоритет)
В случае, если все сети не имеют параметра весов, подключение будет производится как и раньше.
При выполнении update сортироваться будут только вновь подключаемые сети, порядок уже подключенных сетей остается без изменения.
Так же следует обратить внимание, что если при update была отключена какая либо сеть, то вновь подключаемые сети с наименьшим весом сети займут ранее освобожденные интерфейсы, и только после будут добавляться в конец списка подключенных сетей.
При изменении или удалении данного поля, в уже созданном ресурсе, сеть будет считаться вновь подключаемой и следовательно будет отключена от VM и подключена по новой, с учетом веса подключаемых сетей.
### Смена image_id (redeploy)
При смене образа компьюта `image_id`, логика работы следующая:
- выполняется выключение компьюта (compute/stop) берутся параметры: `force_stop`, по умолчанию: false (чтобы избежать некорректной работы);
- после выполняется redeploy с новым образом, а так же, берутся следующие параметры: diskSize (из `boot_disk_size`), dataDisks - KEEP (начиная с 4.8.2) autoStart из поля `started` и forceStop (`force_stop` по умолчанию false).
## Аргументы
_Resource_ функция **decort_kvmvm** принимает следующие аргументы:
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| driver | string | :heavy_check_mark: | Аппаратная архитектура виртуальной машины.<br/>Может принимать одно из следующих значений:<br/> _ "KVM_X86" - stateful виртуальная машина KVM на аппаратной платформе x86.<br/> _ "SVA_KVM_X86" - stateless ВМ на аппаратной платформе x86. |
| name | string | :heavy_check_mark: | Имя виртуальной машины. Обратите внимание, что имя должно быть уникальным в рамках ресурсной группы |
| rg_id | int | :heavy_check_mark: | Идентификатор ресурсной группы, которой принадлежит данная виртуальная машина |
| ram | int | :heavy_check_mark: | Объём оперативной памяти в МБ.<br/> |
| boot_disk_size | int | :x: | Размер загрузочного диска виртуальной машины в ГБ |
| chipset | string | :x: | Тип эмулируемой системы |
| custom_fields | string (json-encoded) | :x: | Управление XML виртуальной машины |
| extra_disks | []int | :x: | Список идентификаторов дополнительных дисков, которые требуется подключить к данной виртуальной машине помимо загрузочного диска |
| image_id | int | :x: | Идентификатор образа, на базе которого создаётся загрузочный диск виртуальной машины.<br/> |
| cloud_init | string | :x: | Используется на этапе создания вм.<br/>Параметры для утилиты _cloud_init_, которая используется на платформе DECORT для первичного конфигурирования виртуальной машины после её создания. Файл в формате JSON. |
| network | []Struct [см. ниже](#описание-блока-network) | :x: | Параметры сетевого подключения. Если нужно сконфигурировать несколько сетевых подключений, данный блок можно задавать многократно - по одному на каждое подключение |
| description | string | :x: | Текстовое описание виртуальной машины |
| started | bool | :x: | Флаг запуска машины,<br/>по умолчанию - true.<br/>Если true - машина включена,<br/>если false - выключена |
| sep_id | int | :x: | Идентификатор sep |
| pool | string | :x: | Наименование пула для размещения |
| is | string | :x: | Наименование системы |
| ipa_type | string | :x: | Тип аутентификатора |
| permanently | bool | :x: | Мгновенное удаление виртуальной машины, минуя корзину. Параметр считывается только при использовании команды `terraform destroy`, то есть только при удалении ресурса |
| detach_disks | bool | :x: | Отсоединение прикрепленных к виртуальной машине дисков перед ее удалением. Параметр считывается только при использовании команды `terraform destroy`, то есть только при удалении ресурса |
| disks | []Struct [см. ниже](#описание-блока-disks) | :x: | Описание диска. Таких может быть любое кол-во, либо не быть вообще |
| enabled | bool | :x: | Доступность вычислительной машины |
| affinity_label | string | :x: | Метка для правил affinity |
| affinity_rules | []Struct [см. ниже](#описание-блока-affinity_rules) | :x: | Блок описания правил affinity. Блоков может быть несколько, один или отсутствовать |
| anti_affinity_rules | []Struct [см. ниже](#описание-блока-anti_affinity_rules) | :x: | Блок описания правил anti-affinity. Блоков может быть несколько, один или отсутствовать |
| tags | []Struct [см. ниже](#описание-блока-tags) | :x: | Задание тэгов компьюта |
| port_forwarding | []Struct [см. ниже](#описание-блока-port_forwarding) | :x: | Настройка порт форвардинга для компьюта |
| user_access | []Struct [см. ниже](#описание-блока-user_access) | :x: | Предоставление доступов к компьюту |
| snapshot | []Struct [см. ниже](#описание-блока-snapshot) | :x: | Создание cнапшотов |
| rollback | []Struct [см. ниже](#описание-блока-rollback) | :x: | Rollback на определенный снапшот |
| cd | []Struct [см. ниже](#описание-блока-cd) | :x: | Добавление диска cd rom |
| pin_to_stack | bool | :x: | Флаг, отвечающий за добавление компьюта на стэк |
| preferred_cpu | []int | :x: | список ядер для использования в механизме vcpupinning. Количество указанных ядер должно быть равно количеству виртуальных процессоров ВМ. Игнорируется если cpu_pin=false или pin_to_stack=false|
| auto_start_w_node | bool | :x: | Флаг, отвечающий за автостарт при рестарте ноды |
| pause | bool | :x: | Флаг, отвечающий за pause/resume компьюта |
| reset | bool | :x: | Флаг, отвечающий за reset компьюта |
| force_stop | bool | :x: | Флаг, отвечающий за стоп при редеплое компьюта |
| force_resize | bool | :x: | Флаг для изменения CPU и RAM в принудительном порядке |
| restore | bool | :x: | Восстановить удаленный компьют из корзины |
| 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: | Флаг отсутствия загрузочного диска |
| snapshot_delete_async | bool | :x: | Флаг для удаления снапшотов в асинхронном режиме |
| loader_type | string | :x: | Тип ВМ. Возможные значения - linux, windows, unknown|
| boot_type | string | :x: | Тип загрузки образа. Возможные значения - bios, uefi |
| hot_resize | bool | :x: | Изменение размера ВМ |
| network_interface_naming | string | :x: | Наименование сетевого интерфейса. Возможные значения - eth, ens |
### Описание блока disks
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| 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: | Описание диска |
| image_id | int | :x: | ID образа |
| permanently | bool | :x: | Флаг для удаления диска. Если выставлен в true - диск будет моментально удален с платформы, иначе будет добавлен в корзину и его можно будет восстановить. Значение поля считывается только при операции `terraform destroy`. По умолчанию - false |
### Описание блока network
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| 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`, и DPDK в случае `net_type = "DPDK"` |
| ip_address | string | :x: | IP адрес, выделенный данному подключению. |
| weight | int | :x: | Вес сети, указывается при необходимости указания порядка подключения сетей. Первой подключается сеть с наименьшим весом. Сеть с нулевым или неуказанным весом имеет наименьший приоритет |
| mtu | int | :x: | Максимальный объём данных, который может быть передан за одну итерацию. Применяется только для DPDK сетей. Может быть от 1 до 9216 |
### Описание блока affinity_rules
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| 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
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| 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
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| key | string | :heavy_check_mark: | Ключ тэга |
| val | string | :heavy_check_mark: | Значение тэга |
### Описание блока port_forwarding
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| 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
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| username | string | :heavy_check_mark: | Юзер, которому необходимо выдать определенные права на компьют |
| access_type | string | :heavy_check_mark: | Права, которые выдадутся юзеру на компьют. Возможные значения: "R", "RCX" или "ARCXDU" |
### Описание блока snapshot
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| label | string | :heavy_check_mark: | Лейбл снапшота |
### Описание блока rollback
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| label | string | :heavy_check_mark: | Лейбл снапшота на который нужно сделать rollback |
### Описание блока cd
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| cdrom_id | int | :heavy_check_mark: | Идентификатор образа cdrom диска |
## Возвращаемые значения
В случае успешного выполнения _resource_ функция **decort_kvmvm** возвращает в указанную при вызове переменную следующие значения:
| Параметр | Тип | Описание |
| --- | --- | --- |
| account_id | int | Уникальный идентификатор аккаунта-владельца ("account") данной виртуальной машины. |
| account_name | string | Имя аккаунта, которому принадлежит данная виртуальная машина. |
| affinity_label | string | Метка для правил affinity |
| affinity_rules | []Struct [см. ниже](#описание-структуры-affinity_rules) | Описание правил affinity |
| affinity_weight | int | weight аффинити |
| anti_affinity_rules | []Struct [см. ниже](#описание-структуры-affinity_rules) | Описание правил anti-affinity. |
| arch | string | Архитектура |
| auto_start_w_node | bool | Флаг, отвечающий за автостарт при рестарте ноды |
| boot_disk | []Struct [см. ниже](#описание-структуры-boot_disk) | Полная информация о бутдиске |
| boot_disk_id | int | Идентификатор загрузочного диска виртуальной машины. |
| boot_disk_size | int | Размер загрузочного диска в ГБ. |
| boot_order | []string | Boot order |
| boot_type | string | Тип загрузки образа. Возможные значения - bios, uefi |
| cd | []Struct [см. ниже](#описание-структуры-cd) | Информация о диске cd rom |
| cd_image_id | int | ID cd image id |
| chipset | string | Тип эмулируемой системы |
| clone_reference | int | кол-во клонов |
| clones | []int | ID клонов |
| cloud_init | string | Параметры cloud_init |
| computeci_id | int | ID computeci |
| compute_id | int | Идентификатор экземпляра _compute_, соответствующего данной виртуальной машине. |
| cpu | int | Количество виртуальных CPU, выделенных данному серверу. |
| cpu_pin | bool | Необходимость запускать ВМ на выделенных 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 | [см. ниже](#описание-структуры-disks) | Описание диска. Таких может быть любое кол-во, либо не быть вообще |
| driver | string | Аппаратная архитектура данной виртуальной машины. |
| enabled | bool | Доступность вычислительной машины |
| extra_disks | list of ints | Список идентификаторов дополнительных дисков, которые подключены к данной виртуальной машине помимо загрузочного диска. Если такие диски отсутствуют, то список будет пустым. |
| force_resize | bool | Флаг для изменения CPU и RAM в принудительном порядке |
| force_stop | bool | Флаг, отвечающий за стоп при редеплое компьюта |
| gid | int | GID |
| guid | int | GUID |
| hot_resize | bool | Флаг изменение размера ВМ |
| hp_backed | bool | Необходимость использовать для выделения RAM виртуальной машины Huge Pages ядрах |
| id | int | Уникальный идентификатор этой виртуальной машины в облачной платформе. Всегда совпадает с `compute_id`. |
| image_id | int | Идентификатор образа ОС, на базе которого создан загрузочный диск этой виртуальной машины. |
| interfaces | []Struct [см. ниже](#описание-структуры-interfaces) | Информация о интерфейсах компьюта |
| ipa_type | string | Тип аутентификатора |
| is | string | Наименование системы |
| loader_type | string | Тип ВМ |
| lock_status | string | Статус доступности |
| manager_id | int | Manager id |
| manager_type | string | Type manager |
| migrationjob | int | Migrationjob |
| milestones | int | Вехи |
| name | string | Имя виртуального сервера.<br>Возвращаемое значение `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 | []Struct [см. ниже](#описание-структуры-networks) | Параметры сетевого подключения |
| network_interface_naming | string | Наименование сетевого интерфейса |
| numa_affinity | string | Необходимость выравнивать ВМ по NUMA |
| numa_node_id | int | ID узла NUMA |
| os_users | []Struct [см. ниже](#описание-структуры-os-users) | Имена и пароли пользователей гостевой ОС, установленные платформой при создании виртуального сервера. Формат структуры:<br/>_ (string) `login` - учётная запись в гостевой ОС.<br/>_ (string) `password` - пароль к этой учётной записи. |
| pause | bool | Флаг, отвечающий за pause/resume компьюта |
| pci_devices | []int | Список PCI девайсов |
| permanently | bool | Мгновенное удаление виртуальной машины, минуя корзину. Параметр считывается только при использовании команды `terraform destroy`, то есть только при удалении ресурса |
| pin_to_stack | bool | Флаг, отвечающий за добавление компьюта на стэк |
| pinned | bool | добавлен ли компьют на стек |
| pool | string | Наименование пула для размещения |
| port_forwarding | []Struct [см. ниже](#описание-структуры-port_forwarding) | Настройка порт форвардинга для компьюта |
| preferred_cpu | []int | список ядер для использования в механизме vcpupinning |
| ram | int | Объём оперативной памяти в МБ, выделенной этой виртуальной машине. |
| reference_id | string | ID reference |
| registered | bool | Компьют зарегестрирован |
| res_name | string | Res name |
| reserved_node_cpus | []int | Количество зарезервированных CPU в узле |
| reset | bool | Флаг отвечающий за reset компьюта |
| restore | bool | Флаг восстановления удаленного компьют из корзины |
| rg_id | int | Идентификатор ресурсной группы, к которой принадлежит виртуальная машина. |
| rg_name | string | Имя ресурсной группы, к которой принадлежит виртуальная машина. |
| rollback | []Struct [см. ниже](#описание-структуры-rollback) | Rollback на определенный снапшот |
| sep_id | int | Идентификатор sep |
| snap_sets | []Struct [см. ниже](#описание-структуры-snap-sets) | Snap sets |
| snapshot | []Struct [см. ниже](#описание-структуры-snapshot) | Список созданных снапшотов |
| snapshot_delete_async | bool | Флаг для удаления снапшотов в асинхронном режиме |
| started | bool | Флаг запуска виртуальной машины |
| stateless_sep_id | int | ID сепа |
| stateless_sep_type | string | Тип сепа |
| status | string | Cтатус |
| tags | []Struct [см. ниже](#описание-структуры-tags) | Список тэгов компьюта |
| tech_status | string | Технический статус |
| updated_by | string | Кем обновлен ресурс |
| updated_time | int | Время обновления ресурса |
| user_access | []Struct [см. ниже](#описание-структуры-user_access) | Список доступов к компьюту |
| user_managed | bool | User managed |
| virtual_image_id | int | ID виртуального образа |
| vgpus | []Struct [см. ниже](#описание-структуры-vgpu) | Список vgpu |
| virtual_image_name | string | Имя образа ОС, на базе которого создан загрузочный диск этой виртуальной машины |
| vnc_password | string | vnc пароль |
| without_boot_disk | bool | Флаг отсутствия загрузочного диска |
### Описание структуры affinity_rules
| Аргумент | Тип | Описание |
| --- | --- | --- |
| topology | string | Тип правила. Возможные значения - node, compute |
| policy | string | Строгость правила. Возможные значения - RECOMMENDED (рекомендовано) и REQUIRED (обязательно) |
| mode | string | Режим проверки. Возможные значения - EQ (равно), NE (не равно), ANY - любое |
| key | string | Ключ правила |
| value | string | Значение правила |
### Описание структуры boot_disk
| Параметр | Тип | Описание |
| --- | --- | --- |
| desc | string | Описание диска |
| disk_id | int | ID диска |
| disk_name | string | Наименование диска |
| disk_type | string | Тип диска (B) |
| image_id | int | ID образа диска |
| pool | string | Наименование пула |
| present_to | map[string]int | Список ID ресурсов, которым предоставлена реплика диска |
| sep_id | int | Storage Endpoint ID |
| shareable | bool | Доступность другим ресурсам |
| size | int | Размер диска |
| size_max | int | Максимальный размер диска |
| size_used | float | Используемый размер |
### Описание структуры cd
| Аргумент | Тип | Описание |
| --- | --- | --- |
| cdrom_id | int | Идентификатор образа cdrom диска |
### Описание структуры disks
| Аргумент | Тип | Описание |
| --- | --- | --- |
| disk_id | int | ID диска |
| disk_name | string | Наименование диска |
| size | int | Размер диска, GB |
| disk_type | string | Тип диска. Возможные значения: "D" - диск с данными, "B" - загрузочный диск |
| sep_id | int | ID storage endpoint |
| shareable | bool | Флаг, отвечающий за доступность диска дургим ресурсам |
| size_max | int | Размер диска |
| size_used | float | Размер занимаемого на диске места |
| pool | string | Наименование пула для размещения диска |
| present_to | map[string]int | Список ID ресурсов, которым предоставлена реплика диска |
| desc | string | Описание диска |
| image_id | int | ID образа |
### Описание структуры interfaces
| Параметр | Тип | Описание |
| --- | --- | --- |
| bus_number | int | Номер шины |
| 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 адрес устройства |
| mtu | string | Максимальный объём данных, который может быть передан за одну итерацию |
| 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 |
| libvirt_settings | []Struct{}[см. ниже](#описание-структуры-libvirt_settings) | Параметры libvirt virtio интерфейса |
### Описание структуры qos
| Параметр | Тип | Описание |
| --- | --- | --- |
| e_rate | int | E rate |
| guid | string | ID ресурса |
| in_brust | int | In brust |
| in_rate | int | In rate |
### Описание структуры 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 |
### Описание структуры networks
| Параметр | Тип | Описание |
| --- | --- | --- |
| net_type | string | тип сети, соответствующей данному подключению. "EXTNET" в случае прямого подключения во внешнюю сеть, "VINS" в случае подключения к Virtual Network Segment. |
| 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 сетей. |
### Описание структуры os users
| Параметр | Тип | Описание |
| --- | --- | --- |
| guid | string | GUID |
| login | string | Логин |
| password | string | Пароль |
| public_key | string | Публичный ssh ключ |
### Описание структуры port_forwarding
| Аргумент | Тип | Описание |
| --- | --- | --- |
| public_port_start | int | Начало диапазона внешних портов для данного правила pfw |
| public_port_end | int | Конец диапазона внешних портов для данного правила pfw |
| local_port | int | Локальный порт для данного правила pfw |
| proto | string | Протокол создания правила pfw. Возможные значения: "tcp" или "udp" |
### Описание структуры rollback
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| label | string | Лейбл снапшота на который нужно сделать rollback |
### Описание структуры snap sets
| Параметр | Тип | Описание |
| --- | --- | --- |
| disks | []int | Список id дисков |
| guid | string | GUID |
| label | string | Лейбл |
| timestamp | int | Время |
### Описание структуры snapshot
| Аргумент | Тип | Описание |
| --- | --- | --- |
| label | string | Лейбл снапшота |
### Описание структуры tags
| Аргумент | Тип | Описание |
| --- | --- | --- |
| key | string | Ключ тэга |
| val | string | Значение тэга |
### Описание структуры user_access
| Аргумент | Тип | Описание |
| --- | --- | --- |
| username | string | Юзер, которому необходимо выдать определенные права на компьют |
| access_type | string | Права, которые выдадутся юзеру на компьют. Возможные значения: "R", "RCX" или "ARCXDU" |
### Описание структуры 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_ функции **decort_kvmvm** создаётся виртуальная машина (экземпляр _compute_ в терминологии платформы DECORT) следующими характеристиками:
- Имя виртуальной машины - "tf-managed-vm"
- Характеристики виртуальной машины - 1 CPU, 1024Мб RAM, размер загрузочного диска 10Гб
- К виртуальной машине будет подключён один дополнительный диск с идентификатором 56789
- Идентификатор ресурсной группы, в которой создаётся виртуальная машина - поступает из переменной _decort_resgroup.my_rg.id_
- Идентификатор образа ОС, который будет установлен на загрузочный диск - поступает из переменной _data.decort_image.os_image.id_
- Виртуальная машина будет иметь одно сетевое подключение - во внешнюю сеть с идентификатором 12, IP адрес этого подключения платформа установит автоматически
- Для виртуальной машины будет создан и автоматически подключен диск с именем "test_disk" и размером в 10 GB. Созданный диск будет иметь тип "D", размещен в pool "test_pool", в хранилище с идентификатором 3. Данный диск будет создан с системным образом, который имеет идентификатор 3456.
```terraform
resource "decort_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
#кол-во оперативной памяти, МБ
#обязательный параметр
#тип - целое число
#используется при создании и обновлении
ram = 2048
#тип эмулируемой системы
#опциональный параметр
#тип - строка
#возможные значения: "i440fx", "Q35"
#по умолчанию - "Q35"
#используется при создании и обновлении
#chipset = "i440fx"
#размер загрузочного диска
#опциональный параметр
#тип - целое число
#используется при создании и обновлении
#boot_disk_size = 20
#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]
#создание и добавление диска для compute
#опциональный параметр
#тип - список дисков
#используется при создании и обновлении
#disks {
#имя диска
#обязательный для диска параметр
#тип - строка
#disk_name = "disk_name"
#размер диска
#обязательный для диска параметр
#тип - целое число
#size = 5
#тип диска
#опциональный параметр
#тип - строка
#disk_type = "D"
#id сепа
#опциональный параметр
#тип - целое число
#sep_id = 1
#название пула
#опциональный параметр
#тип - строка
#pool = "data01"
#описание диска
#опциональный параметр
#тип - строка
#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]
#присоединения сетей и удаление сетей в компьюте
#опциональный параметр
#тип - блок сетей
#используется при создании и обновлении
#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 = "kasim_baybikov_1@decs3o"
#права: 'R' - только на чтение, 'RCX' - чтение/запись, 'ARCXDU' - админ
#обязательный параметр
#тип - строка
#access_type = "ARCXDU"
#}
#создать/удалить снапшот компьюта
#опциональный параметр
#тип - блок снапшотов
#используется при создании и обновлении
#snapshot {
#лейбл снапшота
#обязательный параметр
#тип - строка
#label = "label1"
#}
#флаг для удаления снапшотов в асинхронном режиме
#опциональный параметр
#по умолчанию - false
#тип - булев
#используется при удалении
#snapshot_delete_async = true
#rollback на нужный снапшот
#опциональный параметр
#не имеет смысла при отсутсвии снапшотов
#тип - блок rollback
#используется при обновлении
#rollback {
#лейбл снапшота
#обязательный параметр
#тип - строка
#label = "label1"
#}
#вставить/удалить СD rom
#опциональный параметр
#максимальное кол-во - 1
#тип - блок cd
#используется при создании и обновлении
#cd {
#id образа диска CD rom
#обязательный параметр
#тип - целое число
#cdrom_id = 344
#}
#добавить компьют на стэк
#опциональный параметр
#тип - булев
#используется при создании и обновлении
#pin_to_stack = true
#список ядер для использования в механизме vcpupinning. Количество указанных ядер должно быть равно количеству виртуальных процессоров ВМ
#игнорируется если cpu_pin=false или pin_to_stack=false
#опциональный параметр
#тип - массив целых чисел
#используется при создании и обновлении
#preferred_cpu = [1234, 456]
#флаг для старта компьюта при рестарте ноды
#опциональный параметр
#тип - булев
#используется при создании и обновлении
#auto_start_w_node = true
#флаг доступности компьюта для проведения с ним операций
#опциональный параметр
#тип - булев
#используется при создании и обновлении
#enabled = true
#pause/resume компьюта
#опциональный параметр
#тип - булев
#используется при создании и обновлении
#pause = true
#сделать компьют заново
#опциональный параметр
#тип - булев
#используется при обновлении
#reset = true
#восстановить компьют из корзины
#опциональный параметр
#тип - булев
#используется при обновлении
#restore = true
#флаг для редеплоя компьюта
#опциональный параметр
#тип - булев
#используется при обновлении
#force_stop = true
#флаг для ресайза компьюта
#опциональный параметр
#тип - булев
#используется при обновлении
#force_resize = true
#запуск/стоп компьюта
#опциональный параметр
#тип - булев
#используется при создании и обновлении
#started = true
#detach диска при удалении компьюта
#опциональный параметр
#тип - булев
#используется при удалении
#detach_disks = 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 провайдера DECORT см. соответствующий [раздел](https://repository.basistech.ru/BASIS/wiki-terraform-provider-decort/src/branch/main/4.9.1/04.02-Инициализация-Terraform-провайдера-DECORT.md)).
- создан ресурс типа decort*resgroup (см. \_resource* функцию [decort_resgroup](https://repository.basistech.ru/BASIS/wiki-terraform-provider-decort/src/branch/main/4.9.1/07.01.02-Resource_decort_resgroup.md)) и результат записан в переменную _decort_resgroup.my_rg_
- считана информация об образе ОС(см. _data_ функцию [decort_image](https://repository.basistech.ru/BASIS/wiki-terraform-provider-decort/src/branch/main/4.9.1/06.01.07-Data_decort_image.md)) и результат записан в переменную _decort_resgroup.os_image_
После успешного завершения такого вызова _resource_ функции **decort_kvmvm** в переменной `decort_kvmvm.comp` будут сохранены возвращаемые значения. В частности, для получения идентификатора виртуальной машины следует использовать конструкцию `decort_kvmvm.comp.id`.