test_stand/crud: разделение на pg/ (общая БД) и apps/ (потребители)
Было: одна папка, один state — destroy убивал и БД, и приложения; пароль БД приходилось вытаскивать костылём try() в одном apply, приложения поднимались с пустым PGPASSWORD. Стало: - pg/ — кластер PostgreSQL + пользователь + база + outputs (хост/порт/юзер/база/пароль); destroy здесь переводит кластер в Suspend, а пользователь и база не удаляются (keep_on_destroy = true + adopt_existing_on_create = true); - apps/ — три приложения-потребителя; креды БД читаются из creds.json (выгрузка outputs папки pg/, т.к. state раздельные, а data-source у провайдера нет); try() убран полностью — пароль к моменту этого apply уже существует; - apps/.gitignore — creds.json, terraform.tfvars, state/lock; - README.md переписан: структура, «зачем разделено», пошаговые 3 шага запуска, повседневные операции (destroy приложений не трогает БД), про destroy базы. Проверено: terraform init+validate в обеих папках — Success; plan в pg/ — 3 to add (кластер, пользователь, база) + 6 outputs.
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
# =============================================================================
|
||||
# PG — провайдер и переменные
|
||||
# =============================================================================
|
||||
#
|
||||
# Здесь только БД: кластер + пользователь + база. Приложения — в ../apps/.
|
||||
# Почему так разделено — см. README.md в родительской папке CRUD/.
|
||||
# =============================================================================
|
||||
|
||||
terraform {
|
||||
required_providers {
|
||||
nubes = {
|
||||
source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-test/nubes"
|
||||
version = "3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
provider "nubes" {
|
||||
api_token = var.api_token
|
||||
api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
|
||||
# log_level = "debug" # none | info | debug, default = "none"
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# Обязательные (заполняются в terraform.tfvars)
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
variable "api_token" {
|
||||
type = string
|
||||
sensitive = true
|
||||
description = "Nubes API token (ЛК → Профиль → Токены → создать «Технический»)"
|
||||
}
|
||||
|
||||
variable "realm" {
|
||||
type = string
|
||||
description = "resource_realm: ресурсная платформа (кластер Kubernetes), например k8s-4-sandbox-nubes-ru"
|
||||
}
|
||||
|
||||
variable "s3_name" {
|
||||
type = string
|
||||
description = "Имя (или UUID) S3-экземпляра для бэкапов PostgreSQL: ЛК → S3"
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# Кластер — значения по умолчанию можно не задавать
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
variable "pg_resource_name" {
|
||||
type = string
|
||||
default = "pg4crud2"
|
||||
description = "Имя ресурса кластера в Nubes (по нему же ищется существующий — adopt)"
|
||||
}
|
||||
|
||||
variable "pg_cpu" {
|
||||
type = number
|
||||
default = 500
|
||||
}
|
||||
|
||||
variable "pg_memory" {
|
||||
type = number
|
||||
default = 512
|
||||
}
|
||||
|
||||
variable "pg_replicas" {
|
||||
type = number
|
||||
default = 1
|
||||
}
|
||||
|
||||
variable "pg_disk" {
|
||||
type = number
|
||||
default = 10
|
||||
}
|
||||
|
||||
variable "pg_version" {
|
||||
type = string
|
||||
default = "17"
|
||||
}
|
||||
|
||||
variable "pg_retain" {
|
||||
type = number
|
||||
default = 14
|
||||
}
|
||||
|
||||
variable "pg_schedule" {
|
||||
type = string
|
||||
default = "0 0 * * *"
|
||||
}
|
||||
|
||||
variable "pg_timeout" {
|
||||
type = string
|
||||
default = "11m"
|
||||
description = "Таймаут операций кластера (create/modify/suspend)"
|
||||
}
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# Пользователь и база — имена константны: по ним приложения собирают подключение
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
variable "pg_username" {
|
||||
type = string
|
||||
default = "user4crudpg"
|
||||
description = "Имя пользователя БД. Защищённые имена (admin/postgres/standby) платформа не примет"
|
||||
}
|
||||
|
||||
variable "pg_role" {
|
||||
type = string
|
||||
default = "ddl_user"
|
||||
description = "app_user = только DML, ddl_user = плюс создание баз/ролей (нужно приложению для CREATE TABLE)"
|
||||
}
|
||||
|
||||
variable "pg_db_name" {
|
||||
type = string
|
||||
default = "db4crudpg"
|
||||
}
|
||||
Reference in New Issue
Block a user