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 { "": { "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] }