diff --git a/terraform/vmware/main.tf b/terraform/vmware/main.tf new file mode 100644 index 0000000..90fb1e5 --- /dev/null +++ b/terraform/vmware/main.tf @@ -0,0 +1,78 @@ +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, логика будет сложнее + } + } + } +} \ No newline at end of file