Ресурсы-модификаторы: внешние 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: