IaC-провайдер РУСТЭК используется для взаимодействия Terraform/OpenTofu с облаком под управлением RCP. Для этого провайдер задействует API Оркестратора RCP.
Для авторизации провайдера должны быть заданы соответствующие учётные данные.
terraform {
required_providers {
rustack = {
source = "terraform.rustack.ru/rustack-cloud-platform/rcp"
version = "> 1.1.0"
}
}
}
provider "rustack" {
api_endpoint = "Ссылка на API облачной платформы"
token = "Токен пользователя облачной платформы"
}
Обязательно:
api_endpoint
(String) — ссылка на API облачной платформы, например, https://dev.cloud.online
;token
(String) — токен пользователя для операций с API.С помощью источников данных можно получать информацию о различных сущностях: проектах, серверах, роутерах, дисках и т.д.
Данными нельзя управлять, но можно, обращаясь к ним, создавать зависимые от них ресурсы (resource).
Получение информации об учётной записи для использования в других ресурсах. Учётная запись определяется токеном пользователя (см. выше).
data "rustack_account" "account" { }
Только для чтения:
email
(String) — адрес электронной почты пользователя;id
(String) — уникальный идентификатор пользователя;username
(String) — имя пользователя.Получение информации о публичном ключе для использования в других ресурсах.
data "rustack_account" "me"{}
data "rustack_pub_key" "key" {
account_id = data.rustack_account.me.id
name = "Debian 10"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название публичного ключа или id
(String) — идентификатор ключа;account_id
(String) — идентификатор учётной записи.Только для чтения:
fingerprint
(Integer) — отпечаток публичного ключа;public_key
(Integer) — значение публичного ключа.Получение информации по проекту для использования в других ресурсах.
Если выполняется обращение по имени (
name
) проекта и имя проекта не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название проекта или id
(String) — идентификатор проекта.Получение списка проектов пользователя для использования в других ресурсах.
data "rustack_projects" "all_projects" { }
Только для чтения:
projects
(List of Object) (см. вложенную схему ниже).Вложенная схема для projects
:
Только для чтения:
id
(String) — идентификатор проекта;name
(String) — название проекта.Получение информации о ресурсном пуле для использования в других ресурсах.
Если выполняется обращение по имени (
name
) ресурсного пула и имя ресурного пула не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_hypervisor" "single_hypervisor" {
project_id = data.rustack_project.single_project.id
name = "VMWARE"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название гипервизора или id
(String) — идентификатор гипервизора;project_id
(String) — идентификатор проекта.Только для чтения:
type
(String) — тип гипервизора.Получение списка ресурсных пулов, доступных в проекте для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_hypervisors" "all_hypervisors" {
project_id = data.rustack_project.single_project.id
}
Обязательно для заполнения:
project_id
(String) — идентификатор проекта.Только для чтения:
hypervisors
(List of Object) (см. вложенную схему ниже).Вложенная схема для hypervisors
:
Только для чтения:
id
(String) — идентификатор гипервизора;name
(String) — название гипервизора;type
(String) — тип гипервизора.Получение информации о ВЦОД для использования в других ресурсах. Это удобно для использования параметров ВЦОД, который не управляется с помощью Terraform.
Если выполняется обращение по имени (
name
) ВЦОД и имя ВЦОД не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_vdc" "single_vdc2" {
name = "Terraform VDC"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название ВЦОД или id
(String) — идентификатор ВЦОД.Опционально:
project_id
(String) — идентификатор проекта.Только для чтения:
hypervisor
(String) — название гипервизора;hypervisor_type
(String) — тип гипервизора.Получение списка ВЦОД, доступных в проекте для использования в других ресурсах.
Пример использования:
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdcs" "all_vdcs" {
project_id = data.rustack_project.single_project.id
}
Обязательно для заполнения:
project_id
(String) — идентификатор проекта.Только для чтения:
vdcs
(List of Object) (см. вложенную схему ниже).Вложенная схема для vdcs
:
Только для чтения:
hypervisor
(String) — название гипервизора;hypervisor_type
(String) — тип гипервизора;id
(String) — идентификатор ВЦОД;name
(String) — название гипервизора.Только для гипервизора VMware.
Получение информации о платформе (типе процессора) для использования в других ресурсах.
Если выполняется обращение по имени (
name
) платформы и имя платформы не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_platform" "platform"{
vdc_id = data.rustack_vdc.single_vdc.id
name = "Intel Cascade Lake"
# or
id = ""
}
Обязательно для заполнения:
name
(String) — название платформы или id
(String) — идентификатор платформы.Только для гипервизора VMware.
Получение информации о списке платформ (типах процессора) для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_platforms" "platforms"{
vdc_id = data.rustack_vdc.single_vdc.id
}
Только для чтения:
platforms
(List of Object) (см. вложенную схему ниже).Вложенная схема для platforms
:
Только для чтения:
id
(String) — идентификатор платформы;name
(String) — название платформы.Получение информации о сети для использования в других ресурсах.
Если выполняется обращение по имени (
name
) сети и имя сети не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_network" "single_network" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Сеть 1"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название сети или id
(String) — идентификатор сети;vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
mtu
(Integer) — максимальный размер полезного блока данных пакета, передаваемого в сети;subnets
(List of Object) — список подсетей (см. вложенную схему ниже).Вложенная схема для subnets
:
Только для чтения:
cidr
(String) — CIDR подсети;dhcp
(Boolean) — включен или выключен DHCP для подсети;dns
(List of String) — список DNS-серверов подсети;end_ip
(String) — конечный адрес диапазона IP-адресов подсети;gateway
(String) — IP-адрес шлюза подсети;id
(String) — идентификатор подсети;start_ip
(String) — начальный адрес диапазона IP-адресов подсети.Получение списка сетей, доступных во ВЦОД для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_networks" "all_networks" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
networks
(List of Object) (см. вложенную схему ниже).Вложенная схема для networks
:
Только для чтения:
id
(String) — идентификатор сети;name
(String) — название сети;mtu
(Integer) — максимальный размер полезного блока данных пакета, передаваемого в сети;subnets
(List of Object) (см. вложенную схему ниже).Вложенная схема для subnets
:
Только для чтения:
cidr
(String) — CIDR подсети;dhcp
(Boolean) — включен или выключен DHCP для подсети;dns
(List of String) — список DNS-серверов;end_ip
(String) — конечный адрес диапазона IP-адресов;gateway
(String) — адрес шлюза подсети;id
(String) — идентификатор подсети;start_ip
(String) — начальный адрес диапазона IP-адресов.Получение информации о роутере для использования в других ресурсах.
Если выполняется обращение по имени (
name
) роутера и имя роутера не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_router" "single_Router" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Terraform Router"
# or
id = "id"
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД;name
(String) — название роутера или id
(String) — идентификатор роутера.Получение списка роутеров, доступных во ВЦОД, для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_routers" "vdc_routers" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
routers
(List of Object) (см. ниже вложенную схему).Вложенная схема для routers
:
Только для чтения:
id
(String) — идентификатор роутера;name
(String) — название роутера.Получение информации о портах, доступных во ВЦОД, для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_port" "port" {
vdc_id = data.rustack_vdc.single_vdc.id
ip_address = "0.0.0.0"
id = "00000000-0000-0000-0000-000000000000"
}
Обязательно для заполнения:
id
(String) — идентификатор порта;vdc_id
(String) — идентификатор ВЦОД;ip_address
(String) — локальный IP-адрес порта.Только для чтения:
network_id
(String) — идентификатор сети;firewall_templates
(List of String) — список шаблонов брандмауэра, настроенных на порте.Получение списка портов в ВЦОД, для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_ports" "all_ports" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
ports
(List of Object) — список портов.Вложенная схема для ports
:
Только для чтения:
id
(String) — идентификатор порта;network_id
(String) — идентификатор подключенной сети;ip_address
(String) — IP-адрес порта;firewall_templates
(List of String) — шаблоны брандмауэра.Получение информации о шаблоне брандмауэра для использования в других ресурсах.
Если выполняется обращение по имени (
name
) шаблона и имя шаблона не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_firewall_template" "single_template" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Разрешить Web"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название шаблона или id
(String) — идентификатор шаблона;vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
id
(String) — идентификатор шаблона;Получение списка шаблонов брандмауэра для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_firewall_templates" "all_templates" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
firewall_templates
(List of Object) (см. вложенную схему ниже).Вложенная схема для firewall_templates
:
Только для чтения:
id
(String) — идентификатор шаблона брандмауэра;name
(String) — название шаблона брандмауэра.Получение информации о профиле хранения диска для использования в других ресурсах.
Если выполняется обращение по имени (
name
) профиля и имя профиля не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_storage_profile" "single_storage_profile" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "ssd"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название профиля хранения или id
(String) — идентификатор профиля хранения;vdc_id
(String) — идентификатор ВЦОД.Получение списка профилей хранения, доступных во ВЦОД, для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_storage_profiles" "all_storage_profiles" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
storage_profiles
(List of Object) (см. вложенную схему ниже).Вложенная схема для storage_profiles
:
Только для чтения:
id
(String) — идентификатор профиля хранения;name
(String) — название профиля хранения.Получение информации о диске для использования в других ресурсах.
Если выполняется обращение по имени (
name
) диска и имя диска не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_disk" "single_disk" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Disk 2"
# or
id = "id"
}
Обязательно к заполнению
name
(String) — название диска или id
(String) — идентификатор диска;vdc_id
(String) — идентификатор ВЦОДа.Только для чтения:
size
(Integer) — размер диска в ГБ;storage_profile_id
(String) — идентификатор профиля хранения;storage_profile_name
(String) — название профиля хранения;external_id
(String) — идентификатор диска на ПВ РУСТЭК (для ВЦОД РУСТЭК).Получение списка дисков во ВЦОД для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_disks" "all_disks" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
disks
(List of Object) (см. вложенную схему ниже).Вложенная схема для disks
:
Только для чтения:
external_id
(String) — идентификатор диска на ПВ РУСТЭК (для ВЦОД РУСТЭК);id
(String) — идентификатор диска;name
(String) — название диска;size
(Integer) — размер диска в ГБ;storage_profile_id
(String) — идентификатор профиля хранения;storage_profile_name
(String) — название профиля хранения.Получение информации о шаблоне сервера для использования в других ресурсах.
Если выполняется обращение по имени (
name
) шаблона и имя шаблона не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_template" "single_template" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Debian 10"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название шаблона сервера или id
(String) — идентификатор шаблона сервера;vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
min_cpu
(Integer) — требуемое минимальное число виртуальных ядер для шаблона сервера;min_disk
(Integer) — требуемый минимальный размер диска в ГБ для шаблона сервера;min_ram
(Integer) — требуемый минимальный объём оперативной памяти в ГБ для шаблона сервера.Получение списка доступных во ВЦОД шаблонов сервера для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_templates" "single_template" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
templates
(List of Object) (см. вложенную схему ниже).Вложенная схема для templates
:
Только для чтения:
id
(String) — идентификатор шаблона сервера;name
(String) — название шаблона сервера;min_cpu
(Integer) — требуемое минимальное число виртуальных ядер для шаблона сервера;min_disk
(Integer) — требуемый минимальный размер диска в ГБ для шаблона сервера;min_ram
(Integer) — требуемый минимальный объём оперативной памяти в ГБ для шаблона сервера.Получение информации о сервере для использования в других ресурсах.
Если выполняется обращение по имени (
name
) сервера и имя сервера не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_vm" "single_vm" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Server 1"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название сервера или id
(String) — идентификатор сервера;vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
cpu
(Integer) — количество виртуальных ядер сервера;floating
(Boolean) — подключен или не подключен публичный IP-адрес к серверу;floating_ip
(String) — публичный IP-адрес сервера;power
(Boolean) — включен или выключен сервер;ram
(Float) — объём оперативной памяти сервера в ГБ;template_id
(String) — идентификатор шаблона сервера;template_name
(String) — название шаблона сервера;ports
(Block List) — список портов (см. вложенную схему ниже).Вложенная схема для ports
:
Обязательно для заполнения:
id
(String) — идентификатор порта.Только для чтения:
ip_address
(String) — IP-адрес порта.Получение списка серверов, доступных в ВЦОД, для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_vms" "all_vms" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
vms
(List of Objects) (см. вложенную схему ниже).Вложенная схема для vms
:
Только для чтения:
cpu
(Integer) — количество виртуальных ядер сервера;floating
(Boolean) — подключен или не подключен публичный адрес к серверу;floating_ip
(String) — публичный адрес сервера;id
(String) — идентификатор сервера;name
(String) — название сервера;ports
(List of Objects) — список портов (см. вложенную схему ниже).power
(Boolean) — включен или выключен сервер;ram
(Integer) — объём оперативной памяти сервера в ГБ;template_id
(String) — идентификатор шаблона сервера;template_name
(String) — название шаблона сервера.Получение информации о балансировщике нагрузки для использования в других ресурсах.
Если выполняется обращение по имени (
name
) балансировщика и имя балансировщика не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_lbaas" "test" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "test"
# or
id = "id"
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД;name
(String) — название балансировщика или id
(String) — идентификатор балансировщика.Только для чтения:
lbaas
(List of objects) (см. вложенную схему ниже).Вложенная схема для lbaas
:
Только для чтения:
floating
(Boolean) — наличие публичного адреса балансировщика;name
(String) — название балансировщика.Получение списка балансировщиков нагрузки во ВЦОД для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_lbaas" "all_lbaass" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
lbaass
(List of Object) (см. вложенную схему ниже).Вложенная схема для lbaass
:
Только для чтения:
floating
(Boolean) — наличие публичного адреса балансировщика;id
(String) — идентификатор балансировщика;name
(String) — название балансировщика.Получение информации о доменной зоне для использования в других ресурсах. Если
name
доменной зоны не уникален, то данный метод возвращает ошибку.
Если выполняется обращение по имени (
name
) доменной зоны и имя доменной зоны не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_dns" "dns" {
name = "dns.terraform."
# or
id = "id"
project_id = data.rustack_project.single_project.id
}
Обязательно для заполнения:
project_id
(String) — идентификатор проекта;name
(String) — название доменной зоны или id
(String) — идентификатор доменной зоны.Получение списка доменных зон содержащихся в проекте для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_dnss" "all_dns" {
project_id = data.rustack_project.single_project.id
}
Обязательно для заполнения:
project_id
(String) — идентификатор проекта.Только для чтения:
dnss
(List of Object) — список доменных зон (см. вложенную схему ниже).Вложенная схема для dnss
:
Только для чтения:
name
(String) — название доменной зоны;id
(String) — идентификатор доменной зоны.Получение информации о S3-хранилище для использования в других ресурсах.
Если выполняется обращение по имени (
name
) хранилища и имя хранилища не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_s3_storage" "s3" {
project_id = data.rustack_project.single_project.id
name = "S3"
# or
id = "id"
}
Обязательно для заполнения:
project_id
(String) — идентификатор проекта;name
(String) — название S3-хранилища или id
(String) — идентификатор хранилища.Только для чтения:
backend
(String) — тип хранилища: minio
или netapp
;access_key
(String) — ключ доступа хранилища;client_endpoint
(String) — URL хранилища;secret_key
(String) — секретный ключ хранилища.Получение списка S3-хранилищ, находящихся в проекте, для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_s3_storages" "s3" {
project_id = data.rustack_project.single_project.id
}
Обязательно для заполнения:
project_id
(String) — идентификатор проекта.Только для чтения:
Вложенная схема для s3_storages
:
Только для чтения:
name
(String) — название S3-хранилища;id
(String) — идентификатор хранилища;access_key
(String) — ключ доступа хранилища;client_endpoint
(String) — URL хранилища;secret_key
(String) — секретный ключ хранилища;backend
(String) — тип хранилища: minio
или netapp
.Получение информации о кластере Kubernetes для использования в других ресурсах.
Если выполняется обращение по имени (
name
) кластера и имя кластера не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_kubernetes" "single_k8s" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Cluster 1"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название кластера Kubernetes или id
(String) — идентификатор кластера;vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
node_cpu
(Integer) — количество виртуальных CPU у узлов кластера;floating
(Boolean) — наличие публичного адреса у кластера;floating_ip
(String) — публичный адрес кластера при его наличии;nodes_count
(String) — количество узлов кластера;node_disk_size
(String) — размер диска узла кластера, который был указан при создании кластера;user_public_key_id
(String) — публичный ключ кластера;node_storage_profile_id
(String) — идентификатор профиля хранения дисков узлов кластера;dashboard_url
(String) — URL панели управления кластера;node_ram
(Integer) — объём оперативной памяти узлов кластера;template_id
(String) — идентификатор шаблона Kubernetes;vms
(List) — список идентификаторов id
(String) серверов кластера.Аргументы
node_cpu
,node_disk_size
,node_storage_profile_id
иnode_ram
содержат значения, установленные при создании кластера Kubernetes. При изменении характеристик узла в панели управления эти значения останутся прежними.
Получение URL для входа в панель управления кластера
Данный блок выведет URL панели управления в консоли:
output "dashboard_url" {
value = data.rustack_kubernetes.single_k8s.dashboard_url
}
Получение конфигурационного файла kubectl
После получения информации о кластере в рабочей директории появится конфигурационный файл.
Получение списка кластеров Kubernetes для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_kubernetess" "all_clusters" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
kubernetess
(List of Object) — список кластеров (см. вложенную схему ниже).Вложенная схема для kubernetess
:
Только для чтения:
id
(String) — идентификатор кластера;name
(String) — название кластера;node_cpu
(Integer) — количество виртуальных CPU у узлов кластера;floating
(Boolean) — наличие публичного адреса у кластера;floating_ip
(String) — публичный адрес кластера при его наличии;nodes_count
(String) — количество узлов кластера;node_disk_size
(String) — размер диска узлов кластера, который был указан при создании кластера;user_public_key_id
(String) — публичный ключ кластера;node_storage_profile_id
(String) — идентификатор профиля хранения дисков узлов кластера;dashboard_url
(String) — URL панели управления кластера;node_ram
(Integer) — объём оперативной памяти узлов кластера;template_id
(String) — идентификатор шаблона Kubernetes;vms
(List) — список идентификаторов id
(String) серверов кластера.Аргументы
node_cpu
,node_disk_size
,node_storage_profile_id
иnode_ram
содержат значения, установленные при создании кластера Kubernetes. При изменении характеристик узла в панели управления эти значения останутся прежними.
Получение URL для входа в панель управления кластера
Данный блок выведет URL панели управления в консоли:
output "dashboard_url" {
value = data.rustack_kubernetess.all_clusters.kubernetess[0].dashboard_url
}
Получение конфигурационного файла kubectl
После получения списка кластеров в рабочей директории появится конфигурационный файл.
Получение информации о шаблоне Kubernetes для использования в других ресурсах.
Если выполняется обращение по имени (
name
) шаблона и имя шаблона не уникально, то данный метод возвращает ошибку.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_kubernetes_template" "k8s_template" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Kubernetes 1.22.1"
# or
id = "id"
}
Обязательно для заполнения:
name
(String) — название шаблона Kubernetes или id
(String) — идентификатор шаблона;vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
min_node_cpu
(Integer) — требуемое минимальное число виртуальных CPU для шаблона;min_node_hdd
(Integer) — требуемый минимальный размер диска для шаблона в ГБ;min_node_ram
(Integer) — требуемый минимальный объём оперативной памяти для шаблона в ГБ.Получение списка шаблонов Kubernetes для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_kubernetes_templates" "k8s_templates" {
vdc_id = data.rustack_vdc.single_vdc.id
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД.Только для чтения:
kubernetes_templates
(List of Object) — список шаблонов Kubernetes (см. вложенную схему ниже).Вложенная схема для kubernetes_templates
:
Только для чтения:
id
(String) — идентификатор шаблона;name
(String) — название кластера;min_node_cpu
(Integer) — требуемое минимальное число виртуальных CPU для шаблона;min_node_hdd
(Integer) — требуемый минимальный размер диска для шаблона в ГБ;min_node_ram
(Integer) — требуемый минимальный объём оперативной памяти для шаблона в ГБ.Получение информации о шаблоне платформенного сервиса для использования в других ресурсах.
data "rustack_project" "single_project" {
name = "PaaS Project"
}
data "rustack_paas_template" "db_template" {
id = 1
project_id = data.rustack_project.single_project.id
}
Обязательно для заполнения:
id
(Integer) — идентификатор шаблона;project_id
(String) — идентификатор проекта.Сущности, доступные для создания, изменения и управления ими.
Для каждого ресурса предусмотрена возможность задания таймаутов при создании и удалении ресурса. Для этого в теле ресурса задайте дополнительный блок
timeouts
со следующими аргументами:
create
(String) — таймаут на создание ресурса.delete
(String) — таймаут на удаление ресурса.По истечении таймаута Terraform выведет ошибку в консоли.
Создание и управление проектом. Проекты позволяют организовать ресурсы в группы по вашему желанию. ВЦОДы ассоциируются с проектами.
resource "rustack_project" "tf_project" {
name = "Terraform Project"
tags = ["demo"]
}
Обязательно для заполнения:
name
(String) — название проекта.Опционально:
tags
(Toset, String) — список тегов проекта.Только для чтения:
id
(String) — идентификатор проекта.Создание и управление ВЦОД для создания инфраструктур.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_hypervisor" "single_hypervisor" {
project_id = data.rustack_project.single_project.id
name = "VMWARE"
}
resource "rustack_vdc" "vdc1" {
name = "Terraform VDC"
project_id = data.rustack_project.single_project.id
hypervisor_id = data.rustack_hypervisor.single_hypervisor.id
tags = ["demo"]
}
Обязательно для заполнения:
hypervisor_id
(String) — идентификатор гипервизора;name
(String) — название ВЦОД;project_id
(String) — идентификатор проекта.Опционально:
default_network_mtu
(Integer) — максимальный размер полезного блока данных пакета для сервисной сети ВЦОД, создаваемой по умолчанию;tags
(Toset, String) — список тегов ВЦОД.Только для чтения:
id
(String) — идентификатор ВЦОД;default_network_id
(String) — идентификатор сервисной сети ВЦОД, созданной по умолчанию;default_network_name
(String) — название сервисной сети ВЦОД, созданной по умолчанию;default_network_subnets
(String) — список подсетей сервисной сети ВЦОД (см. вложенную схему ниже).Вложенная схема для default_network_subnets
:
Только для чтения:
cidr
(String) — CIDR подсети;dhcp
(Boolean) — включен или выключен DHCP для подсети;dns
(List of String) — список DNS-серверов;end_ip
(String) — конечный адрес диапазона IP-адресов подсети;gateway
(String) — IP-адрес шлюза подсети;id
(String) — идентификатор подсети;start_ip
(String) — начальный адрес диапазона IP-адресов подсети.Создание и управление сетью для соединения двух или более серверов.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
resource "rustack_network" "network1" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Network 1"
subnets {
cidr = "10.20.1.0/24"
dhcp = true
gateway = "10.20.1.1"
start_ip = "10.20.1.2"
end_ip = "10.20.1.254"
dns = ["77.88.8.8", "77.88.8.1"]
}
tags = ["test"]
}
Обязательно для заполнения:
name
(String) — название сети;subnets
(Block List, Min: 1, Max: 1) — подсеть (см. ниже вложенную схему);vdc_id
(String) — идентификатор ВЦОД.Опционально:
mtu
(Integer) — максимальный размер полезного блока данных пакета, передаваемого в сети;tags
(Toset, String) — список тегов сети.Только для чтения:
id
(String) — идентификатор сети.Вложенная схема для subnets
:
Обязательно для заполнения:
cidr
(String) — CIDR подсети в формате Х.Х.Х.Х/Х;dhcp
(Boolean) — включение DHCP для подсети;dns
(List of String) — список DNS-серверов подсети;end_ip
(String) — конечный адрес диапазона IP-адресов подсети;gateway
(String) — IP-адрес шлюза подсети;start_ip
(String) — начальный адрес диапазона IP-адресов подсети.Только для чтения:
id
(String) — идентификатор подсети.Создание и управление портом для подключения к сети роутера или сервера.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "vdc1" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_firewall_template" "allow_default" {
vdc_id = data.rustack_vdc.vdc1.id
name = "Разрешить входящие"
}
resource "rustack_network" "network" {
vdc_id = data.rustack_vdc.vdc1.id
name = "network"
subnets {
cidr = "10.20.3.0/24"
dhcp = true
gateway = "10.20.3.1"
start_ip = "10.20.3.2"
end_ip = "10.20.3.254"
dns = ["8.8.8.8", "8.8.4.4", "1.1.1.1"]
}
}
resource "rustack_port" "router_port" {
vdc_id = data.rustack_vdc.vdc1.id
network_id = resource.rustack_network.network.id
ip_address = "10.20.3.11"
firewall_templates = [data.rustack_firewall_template.allow_default.id]
tags = ["test_port"]
}
Обязательно для заполнения:
network_id
(String) — идентификатор сети;vdc_id
(String) — идентификатор ВЦОД;Опционально:
ip_address
(String) — локальный IP-адрес порта;firewall_templates
(List of String) — список шаблонов брандмауэра, настроенных на порте;tags
(Toset, String) — список тегов порта.Только для чтения:
id
(String) — идентификатор порта.Создание и управление роутером для соединения двух или более серверов и для подключения к сетям.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_network" "default_network" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Network"
}
resource "rustack_port" "router_port" {
vdc_id = data.rustack_vdc.single_vdc.id
network_id = data.rustack_network.default_network.id
}
resource "rustack_router" "new_router" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "New router"
ports = [
data.rustack_port.router_port.id,
]
floating = false
tags = ["test"]
}
Обязательно для заполнения:
name
(String) — название роутера;ports
(Toset, String, Min: 1, Max: 20) — список портов;vdc_id
(String) — идентификатор ВЦОД.Опционально:
system
(Bool) — позволяет управлять системным роутером через Terraform. По умолчанию system = false
; Может быть только один роутер с system = true
.floating
(Bool) — подключение публичного IP к роутеру. По умолчанию floating = true
.is_default
(Bool) — установите true
, чтобы сделать роутер системным.tags
(Toset, String) — список тегов роутера.Только для чтения:
id
(String) — идентификатор роутера;floating_id
(String) — идентификатор публичного IP.Создание диска, который может быть присоединён к серверу.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_storage_profile" "single_storage_profile" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "sas"
}
resource "rustack_disk" "disk2" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Disk 2"
storage_profile_id = data.rustack_storage_profile.single_storage_profile.id
size = 10
tags = ["reserve_data"]
}
Обязательно для заполнения:
name
(String) — название диска;size
(Integer) — размер диска в ГБ;storage_profile_id
(String) — идентификатор профиля хранения;vdc_id
(String) — идентификатор ВЦОД.Опционально:
tags
(Toset, String) — список тегов диска.Только для чтения:
id
(String) — идентификатор диска.external_id
(String) — идентификатор диска на ПВ РУСТЭК (для ВЦОД РУСТЭК).Создание и управление шаблоном брандмауэра.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
resource "rustack_firewall_template" "single_template" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "New custom template"
tags = ["test"]
}
Обязательно для заполнения:
name
(String) — название шаблона брандмауэра;vdc_id
(String) — идентификатор ВЦОД.Опционально:
tags
(Toset, String) — список тегов шаблона брандмауэра.Создание и управление правилом шаблона брандмауэра.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_firewall_template" "single_template" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "New custom template"
}
resource "rustack_firewall_template_rule" "rule_1" {
firewall_id = data.rustack_firewall_template.single_template.id
name = "test1"
direction = "ingress"
protocol = "tcp"
port_range = "80"
destination_ip = "0.0.0.0"
}
Обязательно для заполнения (для всех правил)
firewall_id
(String) — идентификатор шаблона брандмауэра;name
(String) — название правила;direction
(String) — направление правила, может принимать значения: ingress
(входящее), egress
(исходящее);protocol
(String) — протокол может принимать значения: udp
, tcp
, icmp
, any
(любой);destination_ip
(String) — IP-адрес источника или назначения.Для протоколов TCP и UDP также обязательно для заполнения:
port_range
(String) — можно выбрать один порт, диапазон портов, например, 80:90
или оставить пустым.Создание, изменение и удаление сервера.
Перед использованием примера должны быть созданы:
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_network" "service_network" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Сеть"
}
data "rustack_storage_profile" "ssd" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "ssd"
}
data "rustack_template" "debian10" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Debian 10"
}
data "rustack_firewall_template" "allow_default" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Разрешить исходящие"
}
data "rustack_firewall_template" "allow_web" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Разрешить WEB"
}
data "rustack_firewall_template" "allow_ssh" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Разрешить SSH"
}
data "rustack_disk" "disk1" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Диск 1"
}
data "rustack_disk" "disk2" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Диск 2"
}
resource "rustack_port" "vm_port" {
vdc_id = data.rustack_vdc.single_vdc.id
network_id = data.rustack_network.service_network.id
firewall_templates = [data.rustack_firewall_template.allow_default.id,
data.rustack_firewall_template.allow_web.id,
data.rustack_firewall_template.allow_ssh.id]
}
resource "rustack_vm" "vm1" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Server 1"
cpu = 2
ram = 4
template_id = data.rustack_template.debian10.id
user_data = file("user_data.yaml")
system_disk {
size = 10
storage_profile_id = data.rustack_storage_profile.ssd.id
}
disks = [
data.rustack_disk.disk1.id,
data.rustack_disk.disk2.id,
]
networks {
id = resource.rustack_port.vm_port.id
}
power = true
floating = false
tags = ["test"]
}
Обязательно для заполнения:
cpu
(Integer) — количество виртуальных ядер сервера;system_disk
— основной диск (см. вложенную схему ниже);name
(String) — название сервера;networks
(Block List) — блок с идентификатором порта, подсоединённого к серверу. Для каждого порта задаётся отдельный блок networks
.ram
(Float) — объём оперативной памяти сервера в ГБ;template_id
(String) — идентификатор шаблона сервера;user_data
(String) — cloud-init
скрипт;vdc_id
(String) — идентификатор ВЦОД.Опционально:
floating
(Boolean) — подключение публичного IP-адреса к серверу;power
(Boolean) — состояние сервера (true
— включен, false
— выключен);disks
(Toset, String) — список идентификаторов дисков, подсоединённых к серверу;tags
(Toset, String) — список тегов сервера.Только для чтения:
floating_ip
(String) — публичный IP-адрес, подсоединённый к серверу;id
(String) — идентификатор сервера.Вложенная схема для system_disk
:
Обязательно для заполнения:
size
(Integer) — размер диска в ГБ;storage_profile_id
(String) — идентификатор профиля хранения.Только для чтения:
external_id
(String) — идентификатор диска на ПВ РУСТЭК (для ВЦОД РУСТЭК);id
(String) — идентификатор диска;name
(String) — название диска.Вложенная схема для networks
:
Обязательно для заполнения:
id
(String) — идентификатор порта.Только для чтения:
ip_address
(String) — IP-адрес порта.Создание, изменение и удаление балансировщика.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_network" "new_network" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "New network"
}
resource "rustack_lbaas" "lbaas" {
vdc_id = data.rustack_project.single_vdc.id
name = "lbaas"
port {
network_id = data.rustack_network.new_network.id
}
tags = ["test"]
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД;name
(String) — название балансировщика;port
(Schema) — указание сети, к которой подключен балансировщик (см. вложенную схему ниже).Опционально:
floating
(Boolean) — подключение публичного IP к балансировщику;tags
(Toset, String) — список тегов балансировщика.Вложенная схема для port
:
network_id
(String) — идентификатор сети.Создание, изменение и удаление пула балансировщика нагрузки.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_template" "debian10" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Debian 10"
}
data "rustack_network" "service_network" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Сеть"
}
data "rustack_firewall_template" "allow_default" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Разрешить входящие"
}
data "rustack_storage_profile" "ssd" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "ssd"
}
resource "rustack_port" "vm_port" {
vdc_id = data.rustack_vdc.single_vdc.id
network_id = data.rustack_network.service_network.id
firewall_templates = [data.rustack_firewall_template.allow_default.id]
}
resource "rustack_vm" "vm" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Server 1"
cpu = 3
ram = 3
power = true
template_id = data.rustack_template.debian10.id
user_data = "${file("user_data.yaml")}"
system_disk {
size = 10
storage_profile_id = data.rustack_storage_profile.ssd.id
}
ports = [resource.rustack_port.vm_port.id]
floating = true
}
resource "rustack_lbaas" "lbaas" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "lbaas"
floating = true
port {
network_id = data.rustack_network.service_network.id
}
}
resource "rustack_lbaas_pool" "pool" {
lbaas_id = resource.rustack_lbaas.lbaas.id
connlimit = 34
method = "SOURCE_IP"
protocol = "TCP"
port = 80
member {
port = 80
weight = 50
vm_id = resource.rustack_vm.vm.id
}
depends_on = [rustack_vm.vm]
}
Обязательно для заполнения:
lbaas_id
(String) — идентификатор балансировщика, в который подключен пул;port
(String) — порт балансировщика нагрузки, по которому доступен пул;member
(Schema) — участник пула (см. вложенную схему ниже).Опционально:
method
(String) — метод балансировки, может принимать значения: ROUND_ROBIN
, LEAST_CONNECTIONS
, SOURCE_IP
;protocol
(String) — протокол балансировки трафика, может принимать значения: TCP
, HTTP
, HTTPS
;connlimit
(Integer) — лимит соединений пула.Вложенная схема для member
:
Обязательно для заполнения:
port
(Integer) — порт участника пула;vm_id
(String) — идентификатор сервера — участника пула.Опционально:
weight
(Integer) — вес участника пула.Создание, изменение и удаление хранилища S3.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
resource "rustack_s3_storage" "s3_storage" {
project_id = data.rustack_project.single_project.id
name = "s3_storage"
backend = "minio" # or "netapp"
tags = ["backup"]
}
Обязательно для заполнения:
name
(String) — название S3-хранилища;project_id
(String) — идентификатор проекта;backend
(String) — тип хранилища: minio
или netapp
.Опционально:
tags
(Toset, String) — список тегов хранилища.Только для чтения:
id
(String) — идентификатор хранилища;access_key
(String) — ключ доступа для подключения к хранилищу;client_endpoint
(String) — URL для подключения к хранилищу;secret_key
(String) — секретный ключ для подключения к хранилищу.Создание, изменение и удаление бакета хранилища S3.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_s3_storage" "s3_storage" {
project_id = data.rustack_project.single_project.id
name = "s3_storage"
}
resource "rustack_s3_storage_bucket" "bucket" {
s3_storage_id = data.rustack_s3_storage.s3_storage.id
name = "Bucket_1"
}
Обязательно для заполнения:
name
(String) — название бакета S3-хранилища;s3_storage_id
(String) — идентификатор S3-хранилища.Только для чтения:
id
(String) — идентификатор бакета S3-хранилища;external_name
(String) — название бакета S3-хранилища для подключения и обращения к нему.Создание, изменение и удаление доменной зоны.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
resource "rustack_dns" "dns" {
name = "dns.teraform."
project_id = data.rustack_project.single_project.id
tags = ["test_zone"]
}
Обязательно для заполнения:
name
(String) — название доменной зоны;project_id
(String) — идентификатор прректа.Опционально:
tags
(Toset, String) — список тегов доменной зоны.Только для чтения:
id
(String) — идентификатор доменной зоны.Создание, изменение и удаление записи доменной зоны.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_dns" "dns" {
name="dns.teraform."
project_id = data.rustack_project.single_project.id
}
# А запись доменной зоны (аналогично создаются AAAA, CNAME, NS, TXT записи)
resource "rustack_dns_record" "dns_record1" {
dns_id = data.rustack_dns.dns.id
type = "A"
host = "test.testme.com."
data = "10.0.1.1"
ttl = "86400"
}
# CAA запись доменной зоны
resource "rustack_dns_record" "dns_record2" {
dns_id = data.rustack_dns.dns.id
type = "CAA"
host = "test2.testme.com."
data = "10.0.1.2"
ttl = "86400"
tag = "issue"
flag = "128"
}
# MX запись доменной зоны
resource "rustack_dns_record" "dns_record3" {
dns_id = data.rustack_dns.dns.id
type = "MX"
host = "test3.testme.com."
data = "10.0.1.2"
ttl = "86400"
priority = "1"
}
Обязательно для заполнения (для всех типов записей)
dns_id
(String) — идентификатор доменной зоны;type
(String) — тип DNS-записи;host
(String) — хост DNS-записи;data
(String) — данные DNS-записи.Также обязательно для CAA записей
tag
(String) — тег DNS-записи;flag
(String) — флаг DNS-записи. Может быть выбран 0 (not critical), 128 (critical).Также обязательно для MX записей
priority
(String) — приоритет DNS-записи.Также обязательно для SRV записей
priority
(String) — приоритет DNS-записи;weight
(String) — вес DNS-записи;port
(String) — порт DNS-записи.Только для чтения:
id
(String) — идентификатор DNS-записи.Создание, изменение и удаление кластера Kubernetes.
После создания кластера поля
node_ram
,node_cpu
,node_disk_size
,node_storage_profile_id
,user_public_key_id
используются только при добавлении нового узла (при увеличении аргументаnodes_count
) после обновления ресурса.
data "rustack_project" "single_project" {
name = "Terraform Project"
}
data "rustack_vdc" "single_vdc" {
project_id = data.rustack_project.single_project.id
name = "Terraform VDC"
}
data "rustack_network" "service_network" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Сеть"
}
data "rustack_storage_profile" "ssd" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "ssd"
}
data "rustack_account" "me"{}
data "rustack_kubernetes_template" "kubernetes_template" {
name = "Kubernetes 1.22.1"
vdc_id = data.rustack_vdc.single_vdc.id
}
data "rustack_pub_key" "key" {
name = "test"
account_id = data.rustack_account.me.id
}
data "rustack_platform" "pl" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "Базовая"
}
resource "rustack_kubernetes" "k8s" {
vdc_id = data.rustack_vdc.single_vdc.id
name = "test"
node_ram = 3
node_cpu = 3
platform = data.rustack_platform.pl.id
template_id = data.rustack_kubernetes_template.kubernetes_template.id
nodes_count = 2
node_disk_size = 10
node_storage_profile_id = data.rustack_storage_profile.ssd.id
user_public_key_id = data.rustack_pub_key.key.id
floating = true
tags = ["sandbox"]
}
output "dashboard_url" {
value = resource.rustack_kubernetes.k8s.dashboard_url
}
Обязательно для заполнения:
vdc_id
(String) — идентификатор ВЦОД;name
(String) — название кластера;node_cpu
(Integer) — количество виртуальных CPU у узлов кластера;node_ram
(Integer) — объём оперативной памяти узлов кластера в ГБ;template_id
(String) — идентификатор шаблона Kubernetes;platform
(String) — идентификатор платформы (типа процессора) — только для сегмента VMware;nodes_count
(Integer) — количество узлов кластера;node_disk_size
(Integer) — размер диска узлов кластера в ГБ;node_storage_profile_id
— идентификатор профиля хранения дисков узлов кластера;user_public_key_id
(String) — публичный ключ кластера.Опционально:
floating
(Boolean) — подключение публичного IP-адреса для кластера;tags
(Toset, String) — список тегов кластера.Только для чтения:
floating_ip
(String) — публичный IP-адрес кластера;id
(String) — идентификатор кластера;dashboard_url
(String) — URL панели управления Kubernetes.Получение URL для входа в панель управления кластера
Данный блок выведет URL панели управления в консоли:
output "dashboard_url" {
value = resource.rustack_kubernetes.k8s.dashboard_url
}
Получение конфигурационного файла kubectl
После создания кластера в рабочей директории появится конфигурационный файл.
Создание, изменение и удаление платформенного сервиса.
data "rustack_project" "single_project" {
name = "project-2"
}
data "rustack_hypervisors" "all_hypervisors" {
project_id = data.rustack_project.single_project.id
}
data "rustack_paas_template" "db_template" {
id = 1
project_id = data.rustack_project.single_project.id
}
resource "rustack_paas_service" "db_service" {
name = "database"
project_id = data.rustack_project.single_project.id
paas_service_id = data.rustack_paas_template.db_template.id
paas_service_inputs = jsonencode({
"change_password": false,
"enable_ssh_password":true,
"enable_sudo":true,
"passwordless_sudo":false,
"cpu_num":1,
"ram_size":1,
"volume_size":10,
"network_id":"93f611ed-50e4-49fc-b534-d3195dfad3d31",
"vdcs_id":"e79c516f-c7d9-4b9d-985e-05d0557ef094",
"vm_name":"vm_name2",
"template_id":"304aed12-05cf-4974-acfe-2210ee3e99e6",
"storage_profile":"0e1aead5-ef4b-46e2-b988-64dea6d146f8",
"firewall_profiles":["00000000-0000-0000-0000-000000000000"],
"user_name":"test",
"user_password":"QazWsx123$"
})
}
Обязательно для заполнения:
name
(String) — название сервиса;project_id
(String) — идентификатор проекта;paas_service_id
(Integer) — идентификатор шаблона платформенного сервиса;paas_service_inputs
(String) — входные данные для сервиса. Вместо jsonencode(...)
можно использовать file("${path.module}/inputs.json")
для получения входных данных из файла inputs.json
.