Create a zone with resource records in DNS hosting (actual)
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.
Configuration files
Example file for configuring providers
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"
}
Example file for creating a zone with resource records in DNS hosting (actual)
resource "selectel_domains_zone_v2" "zone_1" {
name = "example.com."
project_id = selectel_vpc_project_v2.project_1.id
}
resource "selectel_domains_rrset_v2" "a_rrset_1" {
zone_id = selectel_domains_zone_v2.zone_1.id
name = selectel_domains_zone_v2.zone_1.name
type = "A"
ttl = 60
project_id = selectel_vpc_project_v2.project_1.id
records {
content = "203.0.113.5"
}
records {
content = "203.0.113.6"
}
}
resource "selectel_domains_rrset_v2" "mx_rrset_1" {
zone_id = selectel_domains_zone_v2.zone_1.id
name = selectel_domains_zone_v2.zone_1.name
type = "MX"
ttl = 60
project_id = selectel_vpc_project_v2.project_1.id
records {
content = "10 mail.example.org."
}
}
resource "selectel_domains_rrset_v2" "txt_rrset_1" {
zone_id = selectel_domains_zone_v2.zone_1.id
name = selectel_domains_zone_v2.zone_1.name
type = "TXT"
ttl = 60
project_id = selectel_vpc_project_v2.project_1.id
records {
content = "\"v=spf1 include:spf.mail.selcloud.ru ?all\""
}
}
optional: configure providers
If you're set up the ISPs Selectel and OpenStack, skip this step.
-
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. Созданные ресурсы отобразятся в панели управления.
-
Если для создания ресурсов оказалось недостаточно квот, увеличьте квоты.
Create a zone
resource "selectel_domains_zone_v2" "zone_1" {
name = "example.com."
project_id = selectel_vpc_project_v2.project_1.id
}
Here. name
— zone name, e.g. example.com.
.
Check out the detailed description of the resource selectel_domains_zone_v2.
Create resource records
resource "selectel_domains_rrset_v2" "a_rrset_1" {
zone_id = selectel_domains_zone_v2.zone_1.id
name = selectel_domains_zone_v2.zone_1.name
type = "A"
ttl = 60
project_id = selectel_vpc_project_v2.project_1.id
records {
content = "203.0.113.5"
}
records {
content = "203.0.113.6"
}
}
resource "selectel_domains_rrset_v2" "mx_rrset_1" {
zone_id = selectel_domains_zone_v2.zone_1.id
name = selectel_domains_zone_v2.zone_1.name
type = "MX"
ttl = 60
project_id = selectel_vpc_project_v2.project_1.id
records {
content = "10 mail.example.org."
}
}
resource "selectel_domains_rrset_v2" "txt_rrset_1" {
zone_id = selectel_domains_zone_v2.zone_1.id
name = selectel_domains_zone_v2.zone_1.name
type = "TXT"
ttl = 60
project_id = selectel_vpc_project_v2.project_1.id
records {
content = "\"v=spf1 include:spf.mail.selcloud.ru ?all\""
}
}
Here:
type
— record type;ttl
— record lifetime in seconds, from 60 to 604,800;content
— the value of the record.
Check out the detailed description of the resource selectel_domains_rrset_v2.
Delegate domain management
In order to transfer control of domain resource records to Selectel servers, the domain must be delegated — you must specify these servers in the domain's NS records.
- Go to the control panel of the domain registrar where your domain is registered.
- In the NS entries, replace the values with Selectel's NS servers:
a.ns.selectel.ru
,b.ns.selectel.ru
,c.ns.selectel.ru
,d.ns.selectel.ru
. Each server must be listed in a separate entry.