Files
tf_provider/TEST_STAND/CRUD/lucee.tf
T
Repinoid 0353ff79e5 stand(TEST/CRUD): пароль БД через try() — первый apply больше не падает
Раньше locals читали пароль напрямую: jsondecode(vault_secrets["users"]).user4crudpg.password.
При первом apply пароля ещё нет (create_user выполняется после создания кластера), поэтому
Terraform падал с «Invalid index ... does not identify an element in this collection value».

Теперь через try(... = ""): на первом apply в env идёт пустая строка и прогон не роняет;
на втором apply пароль уже в Vault, try возвращает настоящее значение, приложения получают верный env.

Комментарии в lucee.tf/flask.tf/nodejs.tf объясняют зачем try и почему два apply.
Проверено: terraform validate — Success; plan — No changes; Exit 0.
2026-10-01 14:23:11 +03:00

69 lines
2.5 KiB
Terraform
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
locals {
pg_host = nubes_postgres.main_pg.state_out_flat["internalMaster"]
pg_user = nubes_postgres_user.crud_user_0.username
# Пароль БД платформа пишет в Vault и отдаёт в vault_secrets["users"] как
# JSON { "<username>": { "password": "..." } }. Но он появляется ТОЛЬКО после
# create_user, а vault_secrets фиксируется ещё на этапе создания самого кластера
# (create_user идёт ПОСЛЕ него). Поэтому при первом apply здесь пароля ещё нет —
# без try() Terraform падает с «Invalid index ... does not identify an element».
# try() даёт пустую строку во время первого apply; на втором apply пароль уже
# есть, и try возвращает настоящее значение. Итого: ресурс поднимается за ДВА apply
# (см. README и docs/curated/postgres/pg_user_db.md).
pg_pass = try(nonsensitive(jsondecode(nubes_postgres.main_pg.vault_secrets["users"]).user4crudpg.password), "")
pg_db = nubes_postgres_database.pg_db.db_name
}
resource "nubes_lucee" "applucee" {
resource_name = local.lucee_resource_name
adopt_existing_on_create = true
startup_configuration = {
resource_realm = var.realm
}
cluster_configuration = {
cpu = local.lucee_cpu
memory = local.lucee_memory
replicas = local.lucee_replicas
}
access_configuration = {
domain = local.lucee_domain
}
app_configuration = {
version = local.lucee_version
git_path = local.lucee_git_path
}
json_env = jsonencode({
TABLE_NAME = local.crud_table_name
testds_class = local.jdbc_class
testds_bundleName = local.jdbc_bundle_name
testds_bundleVersion = local.jdbc_bundle_version
testds_connectionString = "jdbc:postgresql://${local.pg_host}:5432/${local.pg_db}"
testds_username = local.pg_user
testds_password = local.pg_pass
testds_connectionLimit = local.jdbc_conn_limit
testds_liveTimeout = local.jdbc_live_timeout
testds_validate = local.jdbc_validate
PGHOST = local.pg_host
PGPORT = local.pg_port
PGUSER = local.pg_user
PGPASSWORD = local.pg_pass
PGSSLMODE = local.pg_ssl_mode
DATABASE_URL = format(
"postgresql://%s:%s@%s:5432/%s",
local.pg_user,
local.pg_pass,
local.pg_host,
local.pg_db
)
})
depends_on = [nubes_postgres.main_pg]
}