Files
tf_provider/generated/dev/resources_yaml/90_postgres.yaml
T
“Naeel” dd56bcda83 refactor: restructure project — separate tools, config, generated, provider
TOOLS/        — generators + scripts + config + ARCHITECTURE.md
  ├── yaml-generator/    (code)
  ├── resource-generator/ (code)
  ├── docs-generator/    (code)
  ├── scripts/           (← devops/*.sh)
  ├── config/            (← devops/profiles/ + devops/config/)
  │   ├── test/          profile.env, services_list.txt, operation_timeouts.json
  │   ├── prod/
  │   └── dev/
  └── ARCHITECTURE.md    (← devops/ARCHITECTURE.md)

generated/    — pipeline output only (gitignored)
  ├── test/resources_yaml/, go/, docs/, provider_build/
  ├── prod/
  └── dev/

provider/     — code only, no generated files
  resources_yaml/        — DELETED (generated)
  internal/resources_gen/ — DELETED (generated)

devops/       — removed (replaced by TOOLS/scripts + TOOLS/config + generated/)

Generators now fail if NUBES_*_DIR not set (no defaults to provider/).
Provider requires pipeline to populate resources_gen/ before build.
2026-07-06 09:06:09 +04:00

520 lines
27 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: postgres
service_id: 90
service_display_name: PostgreSQL
service_short_name: postgres
service_man: '# Инструкция по развертыванию PostgreSQL через платформу<br/><br/>---<br/>## 1. Общая информация<br/><br/>PostgreSQL — это надёжная объектно-реляционная СУБД с открытым исходным кодом, поддерживающая расширенный набор функций, транзакции и хранение сложных типов данных. Развёртывание полностью автоматизировано платформой на базе Zalando Postgres Operator с использованием Kubernetes.<br/><br/>## Доступные операции<br/><br/>- **create** — Создание кластера<br/>- **delete** — Удаление кластера<br/>- **modify** — Модификация кластера<br/>- **suspend** — Остановка кластера<br/>- **resume** — Запуск кластера<br/>- **restart** — Перезапуск кластера<br/>- **recovery** — Восстановление из резервной копии<br/><br/>- **create_user** — Создание пользователя<br/>- **delete_user** — Удаление пользователя<br/><br/>- **create_database** — Создание базы данных<br/>- **delete_database** — Удаление базы данных<br/><br/><br/>---<br/>## 2. Параметры развертывания кластера<br/><br/>Ниже перечислены параметры, которые необходимо указать при создании ресурса PostgreSQL:<br/><br/>* **Платформа для развертывания:**<br/> Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.<br/><br/>* **Количество узлов в сети:**<br/> Количество инстансов (реплик) в кластере PostgreSQL. Пример: `2` (master + slave).<br/><br/>* **Квота (megabyte) памяти пода:**<br/> Квота памяти пода в мегабайтах. Пример: `2048`<br/><br/>* **Квота (millicore) ядра пода:**<br/> Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`<br/><br/>* **Размер (gigabyte) диска для базы данных:**<br/> Размер диска для хранения данных в гигабайтах. Пример: `20`<br/><br/>* **Выделяет внешний IP для доступа к master:**<br/> Флаг, определяющий, нужно ли выделять внешний IP для доступа к master. Пример: `true` или `false`<br/><br/>* **Имя ipSpace для публикации внешнего IP master:**<br/> Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`<br/><br/>* **Выделяет внешний IP для доступа к slave:**<br/> Флаг для выделения внешнего IP для slave (реплики чтения). Работает, если slave присутствует в кластере.<br/><br/>* **Имя ipSpace для публикации внешнего IP slave:**<br/> Если включен параметр для slave, то поле необходимо заполнить.<br/><br/>* **UUID экземпляра услуги S3:**<br/> UUID экземпляра S3 для хранения резервных копий.<br/><br/>* **Версия PostgreSQL:**<br/> Версия PostgreSQL для развертывания. Пример: `16`<br/><br/>* **Расписание бэкапов (ext_BACKUP_SCHEDULE):**<br/> Необязательный. Cron-выражение для времени запуска бэкапов. По умолчанию: `0 0 * * *` (ежедневно в полночь).<br/><br/>* **Количество сохраняемых бэкапов (ext_BACKUP_NUM_TO_RETAIN):**<br/> Необязательный. Количество сохраняемых бэкапов. По умолчанию: `7`<br/><br/>* **PgPooler (master / slave):**<br/> Флаги включения PgBouncer для подключений на запись и чтение. При включении создаётся отдельный под.<br/><br/>* **Разрешить подключение без SSL (allowNoSSL):**<br/> По умолчанию подключение с sslmode=require. При `true` разрешается подключение без SSL.<br/><br/>* **Автоскейлинг PV (autoScale):**<br/> Включает автоскейлинг тома. Требует настройки autoScalePercentage, autoScaleTechWindow, autoScaleQuotaGb.<br/><br/>* **Дополнительные параметры PostgreSQL (jsonParameters):**<br/> JSON с переменными конфигурации PostgreSQL. Документация: https://www.postgresql.org/docs/current/runtime-config.html<br/><br/>---<br/>## 3. Выходные параметры<br/><br/>После успешного развертывания ресурса PostgreSQL платформа возвращает ряд параметров.<br/><br/>#### externalConnect<br/><br/>Внешние эндпоинты для подключения к кластеру:<br/>- **master** — для операций записи (host: `write.${namespace}`, port: 5432)<br/>- **slave** — для операций чтения (host: `read.${namespace}`, port: 5432)<br/><br/>Пример ответа платформы:<br/><br/>```json<br/>{<br/> &quot;slave&quot;: {<br/> &quot;ip&quot;: &quot;&quot;,<br/> &quot;fqdn&quot;: &quot;&quot;,<br/> &quot;uuid&quot;: &quot;&quot;,<br/> &quot;isExternal&quot;: false<br/> },<br/> &quot;master&quot;: {<br/> &quot;ip&quot;: &quot;&lt;ip&gt;&quot;,<br/> &quot;fqdn&quot;: &quot;write.&lt;namespace&gt;.&lt;cluster-domain&gt;&quot;,<br/> &quot;uuid&quot;: &quot;&lt;uuid&gt;&quot;,<br/> &quot;isExternal&quot;: false<br/> }<br/>}<br/>```<br/><br/>Поля: `ip` — внешний IP; `fqdn` — полное имя хоста; `uuid` — идентификатор; `isExternal` — признак внешнего доступа.<br/><br/>#### internalConnect<br/><br/>Внутренние эндпоинты (FQDN) для подключения из других сервисов внутри той же сети Kubernetes.<br/><br/>Пример ответа платформы:<br/><br/>```json<br/>{<br/> &quot;slave&quot;: &quot;&quot;,<br/> &quot;master&quot;: {<br/> &quot;slave&quot;: &quot;&quot;,<br/> &quot;master&quot;: {<br/> &quot;slave&quot;: &quot;&quot;,<br/> &quot;master&quot;: &quot;postgresqlk8s-master.&lt;namespace&gt;.svc.cluster.local&quot;<br/> }<br/> }<br/>}<br/>```<br/><br/>Для подключения используйте значение `master.master.master` (host для записи) или соответствующее значение slave (host для чтения).<br/><br/>Для подключения используется порт **5432**.<br/><br/>---<br/>## 4. Управление пользователями<br/><br/>### create_user — Создание пользователя<br/><br/>* **Имя пользователя (username):**<br/> Имя создаваемого пользователя. Используется для подключения к базе и настройки прав.<br/> Пример: `myapp_user`<br/><br/>* **Роль (role):**<br/> Тип роли пользователя. Допустимые значения:<br/> - `app_user` — базовые права для DML-операций (SELECT, INSERT, UPDATE, DELETE)<br/> - `ddl_user` — расширенные права: createdb, createrole (управление базами и ролями)<br/><br/>Защищённые имена, которые нельзя использовать: `admin`, `postgres`, `standby`.<br/><br/>### delete_user — Удаление пользователя<br/><br/>* **Имя пользователя (username):**<br/> Имя удаляемого пользователя. Пример: `myapp_user`<br/><br/>Пользователя нельзя удалить, если он является владельцем базы данных. Сначала удалите или передайте владение базами данных другому пользователю.<br/><br/>---<br/>## 5. Управление базами данных<br/><br/>### create_database — Создание базы данных<br/><br/>* **Имя базы данных (dbName):**<br/> Название создаваемой базы данных. Пример: `myapp_db`<br/><br/>* **Владелец базы данных (dbOwner):**<br/> Имя пользователя-владельца базы. Должен существовать в кластере (создан через create_user). Пример: `myapp_user`<br/><br/>### delete_database — Удаление базы данных<br/><br/>* **Имя базы данных (dbName):**<br/> Название удаляемой базы данных. Пример: `myapp_db`<br/>'
lifecycle:
suspend_on_destroy_default: true
adopt_existing_on_create_default: false
outputs:
params:
- code: state_params
type: map
- code: state_out
type: map
- code: state_params_flat
type: map
- code: state_out_flat
type: map
- code: vault_secrets
type: map
sensitive: true
- code: vault_url
type: string
- code: vault_user_path
type: string
- code: vault_fields
type: list
operations:
- name: create
id: 19
kind: instance
action: create
man: руководство
params:
- id: 23
code: s3Uid
data_type: uuid
required: true
ref_svc_id: 12
descr: Экземпляр (учетная запись) S3 для резервного копирования. Резервное копирование обязательно
man: Экземпляр (учетная запись) S3 для резервного копирования. Резервное копирование обязательно
sort: 20
- id: 80
code: resourceInstances
data_type: integer &gt; 0
required: true
default: "1"
regex: ^[1357]$
maxvalue: 7
minvalue: 1
descr: Количество узлов
man: Количество узлов в кластере. 1,3,5,7
sort: 60
is_modifiable: true
- id: 81
code: resourceMemory
data_type: integer &gt; 0
required: true
default: "512"
maxvalue: 8192
minvalue: 128
descr: Квота памяти пода (MBytes)
man: Квота памяти пода (MBytes)
sort: 40
is_modifiable: true
- id: 82
code: resourceCPU
data_type: integer &gt; 0
required: true
default: "500"
maxvalue: 4000
minvalue: 100
descr: Квота ядра пода (milicores)
man: Квота ядра пода (milicores)
sort: 30
is_modifiable: true
- id: 83
code: resourceDisk
required: true
default: "10"
maxvalue: 999
minvalue: 1
descr: Квота диска (Указывается в GIGAbytes)
man: Квота диска (Указывается в GIGAbytes)
sort: 50
is_modifiable: true
- id: 102
code: resourceRealm
data_type: string
required: true
func: getAvailableResourceRealms
descr: Платформа для развертывания
man: Кластер Kubernetes, на котором будет развернут экземпляр
sort: 10
- id: 145
code: needExternalAddressMaster
data_type: boolean
required: false
default: "false"
value_list:
- "false"
- "true"
descr: Выделяет внешний (белый) IP для доступа к master
man: Выделяет внешний (белый) IP для доступа к master
sort: 70
is_modifiable: true
- id: 146
code: needExternalAddressSlave
data_type: boolean
required: false
default: "false"
value_list:
- "false"
- "true"
descr: Выделяет внешний (белый) IP для доступа к slave. Будет работать, если slave в принципе есть
man: Выделяет внешний (белый) IP для доступа к slave. Будет работать, если slave в принципе есть
sort: 90
is_modifiable: true
- id: 265
code: ext_BACKUP_SCHEDULE
data_type: string
required: false
default: 0 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))+)$
man: Не обязательный. Время запуска бекапа
sort: 150
is_modifiable: true
- id: 266
code: ext_BACKUP_NUM_TO_RETAIN
data_type: integer &gt; 0
required: false
default: "7"
maxvalue: 99
minvalue: 1
man: Не обязательный. Количество сохраняемых бекапов
sort: 140
is_modifiable: true
- id: 310
code: appVersion
data_type: string
required: true
default: "17"
value_list:
- "17"
- "16"
descr: Версия PostgreSQL
sort: 160
is_modifiable: true
- id: 311
code: jsonParameters
data_type: json
required: true
default: '{ "log_connections": "off", "log_disconnections": "off" }'
maxlength: 2048
descr: Массив переменных, более подробнее про настройку можно посмотреть https://www.postgresql.org/docs/current/runtime-config.html
sort: 170
is_modifiable: true
- id: 312
code: enablePgPoolerMaster
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: Включает pgPooler (на запись). Будет создан новый под
sort: 180
is_modifiable: true
- id: 313
code: enablePgPoolerSlave
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: Включает pgPooler (на чтение). Будет создан новый под
sort: 190
is_modifiable: true
- id: 314
code: allowNoSSL
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: По умолчанию подключение обязательное (sslmode=require). Выставление в true отключит этот параметр
sort: 200
is_modifiable: true
- id: 329
code: autoScale
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
sort: 300
- id: 330
code: autoScalePercentage
data_type: integer &gt; 0
required: true
default: "10"
value_list:
- "10"
- "15"
- "20"
descr: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
sort: 310
- id: 331
code: autoScaleTechWindow
data_type: integer &gt;= 0
required: true
default: "0"
value_list:
- "0"
- "5"
- "12"
- "23"
descr: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
sort: 320
- id: 337
code: ipSpaceNameMaster
data_type: string
required: false
descr: 'Имя ipSpace для публикации VIP master. Не может быть пустым, если включен needExternalAddressMaster. Пример: `internet-no-antiddos-v1`'
sort: 80
is_modifiable: true
- id: 338
code: ipSpaceNameSlave
data_type: string
required: false
descr: Имя ipSpace для публикации VIP slave. Не может быть пустым, если включен needExternalAddressSlave
sort: 100
is_modifiable: true
- id: 339
code: autoScaleQuotaGb
data_type: string
required: true
default: "1"
descr: Квота для autoScale
sort: 330
- name: create_database
id: 245
kind: subresource
action: create
subresource: database
params:
- id: 741
code: dbName
data_type: string
required: true
- id: 742
code: dbOwner
data_type: string
required: true
- name: create_user
id: 241
kind: subresource
action: create
subresource: user
params:
- id: 733
code: username
data_type: string
required: true
regex: ^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$
maxlength: 62
minlength: 2
- id: 740
code: role
data_type: string
required: true
value_list:
- app_user
- ddl_user
descr: Выбрать роль из списка
man: '`app_user` — стандартный пользователь с базовым набором прав<br/>`ddl_user` — пользователь с расширенными правами, включая управление ролями и базами данных'
- name: delete
id: 20
kind: instance
action: delete
params:
- id: 457
code: deleteS3Bucket
data_type: boolean
required: true
default: "true"
value_list:
- "false"
- "true"
descr: Также удалить технический S3 Bucket с бэкапами?
sort: 10
- name: delete_database
id: 246
kind: subresource
action: delete
subresource: database
params:
- id: 743
code: dbName
data_type: string
required: true
- name: delete_user
id: 244
kind: subresource
action: delete
subresource: user
params:
- id: 739
code: username
data_type: string
required: true
descr: 'Пример: `username-admin`'
- name: modify
id: 48
kind: instance
action: modify
params:
- id: 91
code: resourceInstances
data_type: integer &gt; 0
required: false
maxvalue: 7
minvalue: 1
descr: Количество узлов
man: Количество узлов в сети
sort: 40
- id: 92
code: resourceMemory
data_type: integer &gt; 0
required: false
maxvalue: 8192
minvalue: 128
descr: Квота памяти пода (MBytes)
man: Квота памяти пода (MBytes)
sort: 20
- id: 93
code: resourceCPU
data_type: integer &gt; 0
required: false
maxvalue: 4000
minvalue: 100
descr: Квота ядра пода (milicores)
man: Квота ядра пода (milicores)
sort: 10
- id: 94
code: resourceDisk
data_type: integer &gt; 0
required: false
maxvalue: 999
minvalue: 1
descr: Квота диска (Указывается в GIGAbytes)
man: Квота диска (Указывается в GIGAbytes)
sort: 30
- id: 147
code: needExternalAddressMaster
data_type: boolean
required: true
value_list:
- "false"
- "true"
descr: Выделяет внешний IP для доступа к master
man: Выделяет внешний IP для доступа к master
sort: 50
- id: 148
code: needExternalAddressSlave
data_type: boolean
required: true
value_list:
- "false"
- "true"
descr: Выделяет внешний IP для доступа к slave. Действует, если slave в принципе есть
man: Выделяет внешний IP для доступа к slave. Действует, если slave в принципе есть
sort: 70
- id: 267
code: ext_BACKUP_SCHEDULE
data_type: string
required: false
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))+)$
man: Не обязательный. Время запуска бекапа
sort: 90
- id: 268
code: ext_BACKUP_NUM_TO_RETAIN
data_type: integer &gt; 0
required: false
maxvalue: 99
minvalue: 1
man: Не обязательный. Количество сохраняемых бекапов
sort: 100
- id: 315
code: appVersion
data_type: string
required: true
value_list:
- "17"
- "16"
descr: Версия PostgreSQL. Нельзя опускать вниз
sort: 110
- id: 316
code: jsonParameters
data_type: json
required: false
maxlength: 2048
descr: Массив переменных, более подробнее про настройку можно посмотреть https://www.postgresql.org/docs/current/runtime-config.html
sort: 120
- id: 317
code: enablePgPoolerMaster
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: Включает pgPooler (на запись). Будет создан новый под
sort: 130
- id: 318
code: enablePgPoolerSlave
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: Включает pgPooler (на чтение). Будет создан новый под
sort: 140
- id: 319
code: allowNoSSL
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: По умолчанию подключение обязательное (sslmode=require). Выставление в true отключит этот параметр
sort: 150
- id: 541
code: ipSpaceNameMaster
data_type: string
required: false
descr: 'Имя ipSpace для публикации VIP master. Не может быть пустым, если включен needExternalAddressMaster. Пример: `internet-no-antiddos-v1`'
sort: 60
- id: 542
code: ipSpaceNameSlave
data_type: string
required: false
descr: Имя ipSpace для публикации VIP slave. Не может быть пустым, если включен needExternalAddressSlave
sort: 80
- name: recovery
id: 47
kind: action
action: recovery
params:
- id: 86
code: resourceInstances
data_type: integer &gt; 0
required: true
default: "1"
maxvalue: 7
minvalue: 1
descr: Количество узлов
man: Количество узлов в сети<br/>
sort: 50
- id: 87
code: resourceMemory
data_type: integer &gt; 0
required: true
default: "512"
maxvalue: 8192
minvalue: 128
descr: Квота памяти пода (Указывается в Megabytes)<br/>
man: Квота памяти пода (Указывается в Megabytes)<br/>
sort: 30
- id: 88
code: resourceCPU
data_type: integer &gt; 0
required: true
default: "500"
maxvalue: 4000
minvalue: 100
descr: Квота ядра пода (Указывается в mili)<br/>
man: Квота ядра пода (Указывается в mili)<br/>
sort: 20
- id: 89
code: resourceDisk
data_type: integer &gt; 0
required: true
default: "1"
maxvalue: 999
minvalue: 1
descr: Квота диска (Указывается в GIGAbytes)
man: Квота диска (Указывается в GIGAbytes)
sort: 40
- id: 131
code: resourceRealm
data_type: string
required: true
func: getAvailableResourceRealms
descr: Платформа для развертывания
man: Наименование кластера Kubernetes для подключения
sort: 10
- name: restart
id: 54
kind: action
action: restart
man: ВНИМАНИЕ - Рестарт предполагает УДАЛЕНИЕ подов.<br/>Может быть полная поломка. Крайне осторожно запускать при работе
params: []
- name: resume
id: 114
kind: instance
action: resume
params: []
- name: suspend
id: 115
kind: instance
action: suspend
params: []