В этой инструкции мы рассмотрим один из вопросов работы с OpenStack через Terraform – установка ВМ (виртуальной машины).
Предварительные требования:
- Установлен Terraform на ПК или сервер, с которого будет осуществляться управление OpenStack.
- Установлен, развернут и корректно функционирует OpenStack.
Получения файла конфигурации подключения
Необходимо загрузить конфигурационный файл подключения clouds.yml. Переходим в web-интерфейс OpenStack, в левой верхней части экрана выбираем пункт API Access.
Далее нажимаем на выпадающий список с названием Download OpenStack RC File и выбираем OpenStack clouds.yaml File.
Содержимое файла clouds.yaml представлено ниже. если необходимо настроить полностью прозрачный вход, необходимо дописать строчку с паролем password.
clouds.yaml
clouds: openstack: auth: auth_url: http://192.168.0.20/identity username: "admin" project_id: 4c1990f9b7004e03ad34909d13c31192 project_name: "demo" user_domain_name: "Default" region_name: "RegionOne" interface: "public" identity_api_version: 3
Подключение файла конфигурации
Файл clouds.yaml необходимо переместить в рабочую директорию проекта Terraform или ~/.config/openstack; /etc/openstack. Необходимо внести изменения в настройку OpenStack провайдера для Terraform, необходимо указать название облака для управления. В файле clouds.yaml название облака “openstack”. Указываем аналогично в terraform.
providers.tf
terraform { required_version = ">= 0.14.0" required_providers { openstack = { source = "terraform-provider-openstack/openstack" version = "~> 1.48.0" } } } provider "openstack" { cloud = "openstack" }
Выше указано примерное содержание файла providers.tf для настройки использования нужного провайдера для terraform и название облака для работы.
Далее описываем план создания инфраструктуры в файле main.tf.
main.tf
resource "openstack_networking_floatingip_v2" "fip_1" { pool = "public" } resource "openstack_compute_keypair_v2" "my-cloud-key" { name = "my-key" public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDMSnGsYm/CHFo8fXPIUNziVtUGnyO8RudeX+18kG+7QQKWlsMVTkzI5tfTTJaemYaQmWQrwYZb7UfU9hUKB/PpYQ6AKqoe5r+pEW88rjvyWiFfCR6l+MF0nnVopsGPnPjpCdaLREugaCtOSSYC4nKJRB> } resource "openstack_compute_instance_v2" "test" { name = "test-vm" image_name = "focal-server" flavor_name = "m1.medium" key_pair = "${openstack_compute_keypair_v2.my-cloud-key.name}" security_groups = ["default"] network { name = "shared" } } resource "openstack_compute_floatingip_associate_v2" "fip_1" { floating_ip = "${openstack_networking_floatingip_v2.fip_1.address}" instance_id = "${openstack_compute_instance_v2.test.id}" }
- Блок кода отвечает за выделение floating-ip для использования в создаваемой виртуальной машине.
- Блок кода отвечает за создание переменной с ssh ключом для подключения к виртуальной машине.
- Создаем виртуальную машину: Название виртуальной машины “test-vm”, используемый образ “focal-server”, конфигурация виртуальный машины (CPU, RAM, DISK) “m1.medium’, далее присваиваем виртуальной машине ключ ssh, определяем группу безопасности для сети.
- Присваиваем созданный floating-ip к созданной виртуальной машине.
Для использования результатов создание виртуальной машины далее, например, для передачи следующим скриптам информации об IP-адресе, имени виртуальной машины и т.д. создается отдельный блок кода output.tf.
output.tf
output "vm-name" { value = "${openstack_compute_instance_v2.test.name}" } output "vm-id" { value = "${openstack_compute_instance_v2.test.id}" } output "vm-ip" { value = "${openstack_compute_instance_v2.test.network.0.fixed_ip_v4}" } output "vm-floating-ip" { value = "${openstack_networking_floatingip_v2.fip_1.address}" }
В итоге после успешного создания инфраструктуры получим следующий вывод:
Запуск создания инфраструктуры
После составления всех необходимых блоков кода, находятся в корневой директории проекта terrform запускаем последовательно команды.
CLI
terraform init terraform plan terraform apply --auto-approve
- Инициализируем папку с проектом, загружаем необходимы модули и провайдеры для работы с инфраструктурой.
- Запускаем команду, имитирующую создание инфраструктуры, убеждаемся что будет создано все что было запланировано.
- Запускаем создание инфраструктуры, ключ “–auto-approve” позволяет избежать остановок при создании инфраструктуры для ввода подтверждений..
После выполнения инфраструктурой своего назначения, необходимо освободить используемые ресурсы и удалить инфраструктуры командой:
terraform destroy
Для проверки успешного освобождения ресурсов, переходим в WEB-интерфейс.
Нужно DevOps-сопровождение? Обращайтесь к нам!