terraform { required_providers { nubes = { source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes" version = "2.0.21" } } } 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" } # Организация и шлюз создаются один раз вручную в ЛК. variable "organization" { type = string description = "Название услуги «Организация в Cloud Director» в ЛК (например: organ). Можно указать и её UUID." } 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 выделить на организации" } # Внешние IP на организации resource "nubes_vc_org_ip_allocation" "this" { # организация из ЛК (имя или 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 } # SNAT на шлюзе: внешние адреса для машин # (при destroy отправляется ipSpaceName = "no-needed", SNAT выключается) resource "nubes_vc_nsxt_snat" "this" { # UUID шлюза (из карточки услуги в ЛК) nsxt_uid = var.nsxt_uid ip_space_name = var.ip_space_name # при destroy: false — SNAT выключается; true — оставить как есть keep_on_destroy = false # ipSpace сначала должен быть выделен на организации depends_on = [nubes_vc_org_ip_allocation.this] } output "allocated_ip_space" { value = var.ip_space_name description = "ipSpace, выделенный на организации" }