Files
semaphore/terraform/vmware/main.tf

78 lines
2.5 KiB
HCL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
provider "vsphere" {
user = var.vsphere_user
password = var.vsphere_password
vsphere_server = var.vsphere_server
allow_unverified_ssl = true # Отключить проверку SSL сертификата
}
# --- Сбор данных о существующей инфраструктуре ---
data "vsphere_datacenter" "dc" {
name = var.vsphere_datacenter
}
data "vsphere_datastore" "datastore" {
name = var.vsphere_datastore
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_compute_cluster" "cluster" {
name = var.vsphere_cluster
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_network" "network" {
name = var.vsphere_network
datacenter_id = data.vsphere_datacenter.dc.id
}
data "vsphere_virtual_machine" "template" {
name = var.vm_template
datacenter_id = data.vsphere_datacenter.dc.id
}
# --- Создание Виртуальных Машин ---
resource "vsphere_virtual_machine" "vm" {
count = var.vm_count
name = "${var.vm_name_prefix}-${count.index + 1}"
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
datastore_id = data.vsphere_datastore.datastore.id
# Ресурсы
num_cpus = var.vm_cpu
memory = var.vm_ram
guest_id = data.vsphere_virtual_machine.template.guest_id
# Включаем горячее добавление ресурсов (опционально)
cpu_hot_add_enabled = true
memory_hot_add_enabled = true
network_interface {
network_id = data.vsphere_network.network.id
adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
}
disk {
label = "disk0"
size = var.vm_disk_size
thin_provisioned = data.vsphere_virtual_machine.template.disks[0].thin_provisioned
}
clone {
template_uuid = data.vsphere_virtual_machine.template.id
# Настройка ОС (Customization)
# ВАЖНО: Для работы customization в шаблоне должен быть установлен open-vm-tools или perl
customize {
linux_options {
host_name = "${var.vm_name_prefix}-${count.index + 1}"
domain = "local.domain" # Замените на свой домен
}
network_interface {
ipv4_address = null # null означает DHCP
ipv4_netmask = null
# Если нужен статический IP, логика будет сложнее
}
}
}
}