Description | Pipeline Status | Version |
---|---|---|
Terraform v1.10.2 | ||
Terraform Pre-BSL | ||
OpenTofu Latest |
В данном репозитории находятся примеры Terraform модулей, используемых для создания инфраструктуры в облаке Selectel. Также в репозитории еженедельно запускаются пайплайны с тестовым созданием ресурсов с помощью Terraform и OpenTofu.
P.S. Если вы не нашли пример для создания определенного ресурса - можете оставить issue и мы примем во внимание необходимость его добавления.
Перед началом работы с облачными ресурсами Selectel через Terraform/OpenTofu рекомендуем ознакомиться с документацией по провайдеру Selectel/OpenStack.
Далее все команды terraform-cli могут быть заменены на tofu. Будут работать оба варианта.
Перед использованием проверьте версию Terraform/OpenTofu, данный репозиторий гарантирует запуск Terraform кода только на определенной версии Terraform/OpenTofu - см. в шапке README. Версия Terraform 1.5.5 обусловлена переходом начиная с версии 1.6 на лицензию BSL.
Также убедитесь, что в вашем env нет лишних переменных вида "OS_*", их наличие повлияет на провайдер Openstack.
Для доступа к Terraform Registry из РФ можно воспользоваться кеширующим прокси Selectel, для этого отредактируем файл .terraformrc (или .tofurc для OpenTofu):
cat <<EOS >> $HOME/.terraformrc
provider_installation {
network_mirror {
url = "https://tf-proxy.selectel.ru/mirror/v1/"
}
}
EOS
По умолчанию в репозитории стейт хранится в s3, для локального запуска потребуется изменить поле backend
на local
в файле versions.tf:
terraform {
backend "local" {}
}
Пример передачи `backend` для хранения стейта в S3 через CLI:
terraform init \
-backend-config="bucket=< имя бакета s3 >" \
-backend-config="endpoint=s3.ru-1.storage.selcloud.ru" \
-backend-config="key=< имя стейт-файла >.tfstate" \
-backend-config="region=ru-1" \
-backend-config="skip_region_validation=true" \
-backend-config="skip_credentials_validation=true" \
-backend-config="access_key=< S3_ACCESS_KEY >" \
-backend-config="secret_key=< secrets.S3_SECRET_KEY >"
Через tf файл:
terraform {
backend "s3" {
bucket = "< имя бакета s3 >"
endpoint = "s3.ru-1.storage.selcloud.ru"
key = "< имя стейт-файла >.tfstate"
region = "ru-1"
access_key = "< S3_ACCESS_KEY >"
secret_key = "< secrets.S3_SECRET_KEY >"
skip_region_validation = true
skip_credentials_validation = true
}
}
Вы можете использовать все модули, которые есть в репозитории или закомментировать лишние, но учтите, что в первую очередь создается проект с сервисным пользователем, которые необходимы для провайдера Openstack
.
Все, что будет создано ресурсами из провайдера
Openstack
должно идти после создания проекта и пользователя! Для этого потребуется добавитьdepends_on
к ресурсу:depends_on = [ module.project-with-user ]
Опционально: Создаем файл main.tf
, где описана необходимая инфраструктура (пример ниже - создание Simple File Storage
, остальные примеры смотри в папке modules):
module "sfs" {
source = "modules/sfs"
os_network_id = var.nat_network_id
os_subnet_id = var.nat_subnet_id
sfs_size = var.sfs_size
sfs_volume_type = var.sfs_volume_type
os_availability_zone = var.os_availability_zone
}
- Инициализируем Terraform Backend командой:
terraform init
- Для проверки вносимых изменений выполняем команду:
terraform plan
- Для применения изменений выполняем команду:
terraform apply
В репозитории можно найти пример использования модулей. В корне репозитория созданы *.tf
файлы, которые можно использовать как пример вызова модулей.
Для их использования достаточно перейти в корень репозитория и инициализировать Terraform:
terraform init
Далее можно скорректировать некоторые параметры в файле main.tf
, которые передаются в модули, например, объём SFS, имя кластера и другие.
Затем необходимо задать переменные, в которых будут содержаться данные от аккаунта Selectel, в котором будет развёрнута инфраструктура:
selectel_domain_name
, ID аккаунта, например, 123123selectel_user_admin_user
, сервисный пользователь с нужными правамиselectel_user_admin_password
, пароль от сервисного пользователя
Переменные можно задать несколькими способами:
- В качестве переменных окружения (для этого нужно добавить перед названием переменной
TF_VAR_
):
export TF_VAR_selectel_domain_name=123123
export TF_VAR_selectel_user_admin_user=foo
export TF_VAR_selectel_user_admin_password=bar
terraform plan/apply
- Ввести вместе с командой
terraform plan/apply
с помощью параметра-var
:
terraform plan/apply \
-var="selectel_domain_name=123123" \
-var="selectel_user_admin_user=foo" \
-var="selectel_user_admin_password=bar"
- Ввести с клавиатуры, если переменные не были заданы любым другим способом
После успешного выполнения команды terraform apply
вы должны увидеть в своём аккаунте новый проект, в котором будут запущены все модули (MKS, SFS, vm, CRaaS и др.)
Репозиторий включает в себя минимально необходимую структуру для запуска Terraform. В директории modules собраны модули для создания различных компонентов в облаке Selectel.
- craas - создание Container as a Service
- flavor - создание flavor (тип инстанса)
- floatingip - создание плавающего ip адреса
- image_datasource - считывание айдишника образа
- keypair - создание ключевой пары для подключения по SSH
- mks - набор модулей для создания Selectel Managed Kubernetes
- k8s-cluster - создание master ноды k8s
- k8s-cluster-standalone - создание managed kubernetes кластера
- k8s-nodegroup - создание compute ноды k8s
- k8s-nodegroup-gpu - создание compute ноды с GPU k8s
- nat - создание nat сети
- network - создание локальной сети
- os_project_with_user - создание проекта в облаке Selectel
- s3 - создание объектного хранилища s3
- s3-bucket - создание s3 бакета
- s3-credentials - создание s3 параметров авторизации
- selectel-token - создание токена аккаунта Selectel
- sfs - создание файлового хранилища
- vm - создание виртуального облачного сервера
- volume - создание облачного диска