58 lines
2.1 KiB
Terraform
58 lines
2.1 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" {
|
|
org_uid = var.org_uid
|
|
|
|
vip_configure = jsonencode([
|
|
{
|
|
name = var.ip_space_name
|
|
count = var.ip_count
|
|
}
|
|
])
|
|
|
|
# false = при destroy отправить обратный modify с count=0 (квота обнулится)
|
|
keep_on_destroy = false
|
|
|
|
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
|
|
|
|
keep_on_destroy = false
|
|
|
|
# ipSpace должен быть уже выделен на организации
|
|
depends_on = [nubes_vc_org_ip_allocation.org_ip]
|
|
}
|
|
|
|
output "allocated_org_ip" {
|
|
description = "Выделено внешних IP на организации"
|
|
value = {
|
|
org_uid = var.org_uid
|
|
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
|
|
}
|