• DevOps
  • Защита информации
  • ИТ-поддержка
  • Создание виртуальной машины в OpenStack через Terraform

    В этой инструкции мы рассмотрим один из вопросов работы с 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}"
    }
    

    В итоге после успешного создания инфраструктуры получим следующий вывод:

    proxmox backup

    Рисунок 1 — Сообщение об успешности операции

    Запуск создания инфраструктуры

    После составления всех необходимых блоков кода, находятся в корневой директории проекта terrform запускаем последовательно команды.

    CLI

    terraform init
    terraform plan
    terraform apply --auto-approve
    
    • Инициализируем папку с проектом, загружаем необходимы модули и провайдеры для работы с инфраструктурой.
    • Запускаем команду, имитирующую создание инфраструктуры, убеждаемся что будет создано все что было запланировано.
    • Запускаем создание инфраструктуры, ключ "--auto-approve" позволяет избежать остановок при создании инфраструктуры для ввода подтверждений..

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

    terraform destroy
    

    Для проверки успешного освобождения ресурсов, переходим в WEB-интерфейс.

    Нужно DevOps-сопровождение? Обращайтесь к нам!

    Не нашли ответа на свой вопрос?
    Содержание

    Есть вопросы?

    Закажите звонок специалиста!

    Есть вопросы?

    Закажите звонок специалиста!
    *нажимая на кнопку, Вы даете согласие на обработку персональных данных