Skip to content

Selectel some examples of terraform modules

License

Notifications You must be signed in to change notification settings

selectel/selectel-infra-examples

Repository files navigation

Selectel Terraform Modules Example

Pipeline Status Version
Terraform v1.10.3 version
OpenTofu Latest version

В данном репозитории находятся примеры Terraform модулей, используемых для создания инфраструктуры в облаке Selectel. Также в репозитории еженедельно запускаются пайплайны с тестовым созданием ресурсов с помощью Terraform и OpenTofu.

P.S. Если вы не нашли пример для создания определенного ресурса - можете оставить issue и мы примем во внимание необходимость его добавления.

Перед началом работы с облачными ресурсами Selectel через Terraform/OpenTofu рекомендуем ознакомиться с документацией по провайдеру Selectel/OpenStack.

Использование

Все последующие команды terraform-cli могут быть заменены на opentofu.

Убедитесь, что в вашем env нет лишних переменных вида "OS_*", их наличие повлияет на провайдер Openstack.

1. .terraformrc/.tofurc

Для доступа к Terraform Registry из РФ можно воспользоваться кеширующим прокси Selectel, для этого отредактируем файл .terraformrc (или .tofurc для OpenTofu):

cat <<EOS >> $HOME/.terraformrc
provider_installation {
    network_mirror {
      url = "https://tf-proxy.selectel.ru/mirror/v1/"
    }
}
EOS

2. State File

По умолчанию в репозитории стейт хранится в s3, для локального запуска потребуется изменить поле backend на local в файле versions.tf:

terraform {
  backend "local" {}
}

Пример передачи backend для хранения стейта в S3:

terraform {
  backend "s3" {
    bucket     = "<название бакета s3>"
    key        = "<название стейт-файла>.tfstate"
    access_key = "<access_key>"
    secret_key = "<secret_key>"
    endpoints  = { s3 = "https://s3.ru-1.storage.selcloud.ru" }
    region     = "ru-1"
    
    skip_region_validation      = true
    skip_credentials_validation = true
    skip_requesting_account_id  = true
    skip_s3_checksum            = true
    skip_metadata_api_check     = true
  }
}

3. Init

Вы можете использовать все модули, которые есть в репозитории или закомментировать лишние, но учтите, что в первую очередь создается проект с сервисным пользователем, которые необходимы для провайдера 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
}
  1. Инициализируем Terraform Backend командой:
terraform init
  1. Для проверки вносимых изменений выполняем команду:
terraform plan
  1. Для применения изменений выполняем команду:
terraform apply

Пример использования

В репозитории можно найти пример использования модулей. В корне репозитория созданы *.tf файлы, которые можно использовать как пример вызова модулей.

Для их использования достаточно перейти в корень репозитория и инициализировать Terraform:

terraform init

Далее можно скорректировать некоторые параметры в файле main.tf, которые передаются в модули, например, объём SFS, имя кластера и другие.

Затем необходимо задать переменные, в которых будут содержаться данные от аккаунта Selectel, в котором будет развёрнута инфраструктура:

  • selectel_domain_name, ID аккаунта, например, 123123
  • selectel_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.

Modules

About

Selectel some examples of terraform modules

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages