terraform { required_providers { vsphere = { source = "hashicorp/vsphere" version = "~> 2.4" } } } # --- Креды vCenter (передаются скрыто через Environment) --- variable "vsphere_user" {} variable "vsphere_password" {} variable "vsphere_server" {} # --- Переменные, которые будут запрашиваться через Survey --- variable "vm_ip" {} variable "vm_gateway" {} variable "vm_cpu" {} variable "vm_ram" {} variable "vm_disk_size" {} variable "vsphere_datacenter" {} variable "vsphere_datastore" {} variable "vsphere_pool" {} variable "vsphere_network" {} variable "vsphere_template" { default = "debian13-template" } # --- Настройка провайдера --- provider "vsphere" { user = var.vsphere_user password = var.vsphere_password vsphere_server = var.vsphere_server allow_unverified_ssl = true } # --- Поиск ресурсов в vCenter --- 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_resource_pool" "pool" { name = var.vsphere_pool 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.vsphere_template datacenter_id = data.vsphere_datacenter.dc.id } # --- Создание ВМ --- resource "vsphere_virtual_machine" "npm_vm" { name = "npm-${replace(var.vm_ip, ".", "-")}" # Имя в vCenter будет, например: npm-192-168-1-50 resource_pool_id = data.vsphere_resource_pool.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 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 = true } clone { template_uuid = data.vsphere_virtual_machine.template.id customize { linux_options { host_name = "npm-server" domain = "local" } network_interface { ipv4_address = var.vm_ip ipv4_netmask = 23 # При необходимости маску тоже можно вынести в Survey } ipv4_gateway = var.vm_gateway dns_server_list = ["192.168.1.1", "1.1.1.1"] } } }