Create a network drive
We recommend create resources in order. If you create all the resources that are described in the configuration file The Terraform creates resources regardless of the order in which they are listed in the file.
-
Optional: configure your ISPs.
-
Для всех типов сетевого диска, кроме типа Универсальный v2, количество IOPS фиксированное и зависит от типа диска. Для сетевых дисков типа Универсальный v2 вы можете изменять суммарное количество IOPS диска — увеличивать и уменьшать. Количество изменений IOPS не ограничено. Доступное количество IOPS в разных типах диска можно посмотреть в подразделе Лимиты сетевых дисков.
Вы можете создать диск:
- из образа — можно использовать как загрузочный диск облачного сервера;
- или пустой — можно использовать как дополнительный диск.
Конфигурационные файлы
Пример файла для настройки провайдеров
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "6.0.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}
provider "selectel" {
domain_name = "123456"
username = "user"
password = "password"
}
resource "selectel_vpc_project_v2" "project_1" {
name = "project"
}
resource "selectel_iam_serviceuser_v1" "serviceuser_1" {
name = "username"
password = "password"
role {
role_name = "member"
scope = "project"
project_id = selectel_vpc_project_v2.project_1.id
}
}
provider "openstack" {
auth_url = "https://cloud.api.selcloud.ru/identity/v3"
domain_name = "123456"
tenant_id = selectel_vpc_project_v2.project_1.id
user_name = selectel_iam_serviceuser_v1.serviceuser_1.name
password = selectel_iam_serviceuser_v1.serviceuser_1.password
region = "ru-9"
}
Пример файла для создания сетевого диска из образа
data "openstack_images_image_v2" "image_1" {
name = "Ubuntu 20.04 LTS 64-bit"
most_recent = true
visibility = "public"
}
resource "openstack_blockstorage_volume_v3" "volume_1" {
name = "boot-volume-for-server"
size = "5"
image_id = data.openstack_images_image_v2.image_1.id
volume_type = "fast.ru-9a"
availability_zone = "ru-9a"
enable_online_resize = true
lifecycle {
ignore_changes = [image_id]
}
}
Пример файла для создания пустого сетевого диска
resource "openstack_blockstorage_volume_v3" "volume_2" {
name = "additional-volume-for-server"
size = "7"
volume_type = "universal.ru-9a"
availability_zone = "ru-9a"
enable_online_resize = true
}
Опционально: настроить провайдеры
Если вы настроили провайдеры Selectel и OpenStack, пропустите этот шаг.
-
Make sure that in the control panel you created a service user with the Account Administrator and User Administrator roles.
-
Create a directory to store the configuration files and a separate file with the extension
.tf
to configure the ISPs. -
Add Selectel and OpenStack providers to the file to configure the providers:
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "6.0.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}Here
version
— версии провайдеров. Актуальную версию можно посмотреть в документации Selectel (в Terraform Registry и GitHub) и OpenStack (в Terraform Registry и GitHub).Подробнее о продуктах, услугах и сервисах, которыми можно управлять с помощью провайдеров, в инструкции Провайдеры Selectel и OpenStack.
-
Инициализируйте провайдер Selectel:
provider "selectel" {
domain_name = "123456"
username = "user"
password = "password"
}Здесь:
domain_name
— номер аккаунта Selectel. Можно посмотреть в панели управления в правом верхнем углу;username
— имя сервисного пользователя с ролями Администратор аккаунта и Администратор пользователей. Можно посмотреть в панели управления: раздел Управление доступом → Управление пользователями → вкладка Сервисные пользователи (раздел доступен только Владельцу аккаунта и Администратору пользователей);password
— пароль сервисного пользователя. Можно посмотреть при создании пользователя или изменить на новый.
-
Создайте проект:
resource "selectel_vpc_project_v2" "project_1" {
name = "project"
}Посмотрите подробное описание ресурса selectel_vpc_project_v2.
-
Создайте сервисного пользователя для доступа к проекту и назначьте ему роль Администратор проекта:
resource "selectel_iam_serviceuser_v1" "serviceuser_1" {
name = "username"
password = "password"
role {
role_name = "member"
scope = "project"
project_id = selectel_vpc_project_v2.project_1.id
}
}Здесь:
username
— имя пользователя;password
— пароль пользователя. Пароль должен быть не короче восьми символов и содержать латинские буквы разных регистров и цифры;project_id
— ID проекта. Можно посмотреть в панели управления: раздел Облачная платформа → откройте меню проектов (название текущего проекта) → в строке нужного проекта нажмите .
Посмотрите подробное описание ресурса selectel_iam_serviceuser_v1.
-
Инициализируйте провайдер OpenStack:
provider "openstack" {
auth_url = "https://cloud.api.selcloud.ru/identity/v3"
domain_name = "123456"
tenant_id = selectel_vpc_project_v2.project_1.id
user_name = selectel_iam_serviceuser_v1.serviceuser_1.name
password = selectel_iam_serviceuser_v1.serviceuser_1.password
region = "ru-9"
}Здесь:
domain_name
— номер аккаунта Selectel. Можно посмотреть в панели управления в правом верхнем углу;region
— пул, напримерru-9
. Все ресурсы будут создаваться в этом пуле. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.
-
Если одновременно с настройкой провайдеров вы создаете ресурсы, то для ресурсов OpenStack добавьте аргумент
depends_on
. Например, для ресурса openstack_networking_network_v2:resource "openstack_networking_network_v2" "network_1" {
name = "private-network"
admin_state_up = "true"
depends_on = [
selectel_vpc_project_v2.project_1,
selectel_iam_serviceuser_v1.serviceuser_1
]
} -
Опционально: если вы хотите использовать зеркало, создайте отдельный конфигурационный файл Terraform CLI и добавьте в него блок:
provider_installation {
network_mirror {
url = "https://tf-proxy.selectel.ru/mirror/v1/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}Подробнее о настройках зеркал в инструкции CLI Configuration File документации HashiCorp.
-
Откройте CLI.
-
Инициализируйте конфигурацию Terraform в директории:
terraform init
-
Проверьте, что конфигурационные файлы составлены без ошибок:
terraform validate
-
Отформатируйте конфигурационные файлы:
terraform fmt
-
Проверьте, какие ресурсы будут созданы:
terraform plan
-
Примените изменения и создайте ресурсы:
terraform apply
-
Подтвердите создание — введите yes и нажмите Enter. Созданные ресурсы отобразятся в панели управления.
-
Если для создания ресурсов оказалось недостаточно квот, увеличьте квоты.
Создать сетевой диск
Сетевой диск с неизменяемыми IOPS
Сетевой диск с изменяемыми IOPS
Для всех типов сетевого диска, кроме типа Универсальный v2, количество IOPS фиксированное и зависит от типа диска. Доступное количество IOPS в разных типах диска можно посмотреть в подразделе Лимиты сетевых дисков.
Сетевой диск из образа
Пустой сетевой диск
Получить образ
data "openstack_images_image_v2" "image_1" {
name = "Ubuntu 20.04 LTS 64-bit"
most_recent = true
visibility = "public"
}
Check out the detailed description of the data source openstack_images_image_v2.
Создать сетевой диск из образа
resource "openstack_blockstorage_volume_v3" "volume_1" {
name = "boot-volume-for-server"
size = "5"
image_id = data.openstack_images_image_v2.image_1.id
volume_type = "fast.ru-9a"
availability_zone = "ru-9a"
enable_online_resize = true
lifecycle {
ignore_changes = [image_id]
}
}
Here:
size
— disk size in GB. Consider network disk limits to the maximum size;volume_type
— ID or name network drive type. For example,fast.ru-9a
— name to create a network drive with the SSD type Fast in the pool segment ru-9a. The list of types can be seen in the table List of network disk types in all pool segments;availability_zone
— pool segment where the network drive will be created, e.g.ru-9a
. The list of available pool segments can be found in the instructions Availability matrix.
Check out the detailed description of the resource openstack_blockstorage_volume_v3.
resource "openstack_blockstorage_volume_v3" "volume_2" {
name = "additional-volume-for-server"
size = "7"
volume_type = "universal.ru-9a"
availability_zone = "ru-9a"
enable_online_resize = true
}
Here:
size
— disk size in GB. Consider network disk limits to the maximum size;volume_type
— ID or name network drive type. For example,universal.ru-9a
— name to create a network drive with the SSD Universal type in the pool segment ru-9a. The list of types can be seen in the table List of network disk types in all pool segments;availability_zone
— pool segment where the network drive will be created, e.g.ru-9a
. The list of available pool segments can be found in the instructions Availability matrix.
Check out the detailed description of the resource openstack_blockstorage_volume_v3.
Для сетевых дисков типа Универсальный v2 вы можете изменять общее количество IOPS — уменьшить или увеличить. Доступные значения — от 2 000 до 16 000 IOPS. Количество изменений IOPS не ограничено.
Сетевой диск из образа
Пустой сетевой диск
Получить образ
data "openstack_images_image_v2" "image_1" {
name = "Ubuntu 20.04 LTS 64-bit"
most_recent = true
visibility = "public"
}
Check out the detailed description of the data source openstack_images_image_v2.
Создать сетевой диск из образа
resource "openstack_blockstorage_volume_v3" "volume_1" {
name = "boot-volume-for-server"
size = "5"
image_id = data.openstack_images_image_v2.image_1.id
volume_type = "universal2.ru-9a"
availability_zone = "ru-9a"
enable_online_resize = true
metadata = {"total_iops_sec": "4500"}
lifecycle {
ignore_changes = [image_id]
}
}
Здесь:
-
size
— размер диска в ГБ. Учитывайте лимиты сетевых дисков на максимальный размер; -
volume_type
— ID или имя типа сетевого диска. Например,universal2.ru-9a
— имя для создания сетевого диска с типом SSD Универсальный v2 в сегменте пула ru-9a. Список типов можно посмотреть в таблице Список типов сетевого диска во всех сегментах пула; -
availability_zone
— сегмент пула, в котором будет создан сетевой диск, напримерru-9a
. Спис ок доступных сегментов пула можно посмотреть в инструкции Матрицы доступности; -
metadata
— пары ключ/значения для хранения дополнительной информации о диске:total_iops_sec
— общее количество операций чтения и записи в IOPS. Доступные значения — от 2 000 до 16 000 IOPS. Если не указать значение, то будет использовано значение по умолчанию — 2 000 IOPS.
Посмотрите подробное описание ресурса openstack_blockstorage_volume_v3.
resource "openstack_blockstorage_volume_v3" "volume_3" {
name = "volume-with-custom-iops"
size = "7"
volume_type = "universal2.ru-9a"
availability_zone = "ru-9a"
enable_online_resize = true
metadata = {"total_iops_sec": "4500"}
}
Здесь:
-
size
— размер диска в ГБ. Учитывайте лимиты сетевых дисков на максимальный размер; -
volume_type
— ID или имя типа сетевого диска Универсальный v2. Например,universal2.ru-9a
— имя для создания сетевого диска с типом SSD Универсальный v2 в сегменте пула ru-9a. Список типов можно посмотреть в таблице Список типов сетевого диска во вс ех сегментах пула; -
availability_zone
— сегмент пула, в котором будет создан сетевой диск, напримерru-9a
. Список доступных сегментов пула можно посмотреть в инструкции Матрицы доступности; -
metadata
— пары ключ/значения для хранения дополнительной информации о диске:total_iops_sec
— общее количество операций чтения и записи в IOPS. Доступные значения — от 2 000 до 16 000 IOPS. Если не указать значение, то будет использовано значение по умолчанию — 2 000 IOPS.
Посмотрите подробное описание ресурса openstack_blockstorage_volume_v3.