# ============================================================================= # Ресурсы, которые выполняют операции modify над уже созданными услугами. # # Порядок строго такой: # организация (создаётся заранее в ЛК) # -> nubes_vc_vdc.vdc # -> nubes_vc_nsxt.edge # -> nubes_vc_org_ip_allocation (внешние IP на организации) # -> nubes_vc_nsxt_snat (SNAT на шлюзе этим ipSpace) # # Аллокация IP идёт ПОСЛЕ шлюза: платформа строит список доступных ipSpace # только когда vDC и Edge уже созданы. Если поменять порядок — modify упадёт # с ошибкой «Can't cast Complex Object Type Struct to String». # ============================================================================= # 1. Внешние IP на организации. resource "nubes_vc_org_ip_allocation" "org_ip" { # та же организация, что у vDC: название услуги из ЛК или её UUID organization = var.organization # сколько IP выделить: name — имя ipSpace, count — количество (строкой). # массив передаётся целиком, поэтому старые значения перезаписываются vip_configure = jsonencode([ { name = var.ip_space_name count = var.ip_count } ]) # при destroy: false — квота обнуляется (count=0); true — оставить как есть keep_on_destroy = false depends_on = [nubes_vc_nsxt.edge] } # 2. SNAT на шлюзе: внешние адреса для машин. resource "nubes_vc_nsxt_snat" "snat" { # UUID шлюза, созданного выше nsxt_uid = nubes_vc_nsxt.edge.id ip_space_name = var.ip_space_name # при destroy: false — SNAT выключается (no-needed); true — оставить как есть keep_on_destroy = false # ipSpace должен быть уже выделен на организации depends_on = [nubes_vc_org_ip_allocation.org_ip] } output "allocated_org_ip" { description = "Внешние IP, выделенные на организации" value = { organization = var.organization ip_space_name = var.ip_space_name ip_count = var.ip_count } } output "snat_ip_space" { description = "ipSpace, включённый как SNAT на шлюзе" value = nubes_vc_nsxt_snat.snat.ip_space_name }