Перейти к основному содержимому

Инструкция по использованию Terraform с Платформой виртуализации «Горизонт-ВС»

Установка Terraform на ОС Ubuntu​

1. Установка GPG-ключа репозитория. Так как прямой доступ к сайту HashiCorp может быть закрыт, мы используем VPN.

curl -fsSL --socks5-hostname 127.0.0.1:10808 https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg

2. Добавляем официальный репозиторий

echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

3. Обновляем списков пакетов

sudo http_proxy=http://127.0.0.1:10809 apt update

4. Устанавливаем Terraform

sudo http_proxy=http://127.0.0.1:10809 apt install terraform

5. Проверяем установку Terraform

terraform -v

Установка Terraform на macOS​

1. Подключите официальный репозиторий HashiCorp

brew tap hashicorp/tap

2. Установите актуальную стабильную версию Terraform

brew install hashicorp/tap/terraform

3. Проверьте установленную версию

terraform -v

4. Проверьте работоспособность и список доступных команд

terraform -help

Установка Terraform на ОС Windows​

1. Для установки Terraform на ОС Windows необходимо установить менеджер пакетов для Windows – Chocolatey. Для этого необходимо открыть Windows Powershell с правами администратора:

Введите код в командную строку и дождитесь инсталляции:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) 

Если появится ошибка, то необходимо использовать VPN для успешной инсталляции.

2. Выполните установку Terraform с помощью choco командой:

choco install terraform

3. Выполнить проверку установки Terraform можно с помощью команды:

terraform -v

Если установка Terraform прошла успешно, команда выведет информацию о версии:

4. Для удобной работы в редакторе кода при выполнении следующих этапов, рекомендуется установить расширение «HashiCorp Terraform»

Настройка провайдера «Горизонт-ВС» c использованием шаблона Opennebula​

Для начала работы с Terraform и Горизонт-ВС, необходимо создать файл конфигурации CLI terraform.rc, в котором будет описаны параметры и поведение инструмента. В ОС Windows файл c названием terraform.rc должен размещаться в каталоге AppData пользователя, а в случае использования других ОС название файла должно быть .terraformrc и располагаться данный файл должен в домашней директории пользователя. Для определения расположения этого каталога необходимо использовать команды PowerShell:

$env:APPDATA

После создания данного файла необходимо заполнить его соответствующими настройками:

provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}

Следующим этапом нужно создать новую директорию с произвольным названием, в данном случае директория будет называться TerraGorizont и создать в данной директории конфигурационный файл main.tf. В связи с тем, что официальный сайт Terraform by HashiCorp и сайт с провайдерами Terraform заблокирован на территории РФ, в инструкции будут использоваться официальные зеркала, разрешенные на территории РФ для Terraform от Яндекса.

Описание конфигурационного файла Terraform​

Ниже приведено описание основных блоков и параметров конфигурации для интеграции с платформой виртуализации «Горизонт-ВС» (через провайдер OpenNebula).

1. Блок настроек Terraform (terraform ...)​

В этом блоке определяются глобальные настройки и требования к окружению.

НаименованиеОписание
required_providersБлок, в котором указываются используемые провайдеры.
opennebulaПровайдер для работы с платформой «Горизонт-ВС».
sourceИсточник провайдера: OpenNebula/opennebula.
versionВерсия провайдера. Значение ~> 1.3 означает использование актуальной стабильной версии в рамках ветки 1.3.

2. Блок настройки провайдера (provider "opennebula" ...)​

Здесь задаются параметры подключения к API вашей системы:

ПараметрОписание
endpointURL-адрес API платформы «Горизонт-ВС». Стандартный формат: http://<IP-адрес>:2633/RPC2. При использовании отказоустойчивого кластера с алгоритмом RAFT необходимо указывать «плавающий» (Virtual) IP-адрес кластера.
usernameИмя пользователя для аутентификации. По умолчанию используется admin - стандартная учетная запись администратора СГУ.
passwordПароль для доступа к системе.
Примечание по безопасности

Не рекомендуется хранить пароли в открытом виде в .tf-файлах. Для защиты учетных данных рекомендуется использовать переменные окружения или специализированные хранилища секретов.

3. Проверка конфигурации​

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

terraform validate

Если конфигурация корректна, появится вывод:

Success! The configuration is valid.

После успешной проверки конфигурации, инициализируем проект командой:

terraform init

Данный вывод сообщает что подключение к API «Горизонт-ВС» прошло успешно.

Создание и добавление ресурсов в Горизонт-ВС с помощью Terraform​

Ресурс «Списки контроля» - opennebula_acl​

Для создания ресурса, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_acl" "наименование_ресурса" {
user = "ID_пользователя"
resource = "наименование_затрагиваемого_ресурса"
rights = "наименование_разрешенного_действия"
}

Параметры настройки «Списков контроля» (ACL)

ПеременнаяОписаниеДопустимые значения
user (обязательная)Идентификатор субъекта, на которого распространяется правило.• "#ID" - конкретный пользователь • "@ID" - конкретная группа • "*" - все пользователи
resource (обязательная)Ресурсы, к которым предоставляется доступ. Для выбора нескольких используйте +. Для подмножеств используйте / или %ID (для кластеров).• "VM", "HOST", "NET",
rights (необязательная)Разрешенные действия над ресурсами. Несколько действий разделяются знаком +.• "USE" - использование • "MANAGE" - управление • "ADMIN" - администрирование • "CREATE" - создание

Пример создания списка контроля доступа которые применяется ко всем, затрагивает все ресурсы, все подмножества ресурсов и имеет все разрешенные действия:

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим добавленный список контроля доступа в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Кластеры» - opennebula_cluster​

Для создания ресурса, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_cluster" "наименование_ресурса" {
name = "наименование_кластера"
}

Пример создания логического кластера с наименованием teracluster:

АтрибутДопустимые значенияОписание
name (обязательный)Строка в двойных кавычках (“ ”)Наименование кластера, которое будет отображаться в СГУ.

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданный логический кластер в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Хранилища» - opennebula_datastore​

Хранилище CEPH (Требует проверки, для остальных типов хранилищ – необходима доработка Terraform). Для создания ресурса, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_datastore" "наименование_ресурса" {
name = "наименование_хранилища"
type = "тип_хранилища"
bridge_list = ["хосты_сгу_через_пробел"]
ceph {
pool_name = "наименование_пула_CEPH"
user = "имя_пользователя_CEPH"
host = ["мониторы_распределенного_хранилища"]
secret = "уникальный_идентификатор"
}

Атрибуты хранилища (Datastore)

АтрибутДопустимые значенияОписание
name (обязательный)Строка в " "Наименование хранилища для отображения в СГУ.
type (обязательный)"image", "system", "file"Тип хранилища: для образов, системное или файловое.
cluster_ids (необязательный)Числа в [ ]Список ID кластеров, к которым привязывается хранилище.
restricted_directories (необязательный)Строка в " "Пути, запрещенные для регистрации образов (через пробел).
safe_directories (необязательный)Строка в " "Разрешенные пути для регистрации образов (через пробел).
no_decompress (необязательный)True или FalseОтключает попытки распаковки файлов при регистрации.
storage_usage_limit (необязательный)Число (МБ)Максимально допустимая емкость хранилища.
transfer_bandwidth_limit (необязательный)Число (Байт/с)Лимит скорости загрузки образов по HTTP/HTTPS.
check_available_capacity (необязательный)True или FalseПроверка наличия свободного места перед созданием образа.
bridge_list (необязательный)Список в [" "]Список хостов, имеющих доступ на добавление образов.
staging_dir (необязательный)Строка в " "Путь к временному каталогу для регистрации образов.
Пример записи:
name = "DS_Images_01", type = "image", cluster_ids = [1, 2], no_decompress = True

Параметры блока Ceph (внутренний ресурс хранилища)

АтрибутДопустимые значенияОписание
user (необязательный)Строка в " "Имя пользователя в системе CEPH.
key (необязательный)Строка в " "Путь к файлу-ключу пользователя.
config (необязательный)Строка в " "Путь к файлу конфигурации хранилища CEPH.
rbd_format (необязательный)ЧислоФормат RBD (по умолчанию используется формат 2).
secret (необязательный)Строка в " "UUID (уникальный идентификатор) секретного ключа.
host (необязательный)Список в [" "]Список адресов мониторов CEPH (через пробел).
Пример структуры:
ceph { user = "admin", rbd_format = 2, host = ["mon1.local mon2.local"] }

Пример добавления хранилища распределенного CEPH с использованием параметров для регистрации образов и настроек CEPH:

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим добавленное хранилище CEPH в СГУ:

При успешной инициализации хранилища, будет отображаться в СГУ доступная и использованная емкость хранилища.

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Группы» - opennebula_group​

Для создания ресурса, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_group" "наименование_ресурса" {
name = "название_группы"
users = [ID_пользователей]
admins = [ID_пользователей]
}

Пример создания группы с пользователями с ID 4,5,6 и назначения пользователя с ID 6 администратором данной группы:

Атрибуты группы

АтрибутДопустимые значенияОписание
name (обязательный)Строка в " "Наименование группы для отображения в СГУ.
users (необязательный)Числа в [ ]Список ID пользователей, добавляемых в группу (через запятую).
admins (необязательный)Числа в [ ]Список ID администраторов группы. Должны также входить в список users.
Пример записи:
name = "DevOps_Team", users = [10, 11, 12], admins = [10]

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим добавленную группу с пользователями и администратором в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Администраторы группы» - opennebula_group_admins​

Для создания ресурса, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_group_admins" "наименование_ресурса" {
group_id = ID_группы
users_ids = [ID_пользователя]
}

Пример назначения пользователя с ID 3 администратором группы с ID 103:

Для управления правами доступа и назначения администраторов внутри групп в «Горизонт-ВС» используются следующие параметры конфигурации:

АтрибутТип значенияОписание
group_idЧисловое (ID)Обязательный. Идентификатор группы, в которой назначается администратор. Пользователь должен быть предварительно добавлен в эту группу.
users_idsСписок чисел [ ]Обязательный. Список ID пользователей, которым присваивается статус «администратор группы». Несколько ID перечисляются через запятую (например, [101, 102]).

Технические особенности:

· Обязательность: Оба атрибута являются критически важными для корректной работы ресурса. Отсутствие одного из них приведет к ошибке при проверке конфигурации.

· Права доступа: Назначение пользователя администратором группы дает ему расширенные привилегии по управлению ресурсами и другими участниками внутри конкретной группы group_id.

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим состав группы на наличие администраторов в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в группе в СГУ данные пользователи потеряют статусы администраторов:

Ресурс «Узлы» - opennebula_host​

Для создания ресурса, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_host" "наименование_ресурса" {
name = "IP_адрес_или_hostname_узла_который_будет_добавлен"
type = "тип_узла"
cluster_id = ID_кластера
}

Пример добавления узла в СГУ:

Атрибуты узла (Host)

АтрибутДопустимые значенияОписание
name (обязательный)Строка в " "IP-адрес или hostname узла для добавления в систему.
type (обязательный)Строка в " "Тип используемой виртуализации на данном хосте (например, "kvm").
cluster_id (необязательный)Числовое значениеИдентификатор кластера, в состав которого будет включен хост.
Пример записи:
name = "192.168.1.100", type = "kvm", cluster_id = 2


После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим добавленный узел в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Образы» - opennebula_image​

1. Ресурс «Блок данных» - opennebula_image​

Для создания ресурса типа «Блок данных» (пустой диск для хранения данных), необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_image" "наименование_ресурса" {
name = "наименование_образа"
description = "описание_образа"
datastore_id = ID_хранилища
persistent = false
type = "DATABLOCK"
size = размер_образа_в_МБ
dev_prefix = "vd"
driver = "драйвер_образа"
group = "группа_владелец_образа"
}

Пример создания постоянного образа типа «Блок данных» размером 10 ГБ и присвоенной группой «Terragroup»:

Атрибуты ресурса «Образы» (opennebula_image)

АтрибутДопустимые значенияОписание
name (обязательный)Строка в " "Наименование образа для отображения в СГУ.
descriptionСтрока в " "Дополнительная информация о назначении или содержимом образа.
datastore_id (обязательный)Числовое значениеID существующего хранилища, где будет размещен образ.
persistentTrue или FalseTrue: изменения сохраняются. False: (по умолчанию) создается копия, которая удаляется вместе с ВМ.
type (обязательный)"OS", "CDROM", "DATABLOCK"Тип образа: операционная система, образ диска или блок данных.
sizeЧисло в " "Размер в МБ. Используется только для типа DATABLOCK.
dev_prefix"vd", "hd", "sd"Префикс шины: "vd" (Virtio),
driver"raw", "qcow2"raw: «толстый» диск (блочное/файловое хранилище). qcow2: «тонкий» диск (только файловое хранилище).
groupСтрока в " "Группа-владелец ресурса в СГУ.
Пример использования:
name = "Ubuntu_22.04", type = "OS", driver = "qcow2", persistent = True

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданный образ в СГУ:

Примечание

Для удаления созданного образа необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

2. Ресурс «CD-ROM только для чтения» - opennebula_image​

Для создания образа из существующего ISO-файла (например, дистрибутива ОС), необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_image" "наименование_ресурса" {
name = "наименование_образа"
description = "описание_образа"
datastore_id = ID_хранилища
persistent = true
type = "CDROM"
dev_prefix = "hd"
driver = "драйвер_образа"
path = "путь_до_файла_на_http_сервере_или_на_гипервизоре"
group = "группа_владелец_образа"
}

Пример создания постоянного образа типа «CD-ROM только для чтения» с указанием ссылки на http сервер, где расположен данный образ и присвоенной группой «Terragroup»:

Атрибуты ресурса «Образы» (загрузка через path)

АтрибутДопустимые значенияОписание
name (обязательный)Строка в " "Наименование образа для отображения в СГУ.
path (обязательный)Строка в " "Путь к файлу на гипервизоре или URL (http/https). Конфликтует с clone_from_image.
type (обязательный)"OS", "CDROM", "DATABLOCK"Предназначение образа: ОС, CD-ROM или блок данных.
datastore_id (обязательный)Числовое значениеID хранилища в СГУ, куда будет загружен файл.
descriptionСтрока в " "Описание назначения или содержимого образа.
persistentTrue или FalseTrue: изменения сохраняются. False: (по умолчанию) создается временная копия.
dev_prefix"vd", "hd", "sd"Префикс шины: "vd" (Virtio), "hd" (SATA), "sd" (SCSI).
driver"raw", "qcow2"raw: «толстый» диск (везде). qcow2: «тонкий» диск (только файловые системы).
groupСтрока в " "Группа-владелец ресурса в СГУ.
Пример записи:
name = "Debian_12", path = "http://repo.local", type = "OS", driver = "qcow2"

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданный образ в СГУ:

Примечание

Для удаления созданного образа необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

3. Ресурс «Образ операционной системы» - opennebula_image​

Для создания основного диска с установленной ОС (например, готовый шаблон Ubuntu или CentOS), необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_image" "наименование_ресурса" {
name = "название_образа"
description = "описание_образа"
datastore_id = ID_хранилища
persistent = true
type = "OS"
path = "путь_до_файла_на_http_сервере_или_на_гипервизоре"
dev_prefix = "vd"
driver = "драйвер_образа"
group = "группа_владелец_образа"
}

Пример создания постоянного образа типа «Образ операционный системы» Alpine формата vmdk с указанием ссылки на http сервер, где расположен данный образ и присвоенной группой «Terragroup»:

Атрибуты ресурса «Образы» (загрузка через path)

АтрибутДопустимые значенияОписание
name (обязательный)Строка в " "Наименование образа для отображения в СГУ.
path (обязательный)Строка в " "Путь к файлу на гипервизоре или URL (HTTP/HTTPS). Конфликтует с clone_from_image.
type (обязательный)"OS", "CDROM", "DATABLOCK"Тип образа: операционная система, CD-ROM или блок данных.
datastore_id (обязательный)Числовое значениеID хранилища в СГУ, где будет размещен образ.
descriptionСтрока в " "Дополнительная информация о назначении или содержимом образа.
persistentTrue или FalseTrue: изменения сохраняются. False: (по умолчанию) создается временная копия.
dev_prefix"vd", "hd", "sd"Префикс шины: "vd" (Virtio), "hd" (SATA), "sd" (SCSI).
driver"raw", "qcow2"raw: «толстый» диск (блочное/файловое хранилище). qcow2: «тонкий» диск (только файловые системы).
groupСтрока в " "Группа-владелец ресурса в СГУ.
Пример записи:
name = "Web_Server_Base", path = "https://example.com", type = "OS", persistent = False

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданный образ в СГУ:

Примечание

Для удаления созданного образа необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

4. opennebula_image - ресурс «Клонированный образ»​

Для создания копии уже существующего в системе образа, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_image" "наименование_ресурса" {
clone_from_image = ID_образа_источника
name = "наименование_образа"
datastore_id = ID_хранилища
persistent = true
group = "группа_владелец_образа"
}

Пример клонирования образа с ID 78 в СГУ и присвоенной группой «Terragroup»:

Атрибуты ресурса «Образы» (клонирование)

АтрибутДопустимые значенияОписание
clone_from_image (обязательный)Числовое значениеID существующего образа в СГУ, который станет исходным для клонирования.
name (обязательный)Строка в " "Наименование нового образа (клона) для отображения в СГУ.
datastore_id (обязательный)Числовое значениеID хранилища, на котором будет размещен клон.
descriptionСтрока в " "Дополнительная информация о назначении или содержании образа.
persistentTrue или FalseTrue: изменения сохраняются после выключения ВМ. False: (по умолчанию) создается временная копия.
groupСтрока в " "Группа-владелец нового образа в СГУ.
Пример записи:
clone_from_image = 42, name = "Clone_of_Ubuntu", datastore_id = 100, persistent = True

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим склонированный образ в СГУ:

Примечание

Для удаления созданного образа необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

5. opennebula_image - ресурс «Файл контекста»​

Внимание!

Для работы данного ресурса требуется NFS-хранилище типа «FILE» (хранилище файлов в СГУ).

Для создания ресурса необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_image" "наименование_ресурса" {
name = "наименование_файла_образа"
description = "описание_файла_образа"
datastore_id = ID_хранилища
type = "CONTEXT"
path = "путь_до_файла_на_http_сервере_или_на_гипервизоре"
}

Пример создания файла-контекста с указанием пути расположения на гипервизоре:

Атрибуты ресурса «Образы» (тип Файл/Контекст)

АтрибутДопустимые значенияОписание
name (обязательный)Строка в " "Наименование образа для отображения в СГУ.
path (обязательный)Строка в " "Путь к файлу на гипервизоре или URL (HTTP/HTTPS). Конфликтует с clone_from_image.
type (обязательный)"OS", "CDROM", "DATABLOCK", "CONTEXT"Тип образа. "CONTEXT" используется для файлов конфигурации и скриптов контекстуализации.
datastore_id (обязательный)Числовое значениеID хранилища в СГУ, где будет размещен файл.
descriptionСтрока в " "Дополнительная информация о назначении или содержимом образа.
groupСтрока в " "Группа-владелец ресурса в СГУ.
Пример записи:
name = "init-script", path = "http://server.local", type = "CONTEXT", datastore_id = 105

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданный файл контекста в СГУ:

Ресурс «Группы безопасности» - opennebula_security_group​

Для создания ресурса (правил сетевого экрана/Firewall), необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_security_group" "наименование_ресурса" {
name = "наименование_группы_безопасности"
description = "описание_группы_безопасности"
group = "группа_владеющая_данным_ресурсом"

rule {
protocol = "протокол_для_использования_в_правиле"
rule_type = "направление_трафика"
}
}

Пример создания группы безопасности с правилами (1) которое использует все протоколы, направление траффика “Исходящий”, и применяется к подсети с ID 1, правило (2) с использованием протокола TCP, с направлением «Входящий» с использованием портов 22,53,80:90, 25 IP адресами начинающимся с IP адреса 192.168.1.1 и правило (3) с использованием протокола ICMP, направлением траффика «Исходящий» и тип протокола ICMP - 13 :

Параметры блока rule (правила фильтрации)

АтрибутДопустимые значенияОписание
protocol (обязательный)"ALL", "TCP", "UDP", "ICMP", "ICMPv6", "IPSEC"Сетевой протокол, к которому применяется правило.
rule_type (обязательный)"INBOUND", "OUTBOUND"Направление трафика: входящий или исходящий.
network_idЧисловое значениеID виртуальной сети для определения IP источника/назначения.
ipСтрока в " "IP-адрес. Если указан size, считается как начальный адрес диапазона.
sizeЧисловое значениеКоличество IP-адресов в диапазоне, начиная от указанного в ip.
rangeСтрока в " "Порты через запятую (напр. "80,443") или диапазон через двоеточие ("20:21").
icmp_typeЧисло (0–18)Тип ICMP трафика (напр. 8 для Echo Request, 0 для Echo Reply).

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданную группу безопасности в СГУ:

Примечание

Для удаления созданного образа необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Шаблоны ВМ» - opennebula_template​

Для создания шаблона, на основе которого будут развертываться виртуальные машины, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_template" "наименование_ресурса" {
name = "наименование_шаблона_вм"
description = "описание_шаблона_вм"
cpu = количество_cpu
cpumodel {
model = "модель_процессора"
}
vcpu = количество_виртуальных_процессоров
memory = количество_оперативной_памяти_в_МБ
group = "группа_владелец_шаблона_ВМ"

disk {
image_id = ID_образа_1
}

disk {
image_id = ID_образа_2
}

graphics {
type = "тип_протокола_отображения"
listen = "0.0.0.0"
passwd = "пароль"
}

os {
arch = "архитектура"
boot = "disk0,disk1"
}

nic {
model = "драйвер_виртуальной_сети"
network_id = ID_виртуальной_сети
security_groups = [ID_группы_безопасности]
}

features {
guest_agent = "YES"
}
}

Пример создания шаблона ВМ с названием «TerraformTemplate», установленными значения процессорной и оперативной памяти, с использованием диска с ID 7 и другими параметрами включая параметры контекстуализации :

Общие атрибуты шаблона ВМ

АтрибутЗначенияОписание
name (обязательный)Строка в двойных кавычках (" ")Наименование шаблона ВМ, которое будет отображаться в СГУ
description (необязательный)Строка в двойных кавычках (" ")Описание шаблона ВМ, которое может содержать дополнительную информацию о его назначении или содержимом
cpu (обязательный)Числовое значениеПроцент ЦП, зарезервированный для виртуальной машины (1 = 100%, один процессор)
vcpu (необязательный)Числовое значениеКоличество ядер CPU
memory (обязательный)Числовое значениеОбъем оперативной памяти ВМ в МБ
group (необязательный)Строка в двойных кавычках (" ")Группа, которой будет принадлежать данный шаблон ВМ в СГУ
sched_requirements (необязательный)Строка в двойных кавычках (" ")Параметры планировщика. Требования к планированию для развертывания ресурса по определенному правилу. Пример: sched_requirements = "FREE_CPU > 60"
sched_ds_requirements (необязательный)Строка в двойных кавычках (" ")Параметры планировщика. Требования к размещению хранилища для развертывания ресурса по определенному правилу. Пример: sched_requirements = "RUNNING_VMS < 5"

Блок cpumodel

АтрибутЗначенияОписание
cpumodel (необязательный)Блок кода для определения модели ЦПБлок для добавления параметра модели ЦП для эмуляции
model (необязательный)Строка в двойных кавычках (" ")Модель ЦП для эмуляции в ВМ. Доступные значения: параметр не применяется, требуется доработка

Блок disk

АтрибутЗначенияОписание
diskБлок кода для определения параметров используемого дискаБлок кода с указанием параметров дисков, которые будут добавлены в шаблон ВМ
image_id (необязательный)Числовое значениеИдентификатор образа диска в СГУ
size (необязательный)Числовое значениеРазмер присоединяемого диска ВМ в МБ. Диск должен быть непостоянным для данного атрибута. Если значение указано, размер диска увеличивается до данного объема. Может быть больше существующего размера образа
target (необязательный)Строка в двойных кавычках (" ")Наименование устройства назначения в ВМ. Учитывается атрибут dev_prefix образа. Например, при dev_prefix = "vd" целевые устройства будут vda, vdb, vdc
driver (необязательный)Строка в двойных кавычках (" ")Драйвер для работы с образом, определяет формат образа и способ обработки
dev_prefix (необязательный)Префикс устройстваПрефикс виртуальных дисков. Для Virtio - vd; также возможны hd для SATA и sd для SCSI
cache (необязательный)Строка в двойных кавычках (" ")Кэш-механизм для диска
io (необязательный)Строка в двойных кавычках (" ")Политика ввода-вывода для диска

Возможные значения driver

ЗначениеОписание
raw«Толстый» диск. Сразу размечается на полный размер. Может размещаться на файловом или блочном хранилище
qcow2«Тонкий» диск. Изначально занимает минимум места и растет по мере заполнения. Может размещаться только на файловом хранилище NFS или общей файловой системе с хостом

Возможные значения cache

ЗначениеОписание
noneОтключает кэширование. Максимальная надежность, но ниже производительность
writethroughДанные кэшируются, но сразу записываются на диск. Хороший баланс надежности и производительности
writebackДанные сначала попадают в кэш и записываются на диск позже. Высокая производительность, но есть риск потери данных при сбое
directsyncСинхронная запись напрямую на диск. Надежно, но медленнее
unsafeМаксимальная производительность, но высокий риск потери данных

Возможные значения io

ЗначениеОписание
threadsМногопоточная обработка операций ввода-вывода
nativeИспользование нативных механизмов ввода-вывода гипервизора или ОС

Блок graphics

АтрибутЗначенияОписание
graphicsБлок для добавления графических параметровВнутренний ресурс объекта «Шаблоны ВМ»
type (обязательный)Строка в двойных кавычках (" ")Протокол передачи окна виртуальной машины. Обычно VNC, также доступен SPICE
listen (обязательный)Строка в двойных кавычках (" ")IP-адрес, на котором будет слушаться сервер. 0.0.0.0 - все интерфейсы
port (необязательный)Строка в двойных кавычках (" ")Порт сервера. Обычно не задается, генерируется автоматически
keymap (необязательный)Строка в двойных кавычках (" ")Раскладка клавиатуры внутри виртуальной машины
passwd (обязательный)Пароль для доступа по протоколу отображенияКонфликтует с атрибутом random_passwd
random_passwd (необязательный)Случайно генерируемый парольКонфликтует с атрибутом passwd

Блок os

АтрибутЗначенияОписание
osБлок для добавления параметров загрузкиВнутренний ресурс объекта «Шаблоны ВМ»
arch (обязательный)Аппаратная архитектура виртуальной машиныОпределяет, как обрабатываются данные и какие инструкции выполняет процессор. Должна соответствовать архитектуре хоста
boot (необязательный)Параметр загрузочного дискаУказывает, какой диск использовать для загрузки. После добавления дисков они обозначаются как disk0, disk1 и т. д.

Блок nic

АтрибутЗначенияОписание
nicБлок для добавления параметров виртуальной сетиВнутренний ресурс объекта «Виртуальные машины»
model (необязательный)Драйвер виртуальной сетиДрайвер, с которым виртуальная сеть будет присоединена к ВМ
network_id (обязательный)ID виртуальной сетиИдентификатор виртуальной сети в СГУ, которая будет присоединена к ВМ
security_groups (необязательный)СписокСписок идентификаторов групп безопасности для данной виртуальной сети
ip (необязательный)Строка в двойных кавычках (" ")IP-адрес, назначенный данной ВМ из добавленной сети
mac (необязательный)Строка в двойных кавычках (" ")MAC-адрес, назначенный данной ВМ из добавленной сети

Возможные значения model

ЗначениеОписание
virtioДрайвер для эмуляции, используемый в KVM
vmxnet3Драйвер виртуализации VMware
e1000Эмуляция Intel PRO/1000 (Gigabit Ethernet)
rtl8139Эмуляция сетевого адаптера Realtek RTL8139

Блок FEATURES

АтрибутЗначенияОписание
FEATURESБлок для добавления параметров «Особенности»Внутренний ресурс объекта «Виртуальные машины»
pae (необязательный)YES / NOТехнология адресации памяти свыше 4 GB для x86-совместимых процессоров
acpi (необязательный)YES / NOУправление питанием через ACPI
apic (необязательный)YES / NOДополнительные возможности управления прерываниями
localtime (необязательный)YES / NOСинхронизация гостевых часов с часовым поясом хоста
hyperv (необязательный)YES / NOДобавление расширения Hyper-V для гостевой ОС Windows
guest_agent (необязательный)YES / NOВключает взаимодействие с гостевым агентом QEMU
virtio_scsi_queues (необязательный)YES / NOКоличество очередей для контроллера virtio-scsi
iothreads (необязательный)Числовое значение в двойных кавычках (" ")Количество потоков ввода-вывода для дисков virtio

Блок vmgroup

АтрибутЗначенияОписание
vmgroupБлок кода для указания правил размещения AFFINITY / ANTI-AFFINITYВнутренний ресурс объекта «Виртуальные машины»
vmgroup_id (обязательный)Числовое значение (ID)ID группы ВМ
role (обязательный)Строка в двойных кавычках (" ")Наименование роли внутри группы ВМ

Блок context

АтрибутЗначенияОписание
contextБлок кода для добавления параметров контекстуализации ВМВнутренний ресурс объекта «Виртуальные машины». Массив пар ключ=значение, который будет обработан и добавлен в переменные CONTEXT
FILESСтрока в двойных кавычках (" ")Список путей, разделенных пробелами, для включения в контекстное устройство
FILES_DSСтрока в двойных кавычках (" ")Список изображений файлов для включения в контекстное устройство
INIT_SCRIPTSСтрока в двойных кавычках (" ")Список сценариев инициализации и порядок их запуска
START_SCRIPTСтрока в двойных кавычках (" ")Текст скрипта, выполняемого при загрузке машины
START_SCRIPT_BASE64Строка в двойных кавычках (" ")То же, что START_SCRIPT, но в Base64
TARGETСтрока в двойных кавычках (" ")Устройство для прикрепления контекстного ISO
DEV_PREFIXСтрока в двойных кавычках (" ")Префикс устройства для контекстного ISO: sd или hd
TOKENСтрока в двойных кавычках (" ")YES, чтобы создать файл token.txt для OneGate
ONEGATE_ENDPOINTСтрока в двойных кавычках (" ")Автоматически добавляется, если TOKEN = YES
NETWORKСтрока в двойных кавычках (" ")YES, чтобы автоматически заполнить сетевые параметры для каждого сетевого адаптера
NETCFG_TYPEСтрока в двойных кавычках (" ")Служба настройки сети внутри гостевой ВМ
NETCFG_NETPLAN_RENDERERСтрока в двойных кавычках (" ")Рендерер Netplan: networkd или NetworkManager
SET_HOSTNAMEСтрока в двойных кавычках (" ")Имя хоста виртуальной машины
DNS_HOSTNAMEСтрока в двойных кавычках (" ")YES, чтобы установить hostname на основе обратного DNS
DNSСтрока в двойных кавычках (" ")DNS-сервер для виртуальной машины
ETHx_MACСтрока в двойных кавычках (" ")MAC-адрес интерфейса
ETHx_IPСтрока в двойных кавычках (" ")IPv4-адрес интерфейса
ETHx_IP6Строка в двойных кавычках (" ")IPv6-адрес интерфейса
ETHx_IP6_PREFIX_LENGTHСтрока в двойных кавычках (" ")Длина префикса IPv6
ETHx_IP6_ULAСтрока в двойных кавычках (" ")Уникальный локальный адрес IPv6
ETHx_IP6_METRICСтрока в двойных кавычках (" ")Метрика IPv6-маршрута
ETHx_IP6_METHODСтрока в двойных кавычках (" ")Метод настройки IPv6
ETHx_METHODСтрока в двойных кавычках (" ")Метод настройки IPv4
ETHx_NETWORKСтрока в двойных кавычках (" ")Сетевой адрес интерфейса
ETHx_MASKСтрока в двойных кавычках (" ")Сетевая маска
ETHx_GATEWAYСтрока в двойных кавычках (" ")Шлюз IPv4
ETHx_GATEWAY6Строка в двойных кавычках (" ")Шлюз IPv6
ETHx_ROUTESСтрока в двойных кавычках (" ")Список пользовательских маршрутов
ETHx_MTUСтрока в двойных кавычках (" ")MTU интерфейса
ETHx_METRICСтрока в двойных кавычках (" ")Метрика маршрута
ETHx_DNSСтрока в двойных кавычках (" ")DNS для сети
ETHx_ALIASy_MACСтрока в двойных кавычках (" ")MAC-адрес псевдонима
ETHx_ALIASy_IPСтрока в двойных кавычках (" ")IPv4-адрес псевдонима
ETHx_ALIASy_IP6Строка в двойных кавычках (" ")IPv6-адрес псевдонима
ETHx_ALIASy_IP6_PREFIX_LENGTHСтрока в двойных кавычках (" ")Длина префикса IPv6 псевдонима
ETHx_ALIASy_IP6_ULAСтрока в двойных кавычках (" ")Уникальный локальный адрес IPv6 псевдонима
ETHx_ALIASy_NETWORKСтрока в двойных кавычках (" ")Сетевой адрес псевдонима
ETHx_ALIASy_MASKСтрока в двойных кавычках (" ")Сетевая маска псевдонима
USERNAMEСтрока в двойных кавычках (" ")Пользователь, который будет создан в гостевой ОС
CRYPTED_PASSWORD_BASE64Строка в двойных кавычках (" ")Зашифрованный пароль в Base64
PASSWORD_BASE64Строка в двойных кавычках (" ")Пароль в Base64
CRYPTED_PASSWORDСтрока в двойных кавычках (" ")Зашифрованный пароль
PASSWORDСтрока в двойных кавычках (" ")Пароль пользователя
SSH_PUBLIC_KEYСтрока в двойных кавычках (" ")Публичный ключ для добавления в authorized_keys
WINADMINСтрока в двойных кавычках (" ")NO, чтобы считать пользователя Windows стандартным
SECURETTYСтрока в двойных кавычках (" ")Управление проверкой безопасности PAM
TIMEZONEСтрока в двойных кавычках (" ")Часовой пояс для установки
GROW_ROOTFSСтрока в двойных кавычках (" ")NO отключает авторасширение корневой ФС или диска C:
GROW_FSСтрока в двойных кавычках (" ")Дополнительные файловые системы или диски для расширения
IGNORE_SWAPСтрока в двойных кавычках (" ")YES отключает автомонтирование swap-устройств
RECREATE_RUNСтрока в двойных кавычках (" ")YES восстанавливает отсутствующие файлы и каталоги в /run
EJECT_CDROMСтрока в двойных кавычках (" ")YES извлекает CD-ROM с context.sh после завершения контекстуализации

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданный шаблон ВМ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Пользователи» - opennebula_user​

Для создания нового пользователя и его привязки к группам, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_user" "наименование_ресурса" {
name = "наименование_пользователя"
password = "пароль_пользователя"
auth_driver = "core"
primary_group = ID_основной_группы
groups = [ID_дополнительной_группы_1, ID_дополнительной_группы_2]
}

Пример создания пользователя с публичным ssh ключом, с основной группой «Terragroup» и драйвером авторизации core:

АтрибутЗначенияОписание
name (обязательный)Наименование учетной записи пользователяНаименование учетной записи пользователя, которое будет отображаться в СГУ
password (обязательный)Пароль для данной учетной записи пользователя, обязателен для всех драйверов авторизации, кроме ldapПароль для данной учетной записи пользователя
auth_driver (необязательный)Драйвер для аутентификации пользователяДрайвер для авторизации пользователя. Если значение не установлено, по умолчанию используется core
primary_group (необязательный)ID основной группы, к которой будет добавлен пользовательID основной группы, к которой будет добавлен пользователь в СГУ
groups (необязательный)Список ID дополнительных групп пользователяСписок ID дополнительных групп в СГУ, к которым будет добавлен пользователь
ssh_public_key (необязательный)Сгенерированный SSH-ключПубличный SSH-ключ для данного пользователя

Возможные значения auth_driver

ЗначениеОписание
coreОсновной драйвер аутентификации, который управляет пользователями в рамках СГУ Горизонт-ВС. Пользователи аутентифицируются по имени пользователя и паролю
x509Позволяет аутентифицировать пользователей с использованием сертификатов X.509
ldapПозволяет интегрировать Горизонт-ВС с Active Directory, SAMBA DC и другими LDAP-серверами. Пользователи аутентифицируются через LDAP-сервер
publicПозволяет анонимный доступ к Горизонт-ВС без обязательной аутентификации
server_cipherИспользуется для аутентификации на основе шифрования
server_x509Использует сертификаты X.509 для аутентификации в серверных сценариях

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданного пользователя в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Виртуальные машины» - opennebula_virtual_machine​

Этот ресурс используется для непосредственного развертывания виртуальной машины. В отличие от шаблона, создание этого ресурса сразу запускает процесс установки и старта ВМ в облаке.

Для создания ресурса необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_virtual_machine" "наименование_ресурса" {
name = "название_ВМ"
description = "Описание ВМ"
cpu = 1
vcpu = 2
memory = 2048

disk {
image_id = 69
}

disk {
image_id = 18
}

graphics {
type = "VNC"
listen = "0.0.0.0"
passwd = "P@ssw0rd"
}

os {
arch = "x86_64"
boot = "disk0,disk1"
}

nic {
model = "virtio"
network_id = 1
security_groups = [0]
}
}

Пример создания двух экземпляров виртуальной машины с определенным количеством процессорной и оперативной памятью, с присоединенным диском который имеют идентификатор 7 в СГУ, с протоколом отображения SPICE, на который установлен пароль, с параметрами загрузки дисков, увеличением размера одного из них и переопределением наименования внутри ВМ, а так же виртуальная сеть с идентификатором 1, которая добавлена с драйвером virtio. Диск, который будет увеличиваться и будет использоваться для двух ВМ (count = 2) одновременно является непостоянным.

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданные ВМ в СГУ:

После подтверждения действия, в СГУ данный ресурс удалится:

Для создания ВМ из шаблона необходимо использовать только параметр template_id с указанием идентификатора шаблона из СГУ.

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданные ВМ в СГУ:

Ресурс «Группы ВМ» - opennebula_virtual_machine_group​

Для создания ресурса, определяющего правила размещения виртуальных машин на хостах, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_virtual_machine_group" "наименование_ресурса" {
name = "наименование_правила_размещения"
group = "группа_владеющая_ресурсом"

role {
name = "anti-aff"
host_anti_affined = [ID_хостов]
policy = "ANTI_AFFINED"
}
}

Пример создания правила размещения с ролью размещения с политикой ANTI_AFFINED для 0 хоста, владельцем которой является группа Terragroup.

Общие атрибуты правила размещения

АтрибутЗначенияОписание
name (обязательный)Наименование правила размещенияНаименование правила размещения, которое будет отображаться в СГУ
group (необязательный)Группа, которая будет владеть правилом размещенияГруппа, к которой будет принадлежать данное правило в СГУ

Блок role

АтрибутЗначенияОписание
roleБлок для добавления правил размещенияВнутренний ресурс объекта «Правила размещения»
name (обязательный)Наименование роли в правиле размещенияНаименование роли в правиле размещения, которое будет отображаться в СГУ
host_affined (необязательный)Список из ID узловСписок идентификаторов узлов для размещения виртуальных машин вместе с использованием данной роли
host_anti_affined (необязательный)Список из ID узловСписок идентификаторов узлов для размещения виртуальных машин раздельно с использованием данной роли
policy (необязательный)Политика размещения VM-VM для применения к данной ролиПолитика размещения VM-VM для применения к данной роли

Возможные значения policy

ЗначениеОписание
NONEОтсутствует
AFFINEDВместе
ANTI_AFFINEDРаздельно

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданное правило размещения в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Ресурс «Виртуальные сети» - opennebula_virtual_network​

Для создания ресурса, определяющего параметры виртуальной сети и диапазон адресов, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_virtual_network" "наименование_ресурса" {
name = "наименование_виртуальной_сети"
group = "группа_владеющая_ресурсом"
bridge = "имя_сетевого_моста"
type = "тип_драйвера_сети"
security_groups = [ID_групп_безопасности]
cluster_ids = [ID_кластеров]

ar {
ar_type = "тип_диапазона_адресов"
size = количество_адресов
}
}

Пример создания сети с типом ovswitch и диапазоном ETHERNET адресов в количестве 100 адресов:

АтрибутЗначенияОписание
name (обязательный)Наименование виртуальной сетиНаименование виртуальной сети, которое будет отображаться в СГУ.
description (необязательный)Описание виртуальной сетиОписание виртуальной сети, которое может содержать дополнительную информацию о его назначении или содержимом
group (необязательный)Группа, которая будет владеть виртуальной сетьюГруппа, к которой будет принадлежать данная виртуальная сеть в СГУ
user (необязательный)Строка в ""Наименование пользователя который будет владеть виртуальной сетью.
security_groups (необязательный)Список в []Список идентификаторов групп безопасности для данной виртуальной сети
bridge (необязательный)Строка в ""Наименование бриджа (сетевого моста), с которым данная виртуальная сеть должна быть связана. Конфликтует с атрибутами:
physical_device (необязательный)Строка в ""Наименование физического интерфейса, с которым данная виртуальная сеть должна быть связана. Конфликтует с атрибутами:
type (необязательный)Строка в ""Тип виртуальной сети. Доступные значения: «dummy» - Драйвер dummy создает виртуальную сеть, которая не имеет реального сетевого интерфейса. Это полезно для тестирования или для создания сетевых конфигураций, которые не требуют фактической передачи данных. Виртуальные машины, подключенные к такой сети, не смогут обмениваться данными с другими сетями.
cluster_ids (необязательный)СписокСписок идентификаторов (ID) кластера, куда будет относиться виртуальная сеть. Конфликтует с атрибутами:
vlan_id (необязательный)Числовое значение IDVLAN ID для данной подсети, используется только если тип «802.1Q», «vxlan» и «ovs-vswitch». Конфликтует с атрибутами:
automatic_vlan_id (необязательный)Числовое значение IDАвтоматический VLAN ID для данной подсети, используется только если тип «802.1Q», «vxlan» и «ovs-vswitch». Конфликтует с атрибутами:
mtu (необязательный)Числовое значениеMTU (Maximum transmission unit) виртуальной сети. Стандартное значение - 1500. Конфликтует с атрибутами:
hold_ips (необязательный)Строчный список в [""]IP адреса которые необходимо удержать из любого диапазона адресов (должен существовать диапазон IPv4). IP адрес должен быть доступен для удержания. Конфликтует с атрибутами:
Контекстуализация сети (пример использования ниже)
network_address (необязательный)Строка IP адреса сети в ""Параметр контекстуализации сети «Адрес сети». Конфликтует с атрибутами:
gateway (необязательный)Строка IP адреса шлюза в ""Параметр контекстуализации сети «Шлюз». Конфликтует с атрибутами:
dns (необязательный)Строка IP адреса DNS сервера в "", если используется > 1 сервера, в кавычках перечисляется через пробел.Параметр контекстуализации сети «DNS». Конфликтует с атрибутами:
network_mask (необязательный)Строка битовой маски подсети в ""Параметр контекстуализации сети «Маска подсети». Конфликтует с атрибутами:
guest_mtu (необязательный)Числовое значение MTU ""Параметр контекстуализации сети «MTU (Maximum transmission unit) гостевых интерфейсов». MTU гостевой ОС где будет использоваться данная виртуальная сеть. Стандартное значение – 1500. Не может быть больше, чем значение атрибута «mtu». Конфликтует с атрибутами:
search_domain (необязательный)Строка в ""Наименование домена для сопоставления DNS записей. Конфликтует с атрибутами:
Функционал резервирования адресов из родительской сети реализуется с помощью следующих атрибутов (пример использования ниже)
reservation_vnet (необязательный)ID родительской виртуальной сети откуда необходимо произвести резервированиеРеализует функционал кнопки
reservation_size (необязательный)Размер (в адресах) резервированияКоличество адресов, которые необходимо зарезервировать из родительской сети.
reservation_ar_id (необязательный)ID диапазона адресов откуда необходимо зарезервировать адресаИдентификатор диапазона адресов из СГУ откуда необходимо зарезервировать адреса. Пример отображения диапазона адресов в СГУ:
АтрибутЗначенияОписание
arБлок для добавления диапазона адресовВнутренний ресурс объекта «Виртуальные сети»
ar_type (необязательный)Строка в ""Наименование типа диапазона адресов. Доступные значения:
ip4 (необязательный)Строка IPv4 адреса в ""Первый IPv4 адрес диапазона адресов. Является обязательным атрибутов для типа диапазона IP4 или IP4_6
ip6 (необязательный)Строка IPv6 адреса в ""Первый IPv6 адрес диапазона адресов. Является обязательным для типа диапазона IP6_STATIC и IP4_6_STATIC.
size (обязательный)Числовое значениеРазмер диапазона адресов
mac (необязательный)Строка MAC – адреса в ""Первый MAC – адрес диапазона адресов
global_prefix (необязательный)Строка префикса в ‘’Глобальный префикс для IP6 и IP4_6
ula_prefix (необязательный)Строка префикса в ""ULA (уникальные локальные адреса) префикс для IP6 или IP4_6
prefix_length (необязательный)Числовое значениеДлина префикса. Необходим только типа IP6_STATIC или IP4_6_STATIC

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданную виртуальную сеть с параметрами контекстуализации в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Пример создания виртуальной сети с использование контекстуализации:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

После подтверждения действия, в СГУ данный ресурс удалится:

Пример использования резервирования с указанием количества адресов, которые необходимо зарезервировать из диапазона адресов родительской сети:

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданное резервирование из родительской виртуальной сети в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy

Ресурс «Диапазон адресов виртуальной сети» - opennebula_virtual_network_address_range​

Для создания ресурса, определяющего дополнительный диапазон адресов в существующей сети, необходимо в файл конфигурации main.tf добавить блок:

resource "opennebula_virtual_network_address_range" "наименование_ресурса" {
virtual_network_id = ID_виртуальной_сети
ar_type = "тип_диапазона_адресов"
mac = "начальный_MAC_адрес"
size = количество_адресов
ip4 = "начальный_IPv4_адрес"
hold_ips = ["список_зарезервированных_IP_адресов"]
}

Рекомендуется сценарий, когда диапазоны не пересекаются между собой. Если один диапазон имеет конечный адрес 100, то новый диапазон необходимо создавать с указанием первого IP – 101.

Пример создания диапазона адресов в существующей сети с начинающим IP адресом 172.16.100.101, с размером в 100 адресов и IP адресами, которые будут удержаны из данного диапазона:

АтрибутЗначенияОписание
ar_type (необязательный)Строка в ""Наименование типа диапазона адресов. Доступные значения:
ar_type (необязательный)Строка в ""Наименование типа диапазона адресов. Доступные значения:
ip4 (необязательный)Строка IPv4 адреса в ""Первый IPv4 адрес диапазона адресов. Является обязательным атрибутов для типа диапазона IP4 или IP4_6
ip6 (необязательный)Строка IPv6 адреса в ""Первый IPv6 адрес диапазона адресов. Является обязательным для типа диапазона IP6_STATIC и IP4_6_STATIC.
size (обязательный)Числовое значениеРазмер диапазона адресов
mac (необязательный)Строка MAC – адреса в ""Первый MAC – адрес диапазона адресов
global_prefix (необязательный)Строка префикса в ‘’Глобальный префикс для IP6 и IP4_6
ula_prefix (необязательный)Строка префикса в ""ULA (уникальные локальные адреса) префикс для IP6 или IP4_6
prefix_length (необязательный)Числовое значениеДлина префикса. Необходим только типа IP6_STATIC или IP4_6_STATIC
hold_ips (необязательный)Строчный список в [""]IP адреса которые необходимо удержать из любого диапазона адресов (должен существовать диапазон IPv4). IP адрес должен быть доступен для удержания. Конфликтует с атрибутами:

После добавления ресурса в файл main.tf, необходимо применить для добавления данного ресурса командой:

terraform apply

Проверим созданный диапазон в существующей сети и проверим IP адреса для удержания в СГУ:

Примечание

Для удаления созданного ресурса необходимо в консоли использовать команду:

terraform destroy