0

VMware и terraform

08.09.2023

рассмотрим небольшой пример, где мы опишем в конфигурационных файлах и создадим две виртуальные машины в дата центре VMware vCenter. Буду предполагать, что terraform уже установлен у Вас на управляющем компьютере и мы сосредоточимся именно на написании необходимой конфигурации. В первую очередь создадим рабочую директорию, где у нас будут собраны все необходимые файлы. Именно из этой дирректории мы будем запускать различные команды terraform для их выполнения.

Певый файл, в данной директории будет main.tf, в котором будут описаны свойства подключения к vSphere, а также ресурсы vSphere, которые необходимы для наших виртуалных машин. Реальный пример такого файла представлен ниже.

provider "vsphere" {
  user           = "${var.vsphere_user}"
  password       = "${var.vsphere_password}"
  vsphere_server = "${var.vsphere_server}"
 
  allow_unverified_ssl = true
}
 
data "vsphere_datacenter" "dc" {
  name = "MyDC"
}
 
data "vsphere_datastore" "datastore" {
  name          = "Datastore1"
  datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
 
data "vsphere_compute_cluster" "cluster" {
  name          = "MainCluster"
  datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
 
data "vsphere_network" "network" {
  name          = "public"
  datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
 
data "vsphere_virtual_machine" "template" {
  name          = "BaseTemplate-v.2.0"
  datacenter_id = "${data.vsphere_datacenter.dc.id}"

В файле main.tf в самом начале мы описали переменные, которые используются для подключения к система vSphere. Далее идет декларирование реальных ресурсов, которые задействованы в системе vSpehre. В данном примере это название виртуального дата центра VMware, название датастора, на котором будут храниться данные наших виртуалок, а также имена кластера, виртуальной сети и шаблона ВМ, который будет задействован при создании новых машин.

Теперь нам нужно создать отдельный файл variables.tf, в котором мы задекларируем переменные, используемые в нашем примере. Эти переменные — vsphere_user, vsphere_password, vsphere_server. Содержимое данного файла представлено ниже.

variable "vsphere_user" {}
variable "vsphere_password" {}
variable "vsphere_server" {}

Также создадим отдельный файл, который должен называться terraform.tfvars. В нем мы определяем уже конкретные значения переменных, которые были ранее задекларированы в файле variables.tf.

vsphere_user= "administrator@vsphere.local"
vsphere_password= "Some@Password1234"
vsphere_server= "192.168.1.100"

Теперь подготовим файл vm.tf, в котором опишем две виртуальные машины, которые будут запущены в процессе работы terraform. При описании свойств виртуальных машин, мы будем использовать переменные инфраструктуры, которые до этого определили. Также в terraform есть возможность задать такие настройки виртуальной машины, как ip адрес, хостнейм и DNS. Ниже представлен полный файл с конфигурацией этих виртуальных машин.

resource "vsphere_virtual_machine" "vm1" {
  name             = "testvm01"
  resource_pool_id = "${data.vsphere_compute_cluster.cluster.resource_pool_id}"
  datastore_id     = "${data.vsphere_datastore.datastore.id}"
  folder = "/MyDC/vm/TestVM"
 
  num_cpus = 2
  memory   = 4096
  guest_id = "${data.vsphere_virtual_machine.template.guest_id}"
 
  scsi_type = "${data.vsphere_virtual_machine.template.scsi_type}"
 
  network_interface {
    network_id   = "${data.vsphere_network.network.id}"
    adapter_type = "${data.vsphere_virtual_machine.template.network_interface_types[0]}"
  }
 
  disk {
    label            = "disk0"
    size             = "${data.vsphere_virtual_machine.template.disks.0.size}"
    eagerly_scrub    = "${data.vsphere_virtual_machine.template.disks.0.eagerly_scrub}"
    thin_provisioned = "${data.vsphere_virtual_machine.template.disks.0.thin_provisioned}"
  }
 
  clone {
    template_uuid = "${data.vsphere_virtual_machine.template.id}"
 
    customize {
      linux_options {
        host_name = "testvm01"
        domain    = "company.com"
      }
      dns_server_list     = ["10.0.0.53", "10.0.53.53"]
      network_interface {
        ipv4_address = "10.0.0.101"
        ipv4_netmask = 24
      }
 
      ipv4_gateway = "10.0.0.1"
    }
  }
}
 
resource "vsphere_virtual_machine" "vm2" {
  name             = "testvm02"
  resource_pool_id = "${data.vsphere_compute_cluster.cluster.resource_pool_id}"
  datastore_id     = "${data.vsphere_datastore.datastore.id}"
  folder = "/MyDC/vm/TestVM"
 
  num_cpus = 2
  memory   = 4096
  guest_id = "${data.vsphere_virtual_machine.template.guest_id}"
 
  scsi_type = "${data.vsphere_virtual_machine.template.scsi_type}"
 
  network_interface {
    network_id   = "${data.vsphere_network.network.id}"
    adapter_type = "${data.vsphere_virtual_machine.template.network_interface_types[0]}"
  }
 
  disk {
    label            = "disk0"
    size             = "${data.vsphere_virtual_machine.template.disks.0.size}"
    eagerly_scrub    = "${data.vsphere_virtual_machine.template.disks.0.eagerly_scrub}"
    thin_provisioned = "${data.vsphere_virtual_machine.template.disks.0.thin_provisioned}"
  }
 
  clone {
    template_uuid = "${data.vsphere_virtual_machine.template.id}"
 
    customize {
      linux_options {
        host_name = "testvm02"
        domain    = "company.com"
      }
      dns_server_list     = ["10.0.0.53", "10.0.53.53"]
      network_interface {
        ipv4_address = "10.0.0.102" 
        ipv4_netmask = 24
      }
 
      ipv4_gateway = "10.0.0.1"
    }
  }
}  

Когда все необходимые файлы созданы, пришло время для запуска terraform. Мы будем использовать 3 команды.

# terraform init# terraform plan# terraform apply

Так с помощью команды terraform init произойдет инициализация terraform и загрузка провайдера vsphere для связи с системой VMware. Команда terraform plan проанализирует текущее состояние системы и то, каков будет результат и изменения в случае полноценного выполнения заданных инструкций. Ну а уже с помощью terraform apply мы передадим инструкции в vCenter, и произойдет создание запланированных нами виртуальных машин.

Заключение

В данной статье приводится пример реального использования terraform для управления виртуализированной инфраструктурой. Лично для меня такой подход стал уже нормой и необходимостью в повседневной работе. Он позволяет прилично экономить время на рутинных операциях. И что самое главное, инструмент унифицированный и позволяет работать, как с различными системами виртуализации, так и с облачной инфраструктурой.

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

Previous Story

Redis Server on CentOS 9/AlmaLinux 9 / RHEL 9

Next Story

Kластер Kubernetes с помощью Kubeadm

Latest from Blog

RouterOS/MikroTik на Debian

RouterOS — операционная система, основанная на ядре Linux, предназначенная для маршрутизации, брандмауэра, работы с VPN как сервером и клиентом, а также функционирования в качестве точки беспроводного доступа. Эта система может действовать в роли

How to Install Proxmox Virtual Environment on Debian 11

Introduction Proxmox Virtual Environment is an open-source virtualization management program. It provides a single platform to manage services and functions like KVM Hypervisor, Linux Containers (LXC), storage & networking. In addition, it

Настройка Wireguard VPN на своем сервере

Настройка серверной части После успешного подключения я напишу несколько команд и описание того что они производят для понимания процесса: Обновляем список пакетов в репозиториях apt update Обновим сами пакеты apt upgrade -y

Установка Zabbix 7 c NGINX + PostgreSQL + TimescaleDB на Ubuntu Server или Debian

Сервер Zabbix предполагает достаточную вариативность в выборе СУБД и веб-сервера, поэтому многое тут будет зависеть от персональных предпочтений. Однако расширение TimescaleDB позволяет поддерживать высокий уровень производительности и масштабирования при работе с временными

Настройка простого беспроводного репитера на устройстве MikroTik

При развертывании беспроводных сетей достаточно часто возникают ситуации, когда в некоторых местах квартиры или офиса мощность Wi-Fi сигнала недостаточна для уверенной работы. Конечно, наиболее действенным решением является создание централизованно управляемой сети и
Go toTop