diff --git a/terraform/vmware/main.tf b/terraform/vmware/main.tf index 90fb1e5..67b6d9b 100644 --- a/terraform/vmware/main.tf +++ b/terraform/vmware/main.tf @@ -1,34 +1,68 @@ +# --- Подключение к 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 # Отключить проверку SSL сертификата + allow_unverified_ssl = true } -# --- Сбор данных о существующей инфраструктуре --- -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 -} +# --- 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" { @@ -37,12 +71,10 @@ resource "vsphere_virtual_machine" "vm" { 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 @@ -60,19 +92,27 @@ resource "vsphere_virtual_machine" "vm" { clone { template_uuid = data.vsphere_virtual_machine.template.id - # Настройка ОС (Customization) - # ВАЖНО: Для работы customization в шаблоне должен быть установлен open-vm-tools или perl + # Настройка ОС для WINDOWS customize { - linux_options { - host_name = "${var.vm_name_prefix}-${count.index + 1}" - domain = "local.domain" # Замените на свой домен + 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 { - ipv4_address = null # null означает DHCP - ipv4_netmask = null - # Если нужен статический IP, логика будет сложнее + # Берем 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 } \ No newline at end of file