From c34c8520960bf3523e9a0fcf85c36e4721aee13d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 3 Jul 2026 10:49:28 +0400 Subject: [PATCH] TEST_STAND/PG: clean structure with README, variables.tf, .gitignore, terraform.tfvars.example --- TEST_STAND/PG/.gitignore | 8 ++++ TEST_STAND/PG/README.md | 59 +++++++++++++++++++++++ TEST_STAND/PG/main.tf | 14 ++++++ TEST_STAND/PG/resources.tf | 66 ++++++++++++++++++++++++++ TEST_STAND/PG/terraform.tfvars.example | 13 +++++ TEST_STAND/PG/variables.tf | 15 ++++++ 6 files changed, 175 insertions(+) create mode 100644 TEST_STAND/PG/.gitignore create mode 100644 TEST_STAND/PG/README.md create mode 100644 TEST_STAND/PG/main.tf create mode 100644 TEST_STAND/PG/resources.tf create mode 100644 TEST_STAND/PG/terraform.tfvars.example create mode 100644 TEST_STAND/PG/variables.tf diff --git a/TEST_STAND/PG/.gitignore b/TEST_STAND/PG/.gitignore new file mode 100644 index 0000000..94159dd --- /dev/null +++ b/TEST_STAND/PG/.gitignore @@ -0,0 +1,8 @@ +# Secrets +terraform.tfvars + +# Terraform state and cache +.terraform/ +.terraform.lock.hcl +terraform.tfstate +terraform.tfstate.backup diff --git a/TEST_STAND/PG/README.md b/TEST_STAND/PG/README.md new file mode 100644 index 0000000..8d184f0 --- /dev/null +++ b/TEST_STAND/PG/README.md @@ -0,0 +1,59 @@ +# PostgreSQL `pg` — TEST стенд + +Terraform-манифест для создания PostgreSQL + пользователь + база данных через провайдер `nubes-test/nubes`. + +## Быстрый старт + +```bash +# 1. Скопируй шаблон переменных +cp terraform.tfvars.example terraform.tfvars + +# 2. Подставь свои значения в terraform.tfvars: +# api_token — Nubes API токен (TEST) +# s3_uid — UUID существующего S3 Object Storage (для бэкапов) +# realm — платформа/K8s-кластер (например k8s-3-sandbox-nubes-ru) + +# 3. В resources.tf замени: +# - resource_name = "pg4tf033777" → своё имя +# - имена ресурсов "npg", "pg_user", "db2_app" → свои + +# 4. Инициализация +terraform init + +# 5. Проверка +terraform plan + +# 6. Создать +terraform apply + +# 7. Приостановить (suspend, не удаление) +terraform destroy +``` + +## Переменные + +| Переменная | Описание | Где взять | +|---|---|---| +| `api_token` | API-токен Nubes (TEST) | Личный кабинет → Профиль → Токены | +| `s3_uid` | UUID S3 Object Storage | `terraform state list` существующего S3 | +| `realm` | Платформа развёртывания | `k8s-3-sandbox-nubes-ru` / `iot-naeel` / `naeel-test-3` | + +## Провайдер + +- **Источник**: `terra.k8c.ru/nubes-test/nubes` +- **Версия**: `5.0.57` +- **API**: `https://lk-api-gateway-test.ngcloud.ru/api/v1/svc` + +## Структура параметров + +Параметры PostgreSQL сгруппированы в JSON-блоки (map-fixed): + +| Блок | Поля | +|---|---| +| `startup_configuration` | `resourceRealm` | +| `cluster_configuration` | `cpu`, `memory`, `replicas`, `disk` | +| `access_configuration` | `masterIpSpace`, `masterAccessList`, `slaveIpSpace`, `slaveAccessList` | +| `postgres_configuration` | `version`, `sslRequired`, `poolerMaster`, `poolerSlave` | +| `postgres_conf` | `[{paramName, paramValue}]` (массив) | +| `backup_configuration` | `s3Uid`, `retain`, `schedule` | +| `autoscale_configuration` | `enabled`, `schedule`, `percent`, `quota` | diff --git a/TEST_STAND/PG/main.tf b/TEST_STAND/PG/main.tf new file mode 100644 index 0000000..e0432f8 --- /dev/null +++ b/TEST_STAND/PG/main.tf @@ -0,0 +1,14 @@ +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes-test/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = var.api_token + api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" +} + diff --git a/TEST_STAND/PG/resources.tf b/TEST_STAND/PG/resources.tf new file mode 100644 index 0000000..6f53347 --- /dev/null +++ b/TEST_STAND/PG/resources.tf @@ -0,0 +1,66 @@ +resource "nubes_postgres" "npg" { + resource_name = "pg4tf033777" + + startup_configuration = jsonencode({ + resourceRealm = var.realm + }) + + cluster_configuration = jsonencode({ + cpu = "500" + memory = "512" + replicas = "1" + disk = "10" + }) + + access_configuration = jsonencode({ + masterIpSpace = "no-needed" + masterAccessList = [] + slaveIpSpace = "no-needed" + slaveAccessList = [] + }) + + postgres_configuration = jsonencode({ + version = "17" + sslRequired = true + poolerMaster = false + poolerSlave = false + }) + + postgres_conf = jsonencode([ + { + paramName = "log_connections" + paramValue = "''" + } + ]) + + backup_configuration = jsonencode({ + s3Uid = var.s3_uid + retain = "7" + schedule = "0 0 * * *" + }) + + autoscale_configuration = jsonencode({ + enabled = false + schedule = "0" + percent = "10" + quota = "100" + }) + + operation_timeout = "11m" + adopt_existing_on_create = true +} + +resource "nubes_postgres_user" "pg_user" { + postgres_id = nubes_postgres.npg.id + username = "user0" + role = "ddl_user" + adopt_existing_on_create = true +} + +resource "nubes_postgres_database" "db2_app" { + postgres_id = nubes_postgres.npg.id + db_name = "dbterra" + db_owner = nubes_postgres_user.pg_user.username + adopt_existing_on_create = true +} + diff --git a/TEST_STAND/PG/terraform.tfvars.example b/TEST_STAND/PG/terraform.tfvars.example new file mode 100644 index 0000000..f879b27 --- /dev/null +++ b/TEST_STAND/PG/terraform.tfvars.example @@ -0,0 +1,13 @@ +# ─────────────────────────────────────────────────────────── +# Terraform variables — TEST stand (nubes-test) +# Скопируй в terraform.tfvars и подставь реальные значения +# ─────────────────────────────────────────────────────────── + +# Nubes API токен для TEST +api_token = "вставь_свой_токен" + +# UUID существующего экземпляра S3 Object Storage (для бэкапов) +s3_uid = "вставь_s3_user_uid" + +# Платформа/K8s-кластер для развёртывания +realm = "k8s-3-sandbox-nubes-ru" diff --git a/TEST_STAND/PG/variables.tf b/TEST_STAND/PG/variables.tf new file mode 100644 index 0000000..638a8f0 --- /dev/null +++ b/TEST_STAND/PG/variables.tf @@ -0,0 +1,15 @@ +variable "api_token" { + description = "Nubes API token for TEST stand" + type = string + sensitive = true +} + +variable "s3_uid" { + description = "UUID существующего экземпляра S3 Object Storage (для бэкапов)" + type = string +} + +variable "realm" { + description = "Платформа/K8s-кластер для развёртывания PostgreSQL" + type = string +}