Download PDF
Download page Управление инфраструктурой через Terraform.
Управление инфраструктурой через Terraform
Terraform — это программное обеспечение для управления внешней инфраструктурой. С помощью Terraform вы можете управлять ресурсами VMmanager — виртуальными машинами (ВМ), сетями и т.д.
В Terraform используется подход Infrastructure as code — все команды и настройки для ресурсов передаются через конфигурационные файлы. В конфигурационных файлах используется декларативный язык HCL (HashiCorp Configuration Language). Подробнее о Terraform см. в официальной документации.
Terraform взаимодействует с объектами инфраструктуры с помощью специального набора инструкций — провайдера. Документация к провайдеру для VMmanager доступна на ресурсах registry.terraform.io и github.com.
Установка Terraform
Стандартный способ
AlmaLinux
- Выполните команды:
yum install -y yum-utils curl
CODEyum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
CODEyum -y install terraform
CODE Создайте отдельную директорию для Terraform:
mkdir ./terraform
CODE
Debian, Ubuntu
Выполните команды:
apt-get update && apt-get install -y gnupg software-properties-common curl
CODEcurl -fsSL https://apt.releases.hashicorp.com/gpg | apt-key add -
CODEapt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
CODEsudo apt-get update && sudo apt-get install terraform
CODEСоздайте отдельную директорию для Terraform:
mkdir ./terraform
CODE
macOS
Если в системе не установлен менеджер пакетов Homebrew, установите его:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
CODEВыполните команды:
brew tap hashicorp/tap
CODEbrew install hashicorp/tap/terraform
CODEbrew update
CODEbrew upgrade hashicorp/tap/terraform
CODEСоздайте отдельную директорию для Terraform:
mkdir ./terraform
CODE
Windows
- Скачайте версию Terraform для Windows.
- Распакуйте содержимое архива в отдельную директорию. Например, C:\Apps\Terraform\.
- Добавьте путь к директории с Terraform в системную переменную PATH. Порядок добавления зависит от версии ОС.
Альтернативный способ
Если репозиторий Terraform недоступен, вы можете скачать дистрибутив ПО из зеркала репозитория. После загрузки:
- Распакуйте содержимое архива в отдельную директорию.
Добавьте путь к директории в системную переменную PATH:
Команда для Linux
export PATH=$PATH:/path/to/terraform
CODE/path/to/terraform — путь к директории с Terraform
Подготовка конфигурации
Чтобы подготовить конфигурацию, создайте в директории с Terraform файл main.tf.
# Инициализация провайдера для VMmanager
terraform {
required_providers {
vmmanager6 = {
source = "usaafko/vmmanager6"
version = ">= 0.0.25"
}
}
}
provider "vmmanager6" {
# E-mail администратора
pm_email = "admin@example.com"
# Пароль администратора
pm_password = "secret"
# URL сервера с платформой
pm_api_url = "https://vmmanager.example.com"
}
# Описание создаваемого ресурса - виртуальной машины (ВМ)
resource "vmmanager6_vm_qemu" "test_vm" {
# Имя ВМ
name = "My_vm"
# Описание ВМ
desc = "Testing Terraform"
# Количество ядер CPU
cores = 1
# Количество RAM, Mb
memory = 512
# Объём дискового пространства
disk = 5000
# id шаблона операционной системы
os = 1
# Пароль администратора ВМ
password = "vmsecret"
# id кластера
cluster = 1
# Владелец ВМ. Terraform создаст аккаунт владельца на основе данных
# из ресурса "user" и сохранит его в этом параметре. Вместо
# переменной вы можете указать id существующего пользователя.
account = "${vmmanager6_account.user.id}"
# Доменное имя ВМ
domain = "test.example.com"
# Ресурсы, от которых зависит создание ВМ - физическая сеть,
# пул IP-адресов и пользователь. В первую очередь Terraform
# создаст указанные объекты, а затем ВМ.
depends_on = [vmmanager6_network.net1, vmmanager6_pool.pool1, vmmanager6_account.user ]
# Из какого пула взять IP-адрес для ВМ. Terraform создаст пул
# на основе данных из ресурса "pool1" и сохранит его в этом
# параметре. Вместо переменной вы можете указать id
# существующего пула.
ipv4_pools = [ "${vmmanager6_pool.pool1.id}" ]
# Количество IP-адресов
ipv4_number = 1
}
# Описание создаваемого ресурса - физической сети
resource "vmmanager6_network" "net1" {
# Сеть в формате <адрес сети>/<префикс маски сети>
network = "172.31.240.0/20"
# IP-адрес шлюза
gateway = "172.31.255.254"
# Описание сети
desc = "Terraform network"
}
# Описание создаваемого ресурса - пула IP-адресов
resource "vmmanager6_pool" "pool1" {
# Имя пула
pool = "terraform"
# Описание пула
desc = "Terraform pool"
# Блок IP-адресов, входящих в пул
ranges = ["172.31.247.16/30"]
# Зависимый ресурс - физическая сеть. Terraform создаст пул
# только после создания физической сети.
depends_on = [vmmanager6_network.net1]
}
# Описание создаваемого ресурса - учётной записи пользователя
resource "vmmanager6_account" "user" {
# E-mail пользователя
email = "user@example.com"
# Пароль пользователя
password = "usersecret"
# Роль пользователя
role = "@advanced_user"
# Публичный SSH-ключ пользователя. Необязательный параметр.
# Без указания SSH-ключа пользователь сможет подключиться
# к ВМ только по паролю.
ssh_keys {
# Имя пользователя SSH-ключа
name = "user123"
# Содержимое публичного SSH-ключа
ssh_pub_key = "ecdsa-sha2-nistp256 AAAAE2VjZ....user@example.com"
}
}
Создание ресурсов
Инициализируйте проект конфигурации:
terraform init
CODEЕсли ресурс с провайдером недоступен, ответ будет содержать ошибку вида
│ Error: Failed to query available provider packages │ │ Could not retrieve the list of available versions for provider │ usaafko/vmmanager6: could not connect to registry.terraform.io: Failed to │ request discovery document: 403 Forbidden
CODEВ этом случае вы можете установить провайдер локально:
Обратите внимание!
Локальная установка провайдера возможна только на ПК с ОС семейства Linux.
Выполните команды:
mkdir -p ~/.terraform.d/plugins/localhost/usaafko/vmmanager6/0.0.25/linux_amd64/
CODEcurl -L https://github.com/usaafko/terraform-provider-vmmanager6/releases/download/v0.0.25/terraform-provider-vmmanager6_0.0.25_linux_amd64.zip -o terraform-provider-vmmanager6.zip
CODEunzip terraform-provider-vmmanager6.zip
CODEmv terraform-provider-vmmanager6_v0.0.25 ~/.terraform.d/plugins/localhost/usaafko/vmmanager6/0.0.25/linux_amd64/terraform-provider-vmmanager6
CODEВ файле main.tf замените строку
source = "usaafko/vmmanager6"
CODEна
source = "localhost/usaafko/vmmanager6"
CODEИнициализируйте проект конфигурации:
terraform init
CODE
Проверьте синтаксис конфигурационного файла:
terraform validate
CODEЕсли конфигурация является допустимой, ответ будет содержать сообщение:
Success! The configuration is valid.
CODEПроверьте, что ресурсы будут созданы с нужной конфигурацией:
terraform plan
CODEВывод команды будет содержать список создаваемых ресурсов и их свойства. При необходимости вы можете исправить файл конфигурации и повторить выполнение команды.
Запустите создание ресурсов:
terraform apply
CODEЧтобы подтвердить создание ресурсов, введите yes и нажмите Enter.
Изменение ресурсов
Чтобы изменить созданные ресурсы:
- Измените настройки ресурсов в файле main.tf.
Выполните команду:
terraform apply
CODEЧтобы подтвердить изменение ресурсов, введите yes и нажмите Enter.
Если часть ресурсов уже была создана, Terraform не будет пересоздавать их.
Удаление ресурсов
Чтобы удалить созданные ресурсы, выполните команду:
terraform destroy
После выполнения команды в терминале будет выведен список удаляемых ресурсов. Чтобы подтвердить удаление, введите yes и нажмите Enter.
Обратите внимание!
После выполнения этой команды восстановление ресурсов невозможно.