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 ресурс)
This commit is contained in:
@@ -2,6 +2,74 @@
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-01 — PG_TEST: lifecycle ignore_changes для vault_secrets — НЕ РАБОТАЕТ
|
||||
|
||||
### Попытка
|
||||
|
||||
Добавить в `nubes_postgres` блок `lifecycle { ignore_changes = [vault_secrets] }`.
|
||||
|
||||
### Результат
|
||||
|
||||
Terraform выводит предупреждение и игнорирует директиву:
|
||||
> "Including this attribute in ignore_changes has no effect."
|
||||
|
||||
`vault_secrets` — `Computed`-only атрибут (выставляется только провайдером),
|
||||
для таких атрибутов `ignore_changes` не применимо.
|
||||
|
||||
### Механизм проблемы
|
||||
|
||||
При `vault_secrets` "изменённом снаружи" Terraform обновляет `nubes_postgres` in-place,
|
||||
но в плане выставляет `id = (known after apply)`. Дочерние ресурсы с `postgres_id`
|
||||
(ссылка на `nubes_postgres.*.id`) теряют resolved value → форсированный replace.
|
||||
|
||||
### Текущий статус
|
||||
|
||||
Открытая проблема. `lifecycle ignore_changes` убран из конфигурации (не помогает).
|
||||
Рабочий обходной путь на данный момент: запускать `apply` только на чистом state.
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-01 — PG_TEST: depends_on chain вместо параллельного создания
|
||||
|
||||
### Решение
|
||||
|
||||
Все ресурсы `nubes_postgres_user` и `nubes_postgres_database` создаются строго
|
||||
последовательно через явную цепочку `depends_on`:
|
||||
|
||||
```
|
||||
nubes_postgres → pg_test_user → pg_test_db → extra_user1 → extra_user2 → extra_db1 → extra_db2
|
||||
```
|
||||
|
||||
### Почему
|
||||
|
||||
Nubes API (deck-api-test.ngcloud.ru) не поддерживает параллельные операции создания
|
||||
пользователей на одном PG-инстансе — возникает race condition на стороне Vault:
|
||||
конкурентные записи в один Secret дают "Секрет не был создан" / "key doesn't exist".
|
||||
|
||||
Terraform по умолчанию выполняет независимые ресурсы параллельно (degree=10).
|
||||
`depends_on` — единственный способ принудить последовательность без добавления
|
||||
искусственных атрибутов-зависимостей.
|
||||
|
||||
---
|
||||
|
||||
## 2026-04-01 — PG_TEST: роль пользователя — только ddl_user
|
||||
|
||||
### Решение
|
||||
|
||||
В конфигурациях `examples/PG_TEST` используется только роль `ddl_user` для ресурсов
|
||||
`nubes_postgres_user`. Роль `app_user` из конфигурации удалена.
|
||||
|
||||
### Почему
|
||||
|
||||
При создании `nubes_postgres_user` с `role = "app_user"` Nubes API (версия v5.0.51)
|
||||
возвращает ошибку "Секрет для пользователя не был создан" после ~3 минут ожидания.
|
||||
Воспроизводится стабильно. Роль `ddl_user` работает корректно.
|
||||
|
||||
Вывод: `app_user` либо не поддерживается в `nubes_postgres_user`, либо требует
|
||||
другой конфигурации (не задокументированной). До выяснения — только `ddl_user`.
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-30 — Переход на READ-ONLY подход в тестах (v2)
|
||||
|
||||
### Решение
|
||||
|
||||
Reference in New Issue
Block a user