Перейти к основному содержанию

Настройка Terraform для управления сервисом CLO

Утилита Terraform позволяет управлять проектами CLO с помощью удобного языка описания сетевой инфраструктуры. Такой подход упрощает создание и администрирование сложных проектов, предоставляет понятное и полное описание доступных ресурсов проекта и связей между ними, а также снижает вероятность человеческих ошибок при управлении сетевыми ресурсами.

Установка Terraform

Используйте официальную документацию для установки приложения Terraform.

Провайдер CLO доступен на Github и в официальном репозитории HashiCorp.

Примечание. Официальный репозиторий HashiCorp может быть доступен на территории РФ только с использованием VPN-сервисов, в связи с санкционными ограничениями.

Подключение Terraform к сервису

Создайте каталог манифестов, и в нём файл манифеста main.tf для данных о конфигурации Terraform.

В файле манифеста перечисляются провайдеры Terraform, необходимые для создания инфраструктуры. При запуске манифеста провайдер будет автоматически загружен из репозитория HashiCorp.

Примечание. Для ручной установки провайдера обратитесь к соответствующему разделу официальной документации. 

Добавьте в файл следующий блок:

terraform {
  required_providers {
 clo = {
   version = "1.0.6"
   source = "clo-ru/clo"
 }
  }
 }
provider "clo" {
 auth_url = "https://api.clo.ru"
 token = <mysecrettoken>
 }

Примечание. Актуальные версии провайдера можно найти в официальной документации, нажав на кнопку USE PROVIDER.

Провайдер использует API-токен для запросов, отправляемых провайдеру. Токен можно создать в Личном кабинете: Управление аккаунтом -> Токены API.

Описание плана инфраструктуры 

Опишите в файле main.tf план инфраструктуры. Добавьте описание ресурсов, используя документацию к провайдеру.

Совет. Вы можете использовать примеры из GitHub-репозитория.

Перейдите в каталог, где находится файл манифеста main.tf, и выполните следующую команду:

terraform init

Проверьте, что план инфраструктуры не содержит ошибок:

terraform plan

Программа выведет список ресурсов, готовых к созданию. Если план инфраструктуры содержит ошибки, устраните их и повторите предыдущую операцию.

Далее разверните инфраструктуру и создайте необходимые ресурсы командой:

terraform apply

В панели управления будут автоматически отображены все созданные ресурсы.

Изменение инфраструктуры 

Для изменения инфраструктуры отредактируйте файл манифеста и выполните команду:

terraform apply

Примечание. Изменения в инфраструктуре, сделанные через панель управления, в файле манифеста не записываются и не отображаются.

Удаление инфраструктуры

Чтобы удалить ресурсы, выполните в каталоге с файлом манифеста следующую команду:

terraform destroy

Примечание. Ресурсы инфраструктуры, удалённые с помощью панели управления, не удаляются автоматически из файла манифеста.

Пример плана инфраструктуры 

Применение этого плана в файле манифеста создаст инфраструктуру, которая будет включать в себя следующие ресурсы:

  • облачный сервер с загрузочным сетевым диском из образа Ubuntu 20.04 LTS 64-bit, с произвольной конфигурацией с 2 vCPU и 4 ГБ RAM, сетевой диск 40 ГБ, внешний IP-адрес.
  • дополнительный внешний IP-адрес
  • привязку нового IP-адреса к облачному серверу.

План описан в двух файлах — main.tf и vars.tf. В первом из этих файлов хранится описание создаваемых ресурсов, во втором — объявлены переменные, которые могут затем использоваться в других файлах манифестов.

Файл vars.tf 

# Имя операционной системы, чтобы получить ID образа

variable "os_name"{

 default = "Ubuntu 20"

}

Файл main.tf 

# Инициализация Terraform и конфигурации провайдеров

terraform {

 required_providers {

   clo = {

     version = "1.0.6"

     source = "clo-ru/clo"

   }

 }

}

provider "clo" {

 auth_url = "https://api.clo.ru"

 token = <token>

}

# Получаем список проектов

data "clo_projects" "all_projects" {

}

# Сохраняем ID первого проекта из списка в переменную pr_id

output "pr_id” {

  value = data.clo_projects.all_projects.results[0].id

}

# Получаем ID образа операционной системы. Имя образа берем из переменных.

data "clo_project_image" "ubuntu"{

 project_id = pr_id

 name = var.os_name

}

# Создаем дополнительный IP-адрес

resource "clo_network_ip" "fip_1" {

  project_id = pr_id

}

# Создаем сервер с нужными параметрами

resource "clo_compute_instance" "serv" {

  project_id = pr_id

  name = "my_server"

  flavor_ram = 4

  flavor_vcpus = 2

  # Используем ID образа, полученный ранее

  image_id = data.clo_project_image.ubuntu.image_id

  block_device{

   bootable=true

   storage_type = "volume"

   size = 40

  }

  addresses{

   version = 4

   external=true

   ddos_protection=false

  }

}

# Подключение нового адреса к серверу.

resource "clo_network_ip_attach" "attach_ip"{

  address_id = clo_network_ip.fip_1.id

  entity_name = "server"

  entity_id = clo_compute_instance.serv.id

}

# Вывод ID созданного сервера.

output "server" {

  value = resource.clo_compute_instance.serv.id

}

Назад к базе знаний