Files
sless/examples/PG_TEST/postgres_extra.tf11
T
Repinoid 6dc2dc69ba IoT MVP: архитектура, план реализации, лог рассуждений
- Определена архитектура managed IoT service
- Согласовано решение: RabbitMQ (MVP), потом Kafka; EMQX + CRD контроллер
- Создан подробный план для Sonnet (doc/iot-mvp-plan.md)
- Добавлено правило в copilot-instructions: лог мышления в doc/thinking/ по датам
- Полный ход рассуждений в doc/thinking/2026-04-04.md

Ключевые решения:
- IoT код в iot/ (легко вынести потом)
- CRD IoTDevice + контроллер (как все остальное в sless)
- EMQX HTTP Auth Backend для динамической аутентификации устройств
- Архитектура broker-agnostic (легко переключить на Kafka)
- Terraform: расширяем текущий provider (sless_iot_device ресурс)
2026-04-04 08:34:14 +03:00

57 lines
3.1 KiB
Plaintext

// 2026-04-01 — postgres_extra.tf: дополнительные пользователи и базы данных для lifecycle-тестов.
//
// ВАЖНО: ресурсы создаются строго последовательно через depends_on.
// Параллельное создание нескольких пользователей в одном инстансе вызывает
// ошибки API ("Секрет не был создан", "key doesn't exist") — race condition на стороне Nubes.
//
// ИЗВЕСТНОЕ ОГРАНИЧЕНИЕ: если apply упал в середине создания пользователя —
// этот пользователь может "зависнуть" в промежуточном состоянии в Nubes API.
// adopt_existing_on_create не спасает. Решение: использовать имена без истории,
// либо ждать очистки на стороне Nubes.
// ── Пользователь 1 ───────────────────────────────────────────────────────────
// Первый в extra-цепочке. Ждёт pg_test_db (postgres.tf).
resource "nubes_postgres_user" "test_extra_user1" {
postgres_id = nubes_postgres.pg_test_instance.id
username = "test_eu1"
role = "ddl_user"
adopt_existing_on_create = true
# Ждём pg_test_db — иначе параллельный старт с созданием БД ломает API.
depends_on = [nubes_postgres_database.pg_test_db]
}
// ── Пользователь 2 ───────────────────────────────────────────────────────────
resource "nubes_postgres_user" "test_extra_user2" {
postgres_id = nubes_postgres.pg_test_instance.id
username = "test_eu2"
role = "ddl_user"
adopt_existing_on_create = true
depends_on = [nubes_postgres_user.test_extra_user1]
}
// ── База данных 1 (owner = test_eu1) ─────────────────────────────────────────
resource "nubes_postgres_database" "test_extra_db1" {
postgres_id = nubes_postgres.pg_test_instance.id
db_name = "test_edb1"
db_owner = nubes_postgres_user.test_extra_user1.username
adopt_existing_on_create = true
depends_on = [nubes_postgres_user.test_extra_user2]
}
// ── База данных 2 (owner = test_eu2) ─────────────────────────────────────────
resource "nubes_postgres_database" "test_extra_db2" {
postgres_id = nubes_postgres.pg_test_instance.id
db_name = "test_edb2"
db_owner = nubes_postgres_user.test_extra_user2.username
adopt_existing_on_create = true
depends_on = [nubes_postgres_database.test_extra_db1]
}