From 5e0df46dc8e35ef783e2fd68b3967afebce77afb Mon Sep 17 00:00:00 2001 From: Repinoid Date: Thu, 1 Oct 2026 10:45:15 +0300 Subject: [PATCH] =?UTF-8?q?stand(DEV/CRUD):=20=D0=BF=D1=80=D0=B8=D0=B2?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B8=20=D0=BA=20=D0=B2=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D0=B0=D0=BD=D1=82=D1=83=20TEST=20=E2=80=94=20adopt=5Fexisting?= =?UTF-8?q?=5Fon=5Fcreate,=20=D0=B1=D0=B5=D0=B7=20git=5Frevision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - lucee/flask/nodejs: добавлен adopt_existing_on_create = true (усыновлять существующий инстанс вместо падения с «ресурс с таким именем уже существует») - удалены git_revision и одноимённые locals (в TEST их нет) - git_path: Nail -> terraform (проверено по HTTP: /Nail/ отдаёт 301 на /terraform/) - terraform.tfvars.example: комментарий s3_user_uid = UUID S3-пользователя Имена ресурсов и домены оставлены dev-своими (уникальными). realm dev = k8s-3-sandbox-nubes-ru. Проверка API dev-стенда (/instances?isDeleted=false): 9 инстансов, ни одного под сервисы 89 flask / 94 lucee / 95 nodejs и PostgreSQL; поиск crud|pg4|lucee|flask|nodejs -> 0. Коллизий нет. НЕ исправлено (не моя правка, есть и в HEAD): terraform validate падает на nubes_nodejs.json_env — в спеке dev-стенда у сервиса 95 объявлен обязательный sub_param DB_PASS, поэтому схема требует объект { db_pass }, а конфигурация передаёт строку jsonencode(). --- DEV_STAND/CRUD/flask.tf | 18 +++--- DEV_STAND/CRUD/locals.tf | 75 ++++++++++++------------- DEV_STAND/CRUD/lucee.tf | 8 +-- DEV_STAND/CRUD/nodejs.tf | 17 +++--- DEV_STAND/CRUD/terraform.tfvars.example | 2 +- 5 files changed, 59 insertions(+), 61 deletions(-) diff --git a/DEV_STAND/CRUD/flask.tf b/DEV_STAND/CRUD/flask.tf index 70f1b5f..65eaa8f 100644 --- a/DEV_STAND/CRUD/flask.tf +++ b/DEV_STAND/CRUD/flask.tf @@ -12,6 +12,8 @@ locals { resource "nubes_flask" "appflask" { resource_name = local.flask_resource_name + adopt_existing_on_create = true + startup_configuration = { resource_realm = var.realm } @@ -32,16 +34,14 @@ resource "nubes_flask" "appflask" { health_path = "/" } - git_revision = local.flask_git_revision - json_env = jsonencode({ - TABLE_NAME = local.crud_table_name - PGHOST = local.flask_pg_host - PGPORT = local.pg_port - PGUSER = local.flask_pg_user - PGPASSWORD = local.flask_pg_pass - PGDATABASE = local.flask_pg_db - PGSSLMODE = local.pg_ssl_mode + TABLE_NAME = local.crud_table_name + PGHOST = local.flask_pg_host + PGPORT = local.pg_port + PGUSER = local.flask_pg_user + PGPASSWORD = local.flask_pg_pass + PGDATABASE = local.flask_pg_db + PGSSLMODE = local.pg_ssl_mode }) depends_on = [nubes_postgres.main_pg] diff --git a/DEV_STAND/CRUD/locals.tf b/DEV_STAND/CRUD/locals.tf index aa535f7..628a6fe 100644 --- a/DEV_STAND/CRUD/locals.tf +++ b/DEV_STAND/CRUD/locals.tf @@ -9,67 +9,64 @@ locals { # PostgreSQL — общая БД для всех трёх приложений # ═══════════════════════════════════════════════════════════════════════════ - pg_resource_name = "pg4crud" # имя ресурса в Nubes - pg_cpu = 500 # CPU в millicores (500 = 0.5 ядра) - pg_memory = 512 # память в MB - pg_replicas = 1 # количество реплик - pg_disk = 10 # диск в GB - pg_version = "17" # версия PostgreSQL - pg_retain = 14 # дней хранения бэкапов - pg_schedule = "0 0 * * *" # cron расписание бэкапов (ежедневно в полночь) - pg_timeout = "11m" # таймаут операций create/modify + pg_resource_name = "pg4crud" # имя ресурса в Nubes + pg_cpu = 500 # CPU в millicores (500 = 0.5 ядра) + pg_memory = 512 # память в MB + pg_replicas = 1 # количество реплик + pg_disk = 10 # диск в GB + pg_version = "17" # версия PostgreSQL + pg_retain = 14 # дней хранения бэкапов + pg_schedule = "0 0 * * *" # cron расписание бэкапов (ежедневно в полночь) + pg_timeout = "11m" # таймаут операций create/modify # ═══════════════════════════════════════════════════════════════════════════ # PostgreSQL — пользователь и база данных # ═══════════════════════════════════════════════════════════════════════════ - pg_username = "user4crudpg" # имя пользователя БД - pg_role = "ddl_user" # роль (ddl_user = может создавать таблицы) - pg_db_name = "db4crudpg" # имя базы данных + pg_username = "user4crudpg" # имя пользователя БД + pg_role = "ddl_user" # роль (ddl_user = может создавать таблицы) + pg_db_name = "db4crudpg" # имя базы данных # ═══════════════════════════════════════════════════════════════════════════ # Lucee — CFML-приложение (сервис 94) # ═══════════════════════════════════════════════════════════════════════════ - lucee_git_revision = "94d6677" # коммит/тег в git (менять для редеплоя) - lucee_resource_name = "luceecrud" # имя ресурса в Nubes - lucee_domain = "tfluceedev" # домен (станет tfluceedev.luceek8s.dev.nubes.ru). Имя должно быть уникальным — заменяйте на своё! - lucee_version = "5.4" # версия Lucee (CFML engine) - lucee_git_path = "https://gitea.services.ngcloud.ru/Nail/tfluceecrud.git" - lucee_cpu = 300 # CPU в millicores - lucee_memory = 512 # память в MB - lucee_replicas = 1 # количество реплик + lucee_resource_name = "luceecrud" # имя ресурса в Nubes + lucee_domain = "tfluceedev" # домен (станет tfluceedev.luceek8s.dev.nubes.ru). Имя должно быть уникальным — заменяйте на своё! + lucee_version = "5.4" # версия Lucee (CFML engine) + lucee_git_path = "https://gitea.services.ngcloud.ru/terraform/tfluceecrud.git" + lucee_cpu = 300 # CPU в millicores + lucee_memory = 512 # память в MB + lucee_replicas = 1 # количество реплик # ═══════════════════════════════════════════════════════════════════════════ # Таблица CRUD — общая для всех трёх приложений # ═══════════════════════════════════════════════════════════════════════════ - crud_table_name = "crud_items" # имя таблицы (TABLE_NAME в env) + crud_table_name = "crud_items" # имя таблицы (TABLE_NAME в env) # ═══════════════════════════════════════════════════════════════════════════ # Flask — Python-приложение (сервис 89) # ═══════════════════════════════════════════════════════════════════════════ - flask_git_revision = "34c030c" # коммит/тег в git (менять для редеплоя) - flask_resource_name = "flaskcrud" # имя ресурса в Nubes - flask_domain = "tfflaskdev" # домен (станет tfflaskdev.pythonk8s.dev.nubes.ru). Имя должно быть уникальным — заменяйте на своё! - flask_git_path = "https://gitea.services.ngcloud.ru/Nail/tfflaskcrud.git" - flask_cpu = 300 # CPU в millicores - flask_memory = 512 # память в MB - flask_replicas = 1 # количество реплик + flask_resource_name = "flaskcrud" # имя ресурса в Nubes + flask_domain = "tfflaskdev" # домен (станет tfflaskdev.pythonk8s.dev.nubes.ru). Имя должно быть уникальным — заменяйте на своё! + flask_git_path = "https://gitea.services.ngcloud.ru/terraform/tfflaskcrud.git" + flask_cpu = 300 # CPU в millicores + flask_memory = 512 # память в MB + flask_replicas = 1 # количество реплик # ═══════════════════════════════════════════════════════════════════════════ # Node.js — Express-приложение (сервис 95) # ═══════════════════════════════════════════════════════════════════════════ - nodejs_git_revision = "1c646c6" # коммит/тег в git (менять для редеплоя) nodejs_resource_name = "nodejscrud" # имя ресурса в Nubes nodejs_domain = "tfnodejsdev" # домен (станет tfnodejsdev.<суффикс>.dev.nubes.ru). Имя должно быть уникальным — заменяйте на своё! - nodejs_git_path = "https://gitea.services.ngcloud.ru/Nail/tfnodejscrud.git" - nodejs_cpu = 300 # CPU в millicores - nodejs_memory = 512 # память в MB - nodejs_replicas = 1 # количество реплик - nodejs_timeout = "15m" # таймаут операций create/modify + nodejs_git_path = "https://gitea.services.ngcloud.ru/terraform/tfnodejscrud.git" + nodejs_cpu = 300 # CPU в millicores + nodejs_memory = 512 # память в MB + nodejs_replicas = 1 # количество реплик + nodejs_timeout = "15m" # таймаут операций create/modify # ═══════════════════════════════════════════════════════════════════════════ # JDBC — параметры подключения Lucee к PostgreSQL @@ -78,14 +75,14 @@ locals { jdbc_class = "org.postgresql.Driver" jdbc_bundle_name = "org.postgresql.jdbc" jdbc_bundle_version = "42.6.0" - jdbc_conn_limit = "5" # макс. количество соединений - jdbc_live_timeout = "15" # таймаут неактивного соединения (минут) - jdbc_validate = "false" # валидация соединения при выдаче из пула + jdbc_conn_limit = "5" # макс. количество соединений + jdbc_live_timeout = "15" # таймаут неактивного соединения (минут) + jdbc_validate = "false" # валидация соединения при выдаче из пула # ═══════════════════════════════════════════════════════════════════════════ # PostgreSQL — общие параметры подключения # ═══════════════════════════════════════════════════════════════════════════ - pg_port = "5432" # порт PostgreSQL - pg_ssl_mode = "require" # SSL-режим (require = обязательно TLS) + pg_port = "5432" # порт PostgreSQL + pg_ssl_mode = "require" # SSL-режим (require = обязательно TLS) } diff --git a/DEV_STAND/CRUD/lucee.tf b/DEV_STAND/CRUD/lucee.tf index 85d2e25..be7a899 100644 --- a/DEV_STAND/CRUD/lucee.tf +++ b/DEV_STAND/CRUD/lucee.tf @@ -8,6 +8,8 @@ locals { resource "nubes_lucee" "applucee" { resource_name = local.lucee_resource_name + adopt_existing_on_create = true + startup_configuration = { resource_realm = var.realm } @@ -23,12 +25,10 @@ resource "nubes_lucee" "applucee" { } app_configuration = { - version = local.lucee_version - git_path = local.lucee_git_path + version = local.lucee_version + git_path = local.lucee_git_path } - git_revision = local.lucee_git_revision - json_env = jsonencode({ TABLE_NAME = local.crud_table_name testds_class = local.jdbc_class diff --git a/DEV_STAND/CRUD/nodejs.tf b/DEV_STAND/CRUD/nodejs.tf index 50e7fee..38fc007 100644 --- a/DEV_STAND/CRUD/nodejs.tf +++ b/DEV_STAND/CRUD/nodejs.tf @@ -11,6 +11,8 @@ locals { resource "nubes_nodejs" "appnodejs" { resource_name = local.nodejs_resource_name + adopt_existing_on_create = true + startup_configuration = { resource_realm = var.realm } @@ -31,17 +33,16 @@ resource "nubes_nodejs" "appnodejs" { health_path = "/" } - git_revision = local.nodejs_git_revision operation_timeout = local.nodejs_timeout json_env = jsonencode({ - TABLE_NAME = local.crud_table_name - PGHOST = local.nodejs_pg_host - PGPORT = local.pg_port - PGUSER = local.nodejs_pg_user - PGPASSWORD = local.nodejs_pg_pass - PGDATABASE = local.nodejs_pg_db - PGSSLMODE = local.pg_ssl_mode + TABLE_NAME = local.crud_table_name + PGHOST = local.nodejs_pg_host + PGPORT = local.pg_port + PGUSER = local.nodejs_pg_user + PGPASSWORD = local.nodejs_pg_pass + PGDATABASE = local.nodejs_pg_db + PGSSLMODE = local.pg_ssl_mode }) depends_on = [nubes_postgres.main_pg] diff --git a/DEV_STAND/CRUD/terraform.tfvars.example b/DEV_STAND/CRUD/terraform.tfvars.example index e65dbeb..63ae1ea 100644 --- a/DEV_STAND/CRUD/terraform.tfvars.example +++ b/DEV_STAND/CRUD/terraform.tfvars.example @@ -13,4 +13,4 @@ api_token = "" # JWT-токен realm = "k8s-3-sandbox-nubes-ru" # кластер Kubernetes s3_name = "" # имя S3-экземпляра -s3_user_uid = "" # UUID S3-экземпляра +s3_user_uid = "" # UUID S3-пользователя