Создана папка (без .terraform/state/lock — это состояние dev). Изменены параметры: - versions.tf: nubes-dev/nubes 2.0.1 -> nubes-test/nubes 3.0.0; - variables.tf: api_endpoint -> lk-api-gateway-test.ngcloud.ru; - terraform.tfvars: organization=NaeelOrg (найдена через API, svc 19), ip_count=10 (в test на орге уже выделено 10 IP), storage SSD (в test vDC строят на SSD); - shturval.tf: shturval-test1 / shturval-test-01 / workers-shturval-test. Коллизии проверены: в test заняты naeel-vdc, 'VDC для кластера iot-naeel', naeel_vc_nsxt, 'Edge для кластера IOT naeel', 'Кластер Kubernetes [iot-naeel]' — наши имена (fullpipe-vdc/-edge/-vapp-02, web02, shturval-test1) свободны. Проверено: terraform init (3.0.0), fmt -check OK, validate Success, plan = 7 to add / 0 change / 0 destroy. apply НЕ запускался. Документация: HISTORY/2026-10-01_test_stand_fpipegmail.md
61 lines
2.5 KiB
Terraform
61 lines
2.5 KiB
Terraform
# =============================================================================
|
|
# Ресурсы-модификаторы (операции modify, которых нет в create-схеме ресурсов)
|
|
#
|
|
# Порядок строго такой:
|
|
# орга (создана вручную в ЛК)
|
|
# -> nubes_vc_vdc.vdc
|
|
# -> nubes_vc_nsxt.edge
|
|
# -> nubes_vc_org_ip_allocation (выделение внешних IP на орге)
|
|
# -> nubes_vc_nsxt_snat (SNAT на эдже этим ipSpace)
|
|
#
|
|
# Почему аллокация ПОСЛЕ эджа: платформа строит список ipSpace из состояния
|
|
# `job.vcd.networkProvider` / `job.vcd.providerGateway`, то есть требует уже
|
|
# созданный vDC и Edge. Иначе modify на орге падает
|
|
# («Can't cast Complex Object Type Struct to String»).
|
|
# =============================================================================
|
|
|
|
# 1. Внешние IP на организации (modify: vIPConfigure, массив перезаписывается целиком)
|
|
resource "nubes_vc_org_ip_allocation" "org_ip" {
|
|
organization = var.organization
|
|
|
|
vip_configure = jsonencode([
|
|
{
|
|
name = var.ip_space_name
|
|
count = var.ip_count
|
|
}
|
|
])
|
|
|
|
# true = «заморозка»: destroy не трогает квоту внешних IP (кластер Штурвала держит
|
|
# адреса, опустить count ниже занятых платформа не даёт). Для полного удаления — false
|
|
# (и только после удаления кластера).
|
|
keep_on_destroy = true
|
|
|
|
depends_on = [nubes_vc_nsxt.edge]
|
|
}
|
|
|
|
# 2. SNAT на эдже (modify: ipSpaceName)
|
|
resource "nubes_vc_nsxt_snat" "snat" {
|
|
nsxt_uid = nubes_vc_nsxt.edge.id
|
|
ip_space_name = var.ip_space_name
|
|
|
|
# true = «заморозка»: destroy не выключает SNAT на эдже. Для полного удаления — false.
|
|
keep_on_destroy = true
|
|
|
|
# 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
|
|
}
|