From 595c9250a168402a6af7674393d0c869c463fcae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Fri, 3 Jul 2026 17:02:08 +0400 Subject: [PATCH] =?UTF-8?q?docs:=20full=20postgres=20documentation=20rewri?= =?UTF-8?q?te=20=E2=80=94=20sub-field=20tables,=20working=20HCL=20examples?= =?UTF-8?q?=20for=20create/modify/user/database?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/30_registry/resources/postgres_backup.md | 13 ++ .../resources/postgres_backup_example.md | 30 ++++ .../resources/postgres_database.md | 24 ++++ .../resources/postgres_database_example.md | 37 +++++ .../30_registry/resources/postgres_example.md | 131 ++++++++++++++---- docs/30_registry/resources/postgres_ops.md | 6 + .../30_registry/resources/postgres_outputs.md | 71 +++++----- .../resources/postgres_params_create.md | 92 +++++++----- .../resources/postgres_params_modify.md | 67 ++++++--- docs/30_registry/resources/postgres_user.md | 24 ++++ .../resources/postgres_user_example.md | 34 +++++ 11 files changed, 412 insertions(+), 117 deletions(-) create mode 100644 docs/30_registry/resources/postgres_backup.md create mode 100644 docs/30_registry/resources/postgres_backup_example.md create mode 100644 docs/30_registry/resources/postgres_database.md create mode 100644 docs/30_registry/resources/postgres_database_example.md create mode 100644 docs/30_registry/resources/postgres_user.md create mode 100644 docs/30_registry/resources/postgres_user_example.md diff --git a/docs/30_registry/resources/postgres_backup.md b/docs/30_registry/resources/postgres_backup.md new file mode 100644 index 0000000..96074ea --- /dev/null +++ b/docs/30_registry/resources/postgres_backup.md @@ -0,0 +1,13 @@ +# Resource nubes_postgres_backup + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Backup](postgres_backup.md) | [Example](postgres_backup_example.md) + +## Create params + +None. + +## Delete params + +None. diff --git a/docs/30_registry/resources/postgres_backup_example.md b/docs/30_registry/resources/postgres_backup_example.md new file mode 100644 index 0000000..a49493b --- /dev/null +++ b/docs/30_registry/resources/postgres_backup_example.md @@ -0,0 +1,30 @@ +# Resource nubes_postgres_backup — Example + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Backup](postgres_backup.md) | [Example](postgres_backup_example.md) + +## Copy-ready manifest (`postgres_backup_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes/nubes" + version = "5.0.75" + } + } +} + +provider "nubes" { + api_token = "token_***" + api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" +} + +# Родительский ресурс — nubes_postgres должен быть создан заранее +# resource "nubes_postgres" "baza" { ... } + +resource "nubes_postgres_backup" "example" { + postgres_id = nubes_postgres.baza.id +} +``` diff --git a/docs/30_registry/resources/postgres_database.md b/docs/30_registry/resources/postgres_database.md new file mode 100644 index 0000000..af1dd78 --- /dev/null +++ b/docs/30_registry/resources/postgres_database.md @@ -0,0 +1,24 @@ +# Resource nubes_postgres_database + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Database](postgres_database.md) | [Example](postgres_database_example.md) + +## Create params + +**Обязательные параметры** + + + + + + +
IDCodeTypeDescriptionConstraints
741db_namestringregex=^[A-Za-z0-9]+$
742db_ownerstring
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
743db_namestring
diff --git a/docs/30_registry/resources/postgres_database_example.md b/docs/30_registry/resources/postgres_database_example.md new file mode 100644 index 0000000..0b9634f --- /dev/null +++ b/docs/30_registry/resources/postgres_database_example.md @@ -0,0 +1,37 @@ +# Resource nubes_postgres_database — Example + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [Database](postgres_database.md) | [Example](postgres_database_example.md) + +## Copy-ready manifest (`postgres_database_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes-test/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "ваш_токен" + api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" +} + +# Родительский ресурс — nubes_postgres должен быть создан заранее +# resource "nubes_postgres" "baza" { ... } + +# Пользователь должен быть создан заранее +# resource "nubes_postgres_user" "myapp" { ... } + +resource "nubes_postgres_database" "example" { + postgres_id = nubes_postgres.baza.id + db_name = "myappdb" # только A-Z, a-z, 0-9, без подчёркиваний! + db_owner = nubes_postgres_user.myapp.username +} +``` +} +``` diff --git a/docs/30_registry/resources/postgres_example.md b/docs/30_registry/resources/postgres_example.md index c8cd20c..43d3e33 100644 --- a/docs/30_registry/resources/postgres_example.md +++ b/docs/30_registry/resources/postgres_example.md @@ -12,39 +12,108 @@ Service Name: PostgreSQL terraform { required_providers { nubes = { - source = "terra.k8c.ru/nubes/nubes" - version = "2.1.23" + source = "terra.k8c.ru/nubes-test/nubes" + version = "5.0.57" } } } -# Токен доступа api_token к Nubes API — замените на реальный. -provider "nubes" { - api_token = "token_***" - api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm" +variable "api_token" { + type = string + sensitive = true +} +variable "s3_uid" { + type = string +} +variable "realm" { + type = string } -resource "nubes_postgres" "baza" { - s3_uid = "235e0546-..." # Экземпляр (учетная запись) S3 для резервного копирования. Резервное копирование обязательно - resource_realm = "TODO" # Платформа для развертывания - # Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте - resource_instances = 1 # Количество узлов - resource_memory = 512 # Квота памяти пода (MBytes) - resource_c_p_u = 500 # Квота ядра пода (milicores) - resource_disk = 10 # Квота диска (Указывается в GIGAbytes) - need_external_address_master = false # Выделяет внешний (белый) IP для доступа к master - need_external_address_slave = false # Выделяет внешний (белый) IP для доступа к slave. Будет работать, если slave в принципе есть - ext__b_a_c_k_u_p__s_c_h_e_d_u_l_e = "0 0 * * *" # Не обязательный. Время запуска бекапа - ext__b_a_c_k_u_p__n_u_m__t_o__r_e_t_a_i_n = 7 # Не обязательный. Количество сохраняемых бекапов - app_version = 17 # Версия PostgreSQL - json_parameters = { "log_connections": "off", "log_disconnections": "off" } # Массив переменных, более подробнее про настройку можно посмотреть https://www.postgresql.org/docs/current/runtime-config.html - enable_pg_pooler_master = false # Включает pgPooler (на запись). Будет создан новый под - enable_pg_pooler_slave = false # Включает pgPooler (на чтение). Будет создан новый под - allow_no_s_s_l = false # По умолчанию подключение обязательное (sslmode=require). Выставление в true отключит этот параметр - auto_scale = false # Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги - auto_scale_percentage = 10 # Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема - auto_scale_tech_window = 0 # Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23) - auto_scale_quota_gb = 1 # Квота для autoScale +provider "nubes" { + api_token = var.api_token + api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" +} + +# ============================================================================= +# PostgreSQL — основной ресурс +# ============================================================================= +resource "nubes_postgres" "baza" { + resource_name = "pg-my-instance" + + # Платформа развёртывания + 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 = [] + }) + + # Параметры PostgreSQL + postgres_configuration = jsonencode({ + version = "17" + sslRequired = true + poolerMaster = false + poolerSlave = false + }) + + # Доп. параметры postgresql.conf (опционально) + 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" "app_user" { + postgres_id = nubes_postgres.baza.id + username = "myapp" + role = "app_user" + adopt_existing_on_create = true +} + +# ============================================================================= +# База данных +# ============================================================================= +resource "nubes_postgres_database" "app_db" { + postgres_id = nubes_postgres.baza.id + db_name = "myappdb" + db_owner = nubes_postgres_user.app_user.username + adopt_existing_on_create = true } ``` @@ -61,3 +130,11 @@ nubes_postgres.baza.vault_url nubes_postgres.baza.vault_user_path nubes_postgres.baza.vault_fields ``` + +## terraform.tfvars + +```hcl +api_token = "ваш_токен" +s3_uid = "UUID-S3-Object-Storage" +realm = "k8s-3-sandbox-nubes-ru" +``` diff --git a/docs/30_registry/resources/postgres_ops.md b/docs/30_registry/resources/postgres_ops.md index ebe3b5c..cc2703c 100644 --- a/docs/30_registry/resources/postgres_ops.md +++ b/docs/30_registry/resources/postgres_ops.md @@ -9,8 +9,14 @@ Service Name: PostgreSQL ## Operations - `create` — Создание кластера. Параметры: [Create params](postgres_params_create.md) +- `create_backup` — . См. [nubes_postgres_backup](postgres_backup.md) +- `create_database` — . См. [nubes_postgres_database](postgres_database.md) +- `create_user` — . См. [nubes_postgres_user](postgres_user.md) - `delete` +- `delete_database` — . См. [nubes_postgres_database](postgres_database.md) +- `delete_user` — . См. [nubes_postgres_user](postgres_user.md) - `modify` — Изменение кластера. Параметры: [Modify params](postgres_params_modify.md) +- `reconcile` - `recovery` - `restart` — ВНИМАНИЕ - Рестарт предполагает УДАЛЕНИЕ подов. Может быть полная поломка. Крайне осторожно запускать при работе - `resume` diff --git a/docs/30_registry/resources/postgres_outputs.md b/docs/30_registry/resources/postgres_outputs.md index 3366df6..f07b697 100644 --- a/docs/30_registry/resources/postgres_outputs.md +++ b/docs/30_registry/resources/postgres_outputs.md @@ -17,58 +17,49 @@ Service Name: PostgreSQL - `vault_user_path` (string) — путь пользователя в Vault - `vault_fields` (list) — список ключей доступных секретов -## Реальные поля из облака (test / pg4tf011 / suspended) +## Реальные поля из облака (running/suspended snapshot) Поля ниже получены из реальных инстансов этого сервиса в облаке. Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`. -### `state_params` ключи - -- `state_params["s3Uid"]` -- `state_params["autoScale"]` -- `state_params["allowNoSSL"]` -- `state_params["appVersion"]` -- `state_params["resourceCPU"]` -- `state_params["resourceDisk"]` -- `state_params["resourceRealm"]` -- `state_params["jsonParameters"]` -- `state_params["resourceMemory"]` -- `state_params["autoScaleQuotaGb"]` -- `state_params["ipSpaceNameSlave"]` -- `state_params["ipSpaceNameMaster"]` -- `state_params["resourceInstances"]` -- `state_params["autoScalePercentage"]` -- `state_params["autoScaleTechWindow"]` -- `state_params["enablePgPoolerSlave"]` -- `state_params["ext_BACKUP_SCHEDULE"]` -- `state_params["enablePgPoolerMaster"]` -- `state_params["ext_BACKUP_NUM_TO_RETAIN"]` -- `state_params["needExternalAddressSlave"]` -- `state_params["needExternalAddressMaster"]` - ### `state_out_flat` ключи -- `state_out_flat["users"]` -- `state_out_flat["databases"]` -- `state_out_flat["monitoring"]` -- `state_out_flat["monitoring.resourceMetrics"]` - `state_out_flat["externalConnect"]` -- `state_out_flat["externalConnect.slave"]` -- `state_out_flat["externalConnect.slave.ip"]` -- `state_out_flat["externalConnect.slave.fqdn"]` -- `state_out_flat["externalConnect.slave.uuid"]` -- `state_out_flat["externalConnect.slave.isExternal"]` - `state_out_flat["externalConnect.master"]` -- `state_out_flat["externalConnect.master.ip"]` - `state_out_flat["externalConnect.master.fqdn"]` -- `state_out_flat["externalConnect.master.uuid"]` +- `state_out_flat["externalConnect.master.ip"]` - `state_out_flat["externalConnect.master.isExternal"]` +- `state_out_flat["externalConnect.master.uuid"]` +- `state_out_flat["externalConnect.slave"]` +- `state_out_flat["externalConnect.slave.fqdn"]` +- `state_out_flat["externalConnect.slave.ip"]` +- `state_out_flat["externalConnect.slave.isExternal"]` +- `state_out_flat["externalConnect.slave.uuid"]` - `state_out_flat["internalConnect"]` -- `state_out_flat["internalConnect.slave"]` - `state_out_flat["internalConnect.master"]` +- `state_out_flat["internalConnect.slave"]` +- `state_out_flat["monitoring"]` +- `state_out_flat["monitoring.allDashboards"]` +- `state_out_flat["monitoring.base"]` +- `state_out_flat["monitoring.base.url"]` +- `state_out_flat["monitoring.k8spostgresql"]` +- `state_out_flat["monitoring.k8spostgresql.url"]` +- `state_out_flat["monitoring.k8spostgresqlbackup"]` +- `state_out_flat["monitoring.k8spostgresqlbackup.url"]` +- `state_out_flat["monitoring.loki"]` +- `state_out_flat["monitoring.loki.url"]` ### `vault_secrets` ключи -- `vault_secrets["url"]` -- `vault_secrets["fields"]` -- `vault_secrets["userPath"]` +- `vault_secrets["adminPass"]` +- `vault_secrets["adminUser"]` +- `vault_secrets["standbyPass"]` +- `vault_secrets["standbyUser"]` + +### Пример для связки с Lucee/NodeJS + +```hcl +testds_connectionString = "jdbc:postgresql://${nubes_postgres.db2.state_out_flat["internalConnect.master"]}:5432/postgres?sslmode=require" +testds_username = nubes_postgres.db2.vault_secrets["adminUser"] +testds_password = nubes_postgres.db2.vault_secrets["adminPass"] +``` diff --git a/docs/30_registry/resources/postgres_params_create.md b/docs/30_registry/resources/postgres_params_create.md index 69a72bb..4429602 100644 --- a/docs/30_registry/resources/postgres_params_create.md +++ b/docs/30_registry/resources/postgres_params_create.md @@ -8,39 +8,69 @@ Service Name: PostgreSQL ## Create params -**Обязательные параметры (вводимые пользователем)** +Параметры сгруппированы в JSON-блоки. Каждый блок — это `jsonencode({...})` в манифесте. - - - - - - - -
IDCodeTypeDescriptionConstraints
23s3_uiduuidЭкземпляр (учетная запись) S3 для резервного копирования. Резервное копирование обязательноref_svc_id=12
102resource_realmstringКластер Kubernetes, на котором будет развернут экземплярfunc=getAvailableResourceRealms
337ip_space_name_masterstringИмя ipSpace для публикации VIP master. Не может быть пустым, если включен needExternalAddressMaster. Пример: `internet-no-antiddos-v1`
338ip_space_name_slavestringИмя ipSpace для публикации VIP slave. Не может быть пустым, если включен needExternalAddressSlave
+### startup_configuration — платформа развёртывания -**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте** - - - - - - - - - - - - - - - - - - - - -
IDCodeTypeDefaultDescriptionConstraints
80resource_instancesinteger1Количество узлов в кластере. 1,3,5,7minvalue=1; maxvalue=7; regex=^[1357]$
81resource_memoryinteger512Квота памяти пода (MBytes)minvalue=128; maxvalue=8192
82resource_cpuinteger500Квота ядра пода (milicores)minvalue=100; maxvalue=4000
83resource_disk10Квота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
145need_external_address_masterbooleanfalseВыделяет внешний (белый) IP для доступа к mastervalue_list=false, true
146need_external_address_slavebooleanfalseВыделяет внешний (белый) IP для доступа к slave. Будет работать, если slave в принципе естьvalue_list=false, true
265ext_backup_schedulestring0 0 * * *Не обязательный. Время запуска бекапаregex=^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
266ext_backup_num_to_retaininteger7Не обязательный. Количество сохраняемых бекаповminvalue=1; maxvalue=99
310app_versionstring17Версия PostgreSQLvalue_list=17, 16, 15, 14, 13
311json_parametersjson{ "log_connections": "off", "log_disconnections": "off" }Массив переменных, более подробнее про настройку можно посмотреть https://www.postgresql.org/docs/current/runtime-config.htmlmaxlength=2048
312enable_pg_pooler_masterbooleanfalseВключает pgPooler (на запись). Будет создан новый подvalue_list=false, true
313enable_pg_pooler_slavebooleanfalseВключает pgPooler (на чтение). Будет создан новый подvalue_list=false, true
314allow_no_sslbooleanfalseПо умолчанию подключение обязательное (sslmode=require). Выставление в true отключит этот параметрvalue_list=false, true
329auto_scalebooleanfalseВключает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услугиvalue_list=false, true
330auto_scale_percentageinteger10Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объемаvalue_list=10, 15, 20
331auto_scale_tech_windowinteger0Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)value_list=0, 5, 12, 23
339auto_scale_quota_gbstring1Квота для autoScale
+| Поле | Тип | Обязательное | Описание | +|---|---|---|---| +| `resourceRealm` | string | да | Платформа/K8s-кластер. Примеры: `k8s-3-sandbox-nubes-ru`, `iot-naeel`, `naeel-test-3` | + +### cluster_configuration — размер кластера + +| Поле | Тип | Обязательное | Описание | +|---|---|---|---| +| `cpu` | string | да | Квота CPU в милликорах (1000 = 1 vCPU) | +| `memory` | string | да | Квота памяти в MB | +| `replicas` | string | да | Количество нод (1 = без реплики, 2 = master + slave) | +| `disk` | string | да | Размер диска в GB | + +### access_configuration — сетевой доступ + +| Поле | Тип | Обязательное | Описание | +|---|---|---|---| +| `masterIpSpace` | string | да | ipSpace для внешнего IP master. `"no-needed"` если не нужен | +| `masterAccessList` | array | да | Список IP/сетей для доступа к master. `[]` если не ограничен | +| `slaveIpSpace` | string | да | ipSpace для внешнего IP slave | +| `slaveAccessList` | array | да | Список IP/сетей для доступа к slave | + +### postgres_configuration — параметры PostgreSQL + +| Поле | Тип | Обязательное | Описание | +|---|---|---|---| +| `version` | string | да | Версия PostgreSQL: `"16"`, `"17"` | +| `sslRequired` | boolean | да | Требовать SSL-подключения | +| `poolerMaster` | boolean | да | Включить PgBouncer для master | +| `poolerSlave` | boolean | да | Включить PgBouncer для slave | + +### postgres_conf — дополнительные параметры (опционально) + +Массив объектов `[{paramName, paramValue}]`. Пример: +```json +[{"paramName": "log_connections", "paramValue": "''"}] +``` + +| Поле | Тип | Обязательное | Описание | +|---|---|---|---| +| `paramName` | string | да | Имя параметра postgresql.conf | +| `paramValue` | string | да | Значение параметра | + +### backup_configuration — резервное копирование + +| Поле | Тип | Обязательное | Описание | +|---|---|---|---| +| `s3Uid` | string | да | UUID существующего S3 Object Storage | +| `retain` | string | да | Количество сохраняемых бэкапов | +| `schedule` | string | да | Cron-расписание бэкапов. `"0 0 * * *"` = ежедневно в полночь | + +### autoscale_configuration — автоскейлинг + +| Поле | Тип | Обязательное | Описание | +|---|---|---|---| +| `enabled` | boolean | да | Включить автоскейлинг | +| `schedule` | string | да | Tech window | +| `percent` | string | да | Процент увеличения при скейлинге | +| `quota` | string | да | Максимальный размер диска в GB |
Параметры поведения (кратко)
diff --git a/docs/30_registry/resources/postgres_params_modify.md b/docs/30_registry/resources/postgres_params_modify.md index 2fcc3af..c508297 100644 --- a/docs/30_registry/resources/postgres_params_modify.md +++ b/docs/30_registry/resources/postgres_params_modify.md @@ -8,22 +8,51 @@ Service Name: PostgreSQL ## Modify params - - - - - - - - - - - - - - - - - - -
IDCodeTypeDescriptionConstraints
91resource_instancesintegerКоличество узлов в сетиminvalue=1; maxvalue=7
92resource_memoryintegerКвота памяти пода (MBytes)minvalue=128; maxvalue=8192
93resource_cpuintegerКвота ядра пода (milicores)minvalue=100; maxvalue=4000
94resource_diskintegerКвота диска (Указывается в GIGAbytes)minvalue=1; maxvalue=999
147need_external_address_masterbooleanВыделяет внешний IP для доступа к mastervalue_list=false, true
148need_external_address_slavebooleanВыделяет внешний IP для доступа к slave. Действует, если slave в принципе естьvalue_list=false, true
267ext_backup_schedulestringНе обязательный. Время запуска бекапаregex=^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
268ext_backup_num_to_retainintegerНе обязательный. Количество сохраняемых бекаповminvalue=1; maxvalue=99
315app_versionstringВерсия PostgreSQL. Нельзя опускать внизvalue_list=17, 16, 15, 14, 13
316json_parametersjsonМассив переменных, более подробнее про настройку можно посмотреть https://www.postgresql.org/docs/current/runtime-config.htmlmaxlength=2048
317enable_pg_pooler_masterbooleanВключает pgPooler (на запись). Будет создан новый подvalue_list=false, true
318enable_pg_pooler_slavebooleanВключает pgPooler (на чтение). Будет создан новый подvalue_list=false, true
319allow_no_sslbooleanПо умолчанию подключение обязательное (sslmode=require). Выставление в true отключит этот параметрvalue_list=false, true
541ip_space_name_masterstringИмя ipSpace для публикации VIP master. Не может быть пустым, если включен needExternalAddressMaster. Пример: `internet-no-antiddos-v1`
542ip_space_name_slavestringИмя ipSpace для публикации VIP slave. Не может быть пустым, если включен needExternalAddressSlave
+При modify можно изменить все блоки кроме `startup_configuration` (version, realm — задаются только при create). + +### cluster_configuration + +| Поле | Тип | Описание | +|---|---|---| +| `cpu` | string | Квота CPU в милликорах | +| `memory` | string | Квота памяти в MB | +| `replicas` | string | Количество нод | +| `disk` | string | Размер диска в GB | + +### access_configuration + +| Поле | Тип | Описание | +|---|---|---| +| `masterIpSpace` | string | ipSpace для внешнего IP master | +| `masterAccessList` | array | Список IP/сетей для доступа к master | +| `slaveIpSpace` | string | ipSpace для внешнего IP slave | +| `slaveAccessList` | array | Список IP/сетей для доступа к slave | + +### postgres_configuration + +| Поле | Тип | Описание | +|---|---|---| +| `sslRequired` | boolean | Требовать SSL-подключения | +| `poolerMaster` | boolean | Включить PgBouncer для master | +| `poolerSlave` | boolean | Включить PgBouncer для slave | + +### postgres_conf (опционально) + +Массив `[{paramName, paramValue}]` — дополнительные параметры postgresql.conf. + +### backup_configuration + +| Поле | Тип | Описание | +|---|---|---| +| `s3Uid` | string | UUID S3 Object Storage | +| `retain` | string | Количество сохраняемых бэкапов | +| `schedule` | string | Cron-расписание | + +### autoscale_configuration + +| Поле | Тип | Описание | +|---|---|---| +| `enabled` | boolean | Включить автоскейлинг | +| `schedule` | string | Tech window | +| `percent` | string | Процент увеличения | +| `quota` | string | Максимальный размер диска в GB | diff --git a/docs/30_registry/resources/postgres_user.md b/docs/30_registry/resources/postgres_user.md new file mode 100644 index 0000000..e82e589 --- /dev/null +++ b/docs/30_registry/resources/postgres_user.md @@ -0,0 +1,24 @@ +# Resource nubes_postgres_user + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [User](postgres_user.md) | [Example](postgres_user_example.md) + +## Create params + +**Обязательные параметры** + + + + + + +
IDCodeTypeDescriptionConstraints
733usernamestringregex=^[A-Za-z0-9]+$; maxlength=62; minlength=2
740rolestring`app_user` — стандартный пользователь с базовым набором прав
`ddl_user` — пользователь с расширенными правами, включая управление ролями и базами данных
value_list=app_user, ddl_user
+ +## Delete params + + + + + +
IDCodeTypeDescriptionConstraints
739usernamestringПример: `username-admin`
diff --git a/docs/30_registry/resources/postgres_user_example.md b/docs/30_registry/resources/postgres_user_example.md new file mode 100644 index 0000000..2b4912e --- /dev/null +++ b/docs/30_registry/resources/postgres_user_example.md @@ -0,0 +1,34 @@ +# Resource nubes_postgres_user — Example + +Service: `nubes_postgres` (ID: 90) + +[PostgreSQL (основной)](postgres.md) | [Operations](postgres_ops.md) | [User](postgres_user.md) | [Example](postgres_user_example.md) + +## Copy-ready manifest (`postgres_user_main.tf`) + +```hcl +terraform { + required_providers { + nubes = { + source = "terra.k8c.ru/nubes-test/nubes" + version = "5.0.57" + } + } +} + +provider "nubes" { + api_token = "ваш_токен" + api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc" +} + +# Родительский ресурс — nubes_postgres должен быть создан заранее +# resource "nubes_postgres" "baza" { ... } + +resource "nubes_postgres_user" "example" { + postgres_id = nubes_postgres.baza.id + username = "myapp" # только A-Z, a-z, 0-9, без подчёркиваний + role = "app_user" # app_user (базовый) или ddl_user (расширенный) +} +``` +} +```