Создать сетевой диск
Мы рекомендуем создавать ресурсы по порядку. Если вы единовременно создаете все ресурсы, которые описаны в конфигурационном файле, может возникнуть ошибка — Terraform создает ресурсы независимо от порядка, в котором они перечислены в файле.
-
Опционально: настройте провайдеры.
-
Для всех типов сетевого диска, кроме типа Универсальный 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
}
1. Опционально: настроить провайдеры
Если вы настроили провайдеры Selectel и OpenStack, пропустите этот шаг.
-
Убедитесь, что в панели управления вы создали сервисного пользователя с ролями Администратор аккаунта и Администратор пользователей.
-
Создайте директорию для хранения конфигурационных файлов и отдельный файл с расширением
.tf
для настройки провайдеров. -
В файл для настройки провайдеров добавьте провайдеры Selectel и OpenStack:
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "6.0.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}Здесь
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. Созданные ресурсы отобразятся в панели управления.
-
Если для создания ресурсов оказалось недостаточно квот, увеличьте квоты.
2. Создать сетевой диск
Сетевой диск с неизменяемыми IOPS
Сетевой диск с изменяемыми IOPS
Для всех типов сетевого диска, кроме типа Универсальный v2, количество IOPS фиксированное и зависит от типа диска. Доступное количество IOPS в разных типах диска можно посмотреть в подразделе Лимиты сетевых дисков.
Сетевой диск из образа
Пустой сетевой диск
1. Получить образ
data "openstack_images_image_v2" "image_1" {
name = "Ubuntu 20.04 LTS 64-bit"
most_recent = true
visibility = "public"
}
Посмотрите подробное описание источника данных openstack_images_image_v2.
2. Создать сетевой диск из образа
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]
}
}
Здесь:
size
— размер диска в ГБ. Учитывайте лимиты сетевых дисков на максимальный размер;volume_type
— ID или имя типа сетевого диска. Например,fast.ru-9a
— имя для создания сетевого диска с типом SSD Быстрый в сегменте пула ru-9a. Список типов можно посмотреть в таблице Список типов сетевого диска во всех сегментах пула;availability_zone
— сегмент пула, в котором будет создан сетевой диск, напримерru-9a
. Список доступных сегментов пула можно посмотреть в инструкции Матрицы доступности.
Посмотрите подробное описание ресурса 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
}
Здесь:
size
— размер диска в ГБ. Учитывайте лимиты сетевых дисков на максимальный размер;volume_type
— ID или имя типа сетевого диска. Например,universal.ru-9a
— имя для создания сетевого диска с типом SSD Универсальный в сегменте пула ru-9a. Список типов можно посмотреть в таблице Список типов сетевого диска во всех сегментах пула;availability_zone
— сегмент пула, в котором будет создан сетевой диск, напримерru-9a
. Список доступных сегментов пула можно посмотреть в инструкции Матрицы доступности.
Посмотрите подробное описание ресурса openstack_blockstorage_volume_v3.
Для сетевых дисков типа Универсальный v2 вы можете изменять общее количество IOPS — уменьшить или увеличить. Доступные значения — от 2 000 до 16 000 IOPS. Количество изменений IOPS не ограничено.
Сетевой диск из образа
Пустой сетевой диск
1. Получить образ
data "openstack_images_image_v2" "image_1" {
name = "Ubuntu 20.04 LTS 64-bit"
most_recent = true
visibility = "public"
}
Посмотрите подробное описание источника данных openstack_images_image_v2.
2. Создать сетевой диск из образа
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.