Skip to content

Ресурсы-модификаторы: внешние IP организации и SNAT на шлюзе

Два ресурса работают с уже существующими услугами:

  • nubes_vc_org_ip_allocation — выделяет внешние IP на организации;
  • nubes_vc_nsxt_snat — включает SNAT на сетевом шлюзе периметра.

Эти параметры нельзя задать при создании услуги обычным ресурсом, поэтому они вынесены в отдельные ресурсы: так вся цепочка поднимается одним apply и в правильном порядке.

Оба ресурса проверены живым прогоном: создание, проверка состояния в ЛК и удаление.

Полный рабочий пример (vDC + Edge + IP + SNAT + vApp + ВМ + Штурвал) — на странице «Как развернуть цепочку: vDC → Edge → внешние IP → SNAT → vApp → ВМ → Штурвал», файлы — в репозитории tf_examples, папка fullpipe_chain.

nubes_vc_org_ip_allocation — внешние IP на организации

Атрибут Тип Описание
organization string, обязательный Организация: название услуги из ЛК или её UUID
vip_configure string (JSON), обязательный Сколько IP выделить: [{"name":"internet-ipv4-v1","count":"3"}]. count — строкой. Для Штурвала нужно не меньше 3 адресов, ещё один — если у ВМ будет внешний адрес
keep_on_destroy bool, по умолчанию false false — при удалении квота обнуляется; true — остаётся как есть
resource "nubes_vc_org_ip_allocation" "this" {
  organization = "organ"   # название услуги из ЛК

  vip_configure = jsonencode([
    { name = "internet-ipv4-v1", count = "3" }
  ])

  keep_on_destroy = false
}

Как это работает:

  • массив vip_configure записывается целиком, поэтому ресурс владеет всей аллокацией организации: если нужно поменять количество — меняйте значение и делайте apply;
  • снять аллокацию через пустой массив нельзя — для этого удалите ресурс (terraform destroy -target=nubes_vc_org_ip_allocation.this), тогда отправится запрос с count = "0";
  • считайте потребителей адресов: кластер Штурвал держит 3 адреса (API и Ingress), а ВМ с внешним адресом (ip_space_name = "internet-ipv4-v1") занимает ещё один — итого count = "4". Адреса освобождаются только после удаления потребителя: suspend их не снимает.

nubes_vc_nsxt_snat — SNAT на шлюзе

Атрибут Тип Описание
nsxt_uid string, обязательный UUID услуги «Сетевой шлюз периметра (Edge)»
ip_space_name string, обязательный Имя ipSpace для внешнего IP; значение no-needed выключает SNAT
keep_on_destroy bool, по умолчанию false false — при удалении SNAT выключается; true — остаётся как есть
resource "nubes_vc_nsxt_snat" "this" {
  nsxt_uid      = nubes_vc_nsxt.edge.id   # UUID шлюза из этого же конфига
  ip_space_name = "internet-ipv4-v1"

  depends_on = [nubes_vc_org_ip_allocation.this]
}

Если шлюз создаётся в этом же конфиге, UUID искать вручную не нужно — используйте nubes_vc_nsxt.edge.id. Если шлюз уже существует, UUID виден в карточке услуги в ЛК.

Имя ipSpace должно быть сначала выделено на организации, поэтому у ресурса есть depends_on на аллокацию IP.

Импорт

Если услуга уже настроена (например, в ЛК вручную), ресурс можно подключить к Terraform:

terraform import nubes_vc_org_ip_allocation.this organ          # организация: имя или UUID
terraform import nubes_vc_nsxt_snat.this <uuid услуги шлюза>    # UUID из карточки услуги в ЛК