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

Terraform – это инструмент для создания декларативного кода, который позволяет разработчикам использовать язык высокого уровня, называемый HCL (HashiCorp Configuration Language) и используемый для описания нужной облачной или локальной инфраструктуры «конечного состояния» (запуска приложения). Он позволяет сгенерировать план для достижения этого конечного состояния и выполняет план по доставке инфраструктуры в виде кода (сокр. IaC).

Terraform может использоваться внешними системами для формирования предварительной описательной модели, а также для автоматизации исполнения заказной конфигурации облачной инфраструктуры на выделенных ресурсах ЦОД.

Terraform обеспечивает сопоставление ресурсов, описанных в конфигурационном файле, с соответствующими ресурсами облачного провайдера. Такое сопоставление именуется состоянием – фактически, это гигантский файл формата JSON.

При запуске (команда terraform apply) Terraform обновляет состояние, направляя соответствующий запрос облачному поставщику [1]. Затем он сравнивает возвращенные ресурсы с той информацией, что записана в вашей конфигурации Terraform. Если обнаружится какая-либо разница, то создается план (обновления); в сущности, план содержит перечень изменений, которые нужно внести в ресурсы облачного провайдера. Изменения вносятся таким образом, чтобы фактическая конфигурация соответствовала той, что была указана в заказной конфигурации. Terraform применяет эти изменения, направляя соответствующие вызовы к облачному провайдеру.

4.5.1.1. Установка ПО и настройка окружения

Установка ПО Terraform выполняется на контроллер (OpenStack) или АРМ облачного администратора, функционирующий под управлением рекомендованной ОС (CentOS или AlmaLinux).

Настройте репозиторий:

[repo-tionix-hashicorp]
name=HashiCorp - repo.tionix.ru
baseurl=https://repo.tionix.ru/el8/hashicorp/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.tionix.ru/el8/hashicorp/hashicorp.gpg

Выполните команду:

sudo dnf install -y terraform.x86_64

Если бинарный файл (утилита terraform) не запускается (после установки пакета команда which terraform не дает результата), то необходимо добавить путь к нему:

export PATH=$PATH:<путь_к_terraform>

Уточнить, каким образом ПО размещено в файловой системе:

rpm -qL terraform | grep bin

Для того, чтобы было удобно работать с утилитой (в командной строке), дополнительно настройте командную оболочку:

touch ~/.bashrc; terraform -install-autocomplete

4.5.1.2. Настройка конфигурации

Создайте новую рабочую директорию с произвольным названием, например – TCP3-terraform. В ней будут храниться конфигурационные файлы, сохраненные состояния Terraform и инфраструктуры (TIONIX Cloud).

Создайте в новой директории конфигурационный файл с расширением .tf (например – main.tf):

cd TCP3-terraform && touch main.tf

4.5.1.2.1. Файл окружения terraform.tfvars:

openstack_user_name = "admin"
openstack_tenant_name = "admin"
openstack_password = "Tionix42"
openstack_auth_url = "http://manage.tnx.loc:35357/v3"

4.5.1.2.2. Файл настройки провайдера provider.tf:

# Define required providers
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.35.0"
}
}
}
provider "openstack" {
user_name = "${var.openstack_user_name}"
tenant_name = "${var.openstack_tenant_name}"
password = "${var.openstack_password}"
auth_url = "${var.openstack_auth_url}"
domain_name = "Default"

4.5.1.2.3. Файл описания параметров объекта variables.tf:

variable "openstack_user_name" {}
variable "openstack_tenant_name" {}
variable "openstack_password" {}
variable "openstack_auth_url" {}
variable "image" {
default = "cirros"
}

variable "flavor" {
default = "micro"
}

variable "ssh_key_pair" {
default = ""
}

variable "ssh_user_name" {
default = ""
}

variable "availability_zone" {
default = "nova"
}

variable "security_group" {
default = "default"
}

variable "network" {
default = "10.19.10.0/24"
}

4.5.1.2.4. Файл описания управления объектами Openstack deploy.tf:

resource "openstack_compute_instance_v2" "vm1" {
count = "1"
name = "demo2"
image_name = "${var.image}"
availability_zone = "${var.availability_zone}"
flavor_name = "${var.flavor}"
key_pair = "${var.ssh_key_pair}"
security_groups = ["${var.security_group}"]
network {
name = "${var.network}"
}
user_data = "${file("test.sh")}"
}

4.5.1.3. Создание ресурсов

В примере создается ВМ с требуемыми параметрами, заданными в файле variables.tf.

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

terraform init

Чтобы управлять объектом, выполните команду:

terraform apply

4.5.1.4. Валидация и форматирование (файлов конфигурации)

Выполните валидацию (проверку) конфигурации:

terraform validate

Если конфигурация является допустимой, то будет выведено сообщение:

Success! The configuration is valid.

Отформатируйте файлы конфигураций (в рабочей директории и вложенных):

terraform fmt

Результат выполнения:

main.tf variables.tf

4.5.1.5. Использование шаблона (Ansible) для установки и настройки Terraform

Предусмотрены автоматическое развертывание и настройка конфигурации ПО terraform, выполняемые c помощью плэйбуков (Ansible).

Структура роли terraform:

  • файл create_config.yaml (плейбук)
  • папка deploy
  • папка files
  • папка tasks
  • папка templates
  • папка vars

Примечание.

Для автоматизированной установки ПО terraform используется сценарий Ansible – основной плейбук install.yaml из папки tasks.

Плейбук create_config.yaml является дополнительным и предназначен для конфигурирования ПО terraform.

4.5.1.5.1. Подготовительные действия

Установите на АРМ администратора облака пакет ansible:

dnf install ansible

Скачайте файл архива, содержащий шаблон развертывания:

cd $HOME
wget http://repo.tionix.ru/reference_TCP_classic/terraform-ansible.tar.gz

Перейдите в рабочую директорию и распакуйте архив:

mkdir $HOME/terraform && cd $HOME/terraform
tar -xvzf $HOME/terraform-ansible.tar.gz
  1. Отредактируйте файл vars/main.yml в соответствии с требованиями вашего облака (исходный заказ):
openstack_user_name:
value: OPENSTACK_USER_NAME_for_TENANT
openstack_tenant_name:
value: OPENSTACK_TENANT_NAME
openstack_password:
value: OPENSTACK_PASSWORD
openstack_auth_url:
value: OPENSTACK_AUTH_URL
image:
value: cirros
flavor:
value: OPENSTACK_FLAVOR_NAME
ssh_key_pair:
value:
ssh_user_name:
value:
availability_zone:
value: OPENSTACK_AVAILABILITY_ZONE
security_group:
value: OPENSTACK_SECURITY_GROUP
network:
value: OPENSTACK_NETWORK_NAME
  1. Выполните основной плейбук:

    ansible-playbook tasks/install.yaml
    
  2. Выполните дополнительный плейбук:

    ansible-playbook create_configure.yaml
    

4.5.1.5.2. Проверка работоспособности ПО

Создайте в своем облаке тестовую машину. Выполните команды:

cd deploy
terraform apply

Сноски

[1]https://habr.com/ru/company/piter/blog/351878/