terraform { required_providers { nubes = { source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes" version = "2.0.13" } } } provider "nubes" { api_token = var.api_token api_endpoint = "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc" } variable "api_token" { type = string sensitive = true description = "Nubes API token" } # Организация и шлюз создаются один раз вручную в ЛК и адресуются по uid. variable "org_uid" { type = string description = "UUID услуги «Организация в Cloud Director»" } variable "nsxt_uid" { type = string description = "UUID услуги «Сетевой шлюз периметра (Edge)»" } variable "ip_space_name" { type = string description = "Имя ipSpace для внешнего IP (SNAT)" } variable "ip_count" { type = string default = "3" description = "Сколько внешних IP выделить на организации" } # ============================================================================= # 1. Аллокация внешних IP на организации (modify: vIPConfigure) # # Значение replace-семантики: массив перезаписывается ЦЕЛИКОМ, поэтому этот ресурс # владеет всей аллокацией, а не отдельным элементом. # ============================================================================= resource "nubes_vc_org_ip_allocation" "this" { org_uid = var.org_uid vip_configure = jsonencode([ { name = var.ip_space_name count = var.ip_count } ]) # Не снимать квоту при destroy (по умолчанию false — снимается: count=0). keep_on_destroy = false } # ============================================================================= # 2. SNAT на шлюзе периметра (modify: ipSpaceName) # # Зависит от аллокации: имя ipSpace должно быть выделено на организации. # Значение "no-needed" выключает SNAT. # ============================================================================= resource "nubes_vc_nsxt_snat" "this" { nsxt_uid = var.nsxt_uid ip_space_name = var.ip_space_name keep_on_destroy = false depends_on = [nubes_vc_org_ip_allocation.this] } output "allocated_ip_space" { value = var.ip_space_name description = "ipSpace, выделенный на организации" }