Pipeline Status | Version |
---|---|
В данном репозитории находятся примеры Terraform модулей, используемых для создания инфраструктуры в облаке Selectel. С учетом нынешних реалий в репозитории Вы можете найти ежедневные пайплайны проверки создания ресурсов через Terraform и OpenTofu.
P.S. Если Вы не нашли пример для создания определенного ресурса - Вы можете оставить issue и мы примем во внимание необходимость его добавления.
Перед началом работы с облачными ресурсами Selectel через Terraform/OpenTofu рекомендуем ознакомиться с документацией по провайдеру Selectel/OpenStack.
ВАЖНО! С версии репозитория >= 2.0.1 было добавлено тестирование запуска terraform кода через OpenTofu. В связи с блокировкой terraform registry из РФ. Необходимость в terraform-proxy или terraform-mirror усложняет использование terraform. OpenTofu позволяет без проксей, зеркал и изменений в коде использовать все теже провайдеры, что лежат в registry.terraform.io. Все провайдеры OpenTofu лежат в репозитории - ссылка. Так же документация по провайдерам от OpenTofu - ссылка.
Далее все команды terraform-cli могут быть заменены на tofu. Будут работать оба варианта.
Перед использованием проверьте версию Terraform/OpenTofu, данный репозиторий гарантирует запуск Terraform кода только на определенной версии Terraform/OpenTofu - смотри в шапке README.
Так же убедитесь, что в вашем env нет других переменных вида "OS_*" их наличие повлияет на провайдер Openstack!
Для того чтобы у Вас не было проблем при использовании репозитория - были перенесены все используемые провайдеры в папку providers. Чтобы заставить terraform cмотреть в эту папку потребуется создать файл terraformrc
:
cat <<EOS >> $HOME/.terraformrc
provider_installation {
filesystem_mirror {
path = "$GITHUB_WORKSPACE/providers"
include = ["registry.terraform.io/*/*"]
}
}
EOS
По-умолчанию в репозитории стейт хранится в s3
.
Для локального запуска потребуется изменить на 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
terraform apply -auto-approve
- для применения без подтверждения
В репозитории можно найти пример использования модулей. В корне репозитория созданы *.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. Самое интересное это папка moduels в которой собраны примеры запуска компонентов в облаке 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 - создание облачного диска