# --- Подключение к vCenter --- variable "vsphere_user" { type = string, sensitive = true } variable "vsphere_password" { type = string, sensitive = true } variable "vsphere_server" { type = string } # --- Инфраструктура --- variable "vsphere_datacenter" { type = string } variable "vsphere_cluster" { type = string } variable "vsphere_datastore" { type = string } variable "vsphere_network" { type = string } # --- Параметры ВМ --- variable "vm_template" { type = string } variable "vm_name_prefix" { type = string default = "DC-2025" # ВАЖНО: Имя компьютера в Windows (NetBIOS) не должно превышать 15 символов! } variable "vm_count" { type = number, default = 1 } variable "vm_cpu" { type = number, default = 4 } # Для DC лучше 4 vCPU variable "vm_ram" { type = number, default = 8192 } # Для DC 2025 лучше 8 ГБ variable "vm_disk_size" { type = number, default = 60 } # --- Специфично для Windows и Контроллера домена --- variable "admin_password" { type = string description = "Пароль локального Администратора (нужен для входа Ansible)" sensitive = true } variable "vm_ips" { type = list(string) description = "Список статических IP для серверов (по количеству vm_count)" } variable "vm_netmask" { type = number description = "Маска подсети (например, 24)" default = 24 } variable "vm_gateway" { type = string description = "IP-адрес шлюза" } variable "primary_dns" { type = list(string) description = "IP текущего контроллера домена (обязательно для ввода в домен)" } # --- Провайдер --- provider "vsphere" { user = var.vsphere_user password = var.vsphere_password vsphere_server = var.vsphere_server allow_unverified_ssl = true } # --- Data Sources --- 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 # Настройка ОС для WINDOWS customize { windows_options { computer_name = "${var.vm_name_prefix}-${count.index + 1}" admin_password = var.admin_password # Задаем пароль админа для Ansible # timezone = 145 # Опционально: часовой пояс (145 = Moscow Standard Time) } network_interface { # Берем IP из списка по индексу создаваемой машины ipv4_address = var.vm_ips[count.index] ipv4_netmask = var.vm_netmask } ipv4_gateway = var.vm_gateway dns_server_list = var.primary_dns # Указываем на текущий Контроллер Домена } } } # --- Вывод IP-адресов --- output "deployed_vm_ips" { value = vsphere_virtual_machine.vm[*].default_ip_address }