add: documentation

This commit is contained in:
“Naeel”
2026-06-30 15:45:24 +04:00
parent 540c1f7293
commit ca276d200f
1055 changed files with 47294 additions and 0 deletions
+435
View File
@@ -0,0 +1,435 @@
.md-typeset {
font-size: 0.82rem;
line-height: 1.5;
}
.md-typeset h1 {
font-size: 1.15rem;
line-height: 1.25;
}
.md-typeset h2 {
font-size: 1rem;
line-height: 1.3;
}
.md-typeset h3 {
font-size: 0.92rem;
line-height: 1.35;
}
/* Full-width resource pages without right TOC */
.md-sidebar--secondary {
display: none;
}
.md-content,
.md-content__inner,
.md-main__inner {
max-width: 100%;
}
.md-content__inner {
margin-right: 0;
}
/* Keep horizontal scrollbars visible for wide tables */
.md-typeset__scrollwrap {
overflow-x: auto;
padding-bottom: 0.3rem;
}
/* Column sizing for resource tables */
.resource-table {
width: 100%;
table-layout: auto;
border-collapse: collapse;
font-size: 0.82rem;
line-height: 1.5;
}
.resource-table th,
.resource-table td {
padding: 0.3rem 0.5rem;
vertical-align: top;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
font-size: 0.82rem;
}
.resource-table thead th {
font-weight: 700;
}
.resource-table th:nth-child(1),
.resource-table td:nth-child(1) {
width: 6%;
white-space: nowrap;
text-align: center;
}
.resource-table th:nth-child(2),
.resource-table td:nth-child(2) {
width: auto;
max-width: 40ch;
white-space: normal;
}
.resource-table td:nth-child(2) code {
font-weight: 700;
font-size: inherit;
}
.resource-table th:nth-child(3),
.resource-table td:nth-child(3),
.resource-table th:nth-child(4),
.resource-table td:nth-child(4),
.resource-table th:nth-child(5),
.resource-table td:nth-child(5) {
white-space: nowrap;
width: 6%;
}
.resource-table th:nth-child(4),
.resource-table td:nth-child(4) {
text-align: center;
}
.resource-table th:nth-child(5),
.resource-table td:nth-child(5) {
width: 8%;
white-space: normal;
overflow-wrap: anywhere;
font-size: 0.72rem;
}
.resource-table th:nth-child(6),
.resource-table td:nth-child(6) {
white-space: normal;
overflow-wrap: anywhere;
word-break: normal;
font-size: 0.72rem;
}
.resource-table th:nth-child(7),
.resource-table td:nth-child(7) {
white-space: normal;
overflow-wrap: anywhere;
word-break: normal;
font-size: 0.72rem;
}
.md-header__button.md-logo img,
.md-header__button.md-logo svg {
height: 34px;
width: auto;
}
body[data-md-url*="/vc_vm_v3/"] .md-typeset {
font-size: 0.98rem;
}
body[data-md-url*="_instruction"] .md-typeset {
font-size: 0.51rem;
line-height: 1.45;
}
body[data-md-url*="_instruction"] .md-typeset h1 {
font-size: 1.05rem;
}
body[data-md-url*="_instruction"] .md-typeset h2 {
font-size: 0.95rem;
}
body[data-md-url*="_instruction"] .md-typeset h3 {
font-size: 0.88rem;
}
/* Instruction pages have a second h1 containing the body text */
.md-typeset h1 + h1 {
font-size: 0.58rem;
line-height: 1.45;
font-weight: 400;
}
.resource-table td:nth-child(2) code.code-no-wrap {
white-space: nowrap !important;
word-break: keep-all !important;
overflow-wrap: normal !important;
hyphens: none !important;
display: inline-block;
}
.resource-table td:nth-child(2) code.code-wrap {
white-space: normal !important;
word-break: normal !important;
overflow-wrap: normal !important;
hyphens: none !important;
}
/* Preview: reduce MAN content size only. */
.man-content {
font-size: 0.62rem;
line-height: 1.45;
}
.copy-ready-badges {
margin: 0.5rem 0 0.75rem 0;
}
.copy-ready-badges .badge {
display: inline-block;
padding: 0.1rem 0.5rem;
margin-right: 0.4rem;
border-radius: 999px;
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.02em;
text-transform: uppercase;
}
.copy-ready-badges .badge-tf {
background: #ffe7b3;
color: #7a4b00;
}
.copy-ready-badges .badge-provider {
background: #cfe9ff;
color: #0b3d91;
}
.copy-ready-badges .badge-resource {
background: #e2f7d9;
color: #1f6b1f;
}
.copy-ready-code .na {
color: #1d4ed8;
}
.copy-ready-code .s2,
.copy-ready-code .m,
.copy-ready-code .no,
.copy-ready-code .nv {
color: #b45309;
}
.copy-ready-code {
overflow-x: auto;
}
.copy-ready-code .token-keyword {
color: #2f855a;
}
.copy-ready-code .token-type {
color: #0b5ed7;
}
.copy-ready-code .token-name {
color: #0f766e;
}
.copy-ready-code .token-attr {
color: #1d4ed8;
}
.copy-ready-code .token-value {
color: #b45309;
}
.copy-ready-code .token-comment {
color: #6b7280;
}
.copy-ready-code .token-type {
color: #c026d3;
}
.man-content .man-inline {
color: #0b5ed7;
background: #eef5ff;
padding: 0.05rem 0.2rem;
border-radius: 4px;
}
.man-content .man-code {
color: #1f2937;
background: #f5f7fb;
padding: 0.75rem 1rem;
border-radius: 6px;
overflow-x: auto;
}
.man-content .man-code .kw {
color: #2f855a;
}
.man-content .man-op {
color: #b42318;
font-weight: 700;
}
.man-content .man-kw {
color: #2f855a;
font-weight: 600;
}
.man-content .man-fn {
color: #0f766e;
}
.man-content .man-str {
color: #b45309;
}
.man-content .man-num {
color: #1d4ed8;
}
.man-content .man-flag {
color: #0b5ed7;
}
.params-columns {
display: flex;
gap: 1.5rem;
align-items: flex-start;
flex-wrap: wrap;
}
.params-column {
flex: 1 1 480px;
min-width: 320px;
}
.params-column h2 {
margin-top: 0;
}
/* Compact table variant for create params. */
.resource-table-compact {
font-size: 0.66rem;
line-height: 1.4;
}
.resource-table-compact th,
.resource-table-compact td {
padding: 0.24rem 0.4rem;
font-size: 0.66rem;
}
.resource-table-compact th:nth-child(1),
.resource-table-compact td:nth-child(1) {
width: 6%;
white-space: nowrap;
text-align: center;
}
.resource-table-compact th:nth-child(2),
.resource-table-compact td:nth-child(2) {
width: auto;
max-width: 40ch;
white-space: normal;
}
.resource-table-compact th:nth-child(3),
.resource-table-compact td:nth-child(3),
.resource-table-compact th:nth-child(4),
.resource-table-compact td:nth-child(4) {
white-space: nowrap;
width: 8%;
}
.resource-table-compact th:nth-child(4),
.resource-table-compact td:nth-child(4) {
text-align: center;
}
.resource-table-compact th:nth-child(5),
.resource-table-compact td:nth-child(5) {
white-space: normal;
overflow-wrap: anywhere;
font-size: 0.62rem;
}
.resource-table-compact th:nth-child(6),
.resource-table-compact td:nth-child(6) {
white-space: normal;
overflow-wrap: anywhere;
word-break: normal;
font-size: 0.62rem;
}
/* Create params column sizing overrides. */
.resource-table-compact {
table-layout: auto;
}
.resource-table-compact th:nth-child(2),
.resource-table-compact td:nth-child(2) {
width: 1%;
white-space: nowrap;
}
.resource-table-compact td:nth-child(2) code {
white-space: nowrap;
}
.resource-table-compact th:nth-child(5),
.resource-table-compact td:nth-child(5) {
width: 52%;
}
.resource-table-compact th:nth-child(6),
.resource-table-compact td:nth-child(6) {
width: 18%;
}
/* Required table (no Default column) column sizing. */
.resource-table-required {
table-layout: auto;
}
.resource-table-required th:nth-child(2),
.resource-table-required td:nth-child(2) {
width: 1%;
white-space: nowrap;
}
.resource-table-required td:nth-child(2) code {
white-space: nowrap;
}
.resource-table-required th:nth-child(4),
.resource-table-required td:nth-child(4) {
width: 58%;
}
.resource-table-required th:nth-child(5),
.resource-table-required td:nth-child(5) {
width: 18%;
}
/* Required table: left-align Description column. */
.resource-table-required th:nth-child(4),
.resource-table-required td:nth-child(4) {
text-align: left;
white-space: normal;
}
/* Lifecycle note styling in create params. */
.lifecycle-note {
font-size: 0.66rem;
line-height: 1.45;
margin-top: 0.6rem;
}
/* Modify params: left-align Description column. */
.resource-table-compact th:nth-child(4),
.resource-table-compact td:nth-child(4) {
text-align: left;
white-space: normal;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1017 B

+25
View File
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Creator: CorelDRAW -->
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="82.3711mm" height="18.2443mm" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="0 0 8221.93 1821.07"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
<defs>
<style type="text/css">
<![CDATA[
.fil0 {fill:#001C34}
]]>
</style>
</defs>
<g id="Слой_x0020_1">
<metadata id="CorelCorpID_0Corel-Layer"/>
<g id="_2283355517888">
<path class="fil0" d="M477.49 479.69l-413.51 0 -63.98 276.48 178.44 0 1.17 1028.71 0 26.75 0.03 0 276.39 0 0 -871.72c0,-101.28 82.43,-183.69 183.75,-183.69l589.25 3.44c101.34,0 183.76,82.46 183.76,183.74l0 871.72 276.44 0 0 -871.72c0,-253.77 -206.46,-460.15 -460.05,-460.15l-589.52 -3.53 -162.17 0.45 0 -0.48z"/>
<path class="fil0" d="M6664.65 1813.37l1181.04 0c212.14,0 376.24,-175.01 376.24,-387.08 0,-212.13 -172.55,-384.68 -384.69,-384.68l-653.66 0c-60.22,0 -109.16,-48.94 -109.16,-109.18l0 -66.18c0,-60.19 48.94,-109.14 109.16,-109.14l695.76 0 63.74 -275.49 -759.5 0c-212.13,0 -384.66,172.53 -384.66,384.63l0 66.18c0,212.13 172.53,384.67 384.66,384.67l653.66 0c60.2,0 109.2,49 109.2,109.19 0,60.13 -49,116.1 -109.2,116.1l-1118.9 0 -53.68 270.98z"/>
<path class="fil0" d="M6200.79 483.5l-723.21 0c-215.88,0 -391.47,175.6 -391.47,391.51l0 485.5c0,248.38 202.05,450.4 450.4,450.4l989.38 0 62.13 -268.51 -1051.51 0c-96.41,0 -174.95,-85.37 -174.95,-181.88l-1.5 -39.46 923.62 0 308.51 -1.84 0 -237.95 0 -206.26c0,-215.91 -175.59,-391.51 -391.41,-391.51zm115.96 560.28l-955.19 0 0 -168.77c0,-63.96 52.07,-116.05 116.02,-116.05l723.21 0c63.91,0 115.96,52.08 115.96,116.05l0 168.77z"/>
<path class="fil0" d="M4683.49 1194.24l0 168.28c0,100.92 -81.7,178.37 -182.67,178.37l-589.87 1.23c-93.18,0 -170.28,-69.96 -181.63,-160.09l0 -458.13c11.36,-90.1 88.46,-160.07 181.63,-160.07l589.44 3.5c100.97,0 183.1,82.18 183.1,183.1l0 30.42 0 213.4zm-1230.2 -345.53l-0.89 -795.03 276.91 -53.68 0 526.07c55.74,-24.16 117.03,-37.74 181.5,-37.74l589.71 3.5c252.69,0 458.42,205.72 458.42,458.59l0 30.42 0 213.4 0 168.28c0,252.86 -205.73,458.54 -458.42,458.54l-589.71 -3.5c-252.7,0 -458.41,-205.67 -458.41,-458.56l0 -171.61 0 -240.48 0.89 -98.2z"/>
<path class="fil0" d="M3041.25 1150.84l0 204.28c0,100.93 -82.15,183.05 -183.11,183.05l-582.11 -3.46c-100.96,0 -183.11,-82.16 -183.11,-183.08l0 -67.42 1.48 0.24 0 -862.65 -276.91 53.68 0.12 103.41 -0.12 0.04 0 772.69c0,252.87 205.72,458.54 458.39,458.54l582.4 3.5c252.67,0 458.4,-205.68 458.4,-458.55l0 -70.79 0.71 0.12 0 -862.65 -276.91 53.68 0.76 675.35z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

+4
View File
@@ -0,0 +1,4 @@
/* Preview only: reduce content font size without changing navigation. */
.md-content {
font-size: 25% !important;
}
+368
View File
@@ -0,0 +1,368 @@
# Начало работы с Nubes Terraform
Это руководство поможет вам установить инструменты, настроить доступ и развернуть вашу первую инфраструктуру в облаке Nubes, используя Terraform.
## 0. Установка Terraform
Для работы с инфраструктурой как кодом (IaC) потребуется утилита Terraform (версии 1.0 или выше).
1. **Скачивание**:
* Официальный сайт: [hashicorp.com/terraform/install](https://developer.hashicorp.com/terraform/install)
* *Для пользователей из РФ (без VPN):* [Yandex Cloud Mirror](https://hashicorp-releases.yandexcloud.net/terraform/)
2. **Установка**:
* Распакуйте скачанный архив.
* Поместите исполняемый файл (`terraform` или `terraform.exe`) в папку, доступную в переменной окружения `PATH`.
3. **Проверка**:
* Откройте терминал (PowerShell, CMD, Bash или Terminal в macOS).
* Введите команду `terraform -version`. Вы должны увидеть номер версии.
## 1. Подготовка конфигурации
Создайте рабочую директорию для вашего проекта и создайте основной файл конфигурации `main.tf`.
```hcl title="main.tf"
terraform {
required_providers {
nubes = {
source = "terra.k8c.ru/nubes/nubes"
version = "2.1.23" # Поставьте нужную вам версию провайдера
}
}
}
provider "nubes" {
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
api_token = var.api_token
}
variable "api_token" {
type = string
sensitive = true
}
```
!!! info "TEST стенд (обязательные адреса)"
Эта документация относится к TEST стенду.
- Личный кабинет: https://deck-test.ngcloud.ru/dashboard/
- API endpoint: https://deck-api-test.ngcloud.ru/api/v1
!!! tip "Безопасность"
Никогда не храните токен прямо в файле `main.tf`, если планируете загружать код в систему контроля версий (git). Используйте `variables.tf` или файл `terraform.tfvars`.
## 2. Получение API токена
Токен (Access Token) необходим провайдеру для авторизации ваших действий в облаке.
Если нет ТОКЕНА доступа или хотите создать новый -
В Личном Кабинете - на странице Профиля пользователя https://deck.ngcloud.ru/authorization/profile
во вкладке Токены - нажать "Выпустить тех-токен"
Значение токена показывается только при его создании, надо его сохранить
Создайте файл `terraform.tfvars` и сохраните токен там:
```hcl title="terraform.tfvars"
api_token = "eyJhbGciOiJ..." # Ваш длинный токен
```
## 3. Описание ресурсов
Добавьте ресурсы, которые вы хотите создать, в файл `main.tf` или `resources.tf`.
Пример создания S3 бакета:
```hcl
resource "nubes_s3bucket" "my_files" {
resource_name = "bucket_0"
bucket_name = "my-unique-bucket-name"
s3_user_uid = "235e0546-..." # UID Корневой услуги S3
}
```
Или Postgres кластера:
```hcl
resource "nubes_postgres" "db" {
resource_name = "pg-tst0"
resource_realm = "k8s-3.ext.nubes.ru" # Платформа развертывания
s3_uid = "235e0546-..." # UUID услуги S3 для бэкапов
resource_c_p_u = 2000 # 2 vCPU (в милликорах)
resource_memory = 4096 # 4 GB (в МБ)
resource_disk = "20" # 20 GB
resource_instances = 1
}
```
Подробные примеры конфигураций смотрите в разделе **Resources** документации.
## 4. Запуск
Теперь вы готовы применить конфигурацию:
1. **Инициализация**: `terraform init` (загружает плагин провайдера).
2. **План**: `terraform plan` (показывает, что будет сделано).
3. **Применение**: `terraform apply` (создает инфраструктуру).
## 5. Почему провайдер использует Suspend/Adopt
Для этой логики используются два флага.
- `suspend_on_destroy`
- `adopt_existing_on_create`
### `suspend_on_destroy`
- `true` (по умолчанию)
- при `terraform destroy` инстанс уходит в `Suspend`;
- при удалении ресурса из манифеста — тоже `Suspend`.
- `false`
- Terraform удаляет ресурс только из state;
- в облаке инстанс не меняется.
### `adopt_existing_on_create`
- `false` (по умолчанию)
- если инстанс уже существует, Terraform вернёт ошибку.
- `true`
- Terraform может взять существующий инстанс под управление.
### Как это связано с `terraform import`
Это похоже на `terraform import`,
но срабатывает в обычном `apply`.
- найден `running` → `adopt`;
- найден `suspended` + обязательные параметры совпадают → `resume + adopt`.
### Важно
Один инстанс должен быть только в одном state.
Если подключить один инстанс
к двум манифестам,
получится конфликт управления:
- первый `apply` меняет ресурс;
- второй `apply` откатывает
или перезаписывает изменения.
---
Следующий шаг: изучите [Справочник по командам Terraform](terraform-basics.md) для уверенной работы.
## Примеры
### Lucee & Postgress
Lucee и NodeJS — это два отдельных UI для CRUD‑операций, оба работают с одной и той же таблицей в Postgres.
```hcl title="resources.tf"
resource "nubes_postgres" "db2" {
# Основной Postgres-кластер для демо.
resource_name = "pg-tst0"
s3_uid = "235e0546-..."
resource_realm = "k8s-3.ext.nubes.ru" # Платформа развертывания
resource_instances = 1
resource_memory = 512
resource_c_p_u = 500
resource_disk = "1"
app_version = "17"
json_parameters = jsonencode({
# Выключаем подробные логи подключений в демо.
log_connections = "off"
log_disconnections = "off"
})
enable_pg_pooler_master = false
enable_pg_pooler_slave = false
allow_no_s_s_l = false
auto_scale = false
auto_scale_percentage = 10
auto_scale_tech_window = 0
auto_scale_quota_gb = "1"
need_external_address_master = false
}
resource "nubes_lucee" "app1" {
# Lucee UI, который читает/пишет в Postgres.
resource_name = "lucy1"
resource_realm = nubes_postgres.db2.resource_realm
domain = "web03" # Пример домена приложения
git_path = "https://gitea-naeel.giteak8s.services.ngcloud.ru/naeel/testlucee.git"
json_env = jsonencode({
# JDBC datasource для Lucee.
testds_class = "org.postgresql.Driver"
testds_bundleName = "org.postgresql.jdbc"
testds_bundleVersion = "42.6.0"
testds_connectionString = "jdbc:postgresql://${nubes_postgres.db2.state_out_flat["internalConnect.master"]}:5432/postgres"
testds_username = nubes_postgres.db2.vault_secrets["adminUser"]
testds_password = nubes_postgres.db2.vault_secrets["adminPass"]
testds_connectionLimit = "5"
testds_liveTimeout = "15"
testds_validate = "false"
})
resource_c_p_u = 300
resource_memory = 512
resource_instances = 1
app_version = "5.4"
depends_on = [nubes_postgres.db2]
}
resource "nubes_nodejs" "app3" {
# NodeJS демо, работающий с тем же Postgres.
resource_name = "node_0"
resource_realm = nubes_postgres.db2.resource_realm
domain = "node"
git_path = "https://gitea-naeel.giteak8s.services.ngcloud.ru/naeel/testnode.git"
health_path = "/healthz"
app_version = "23"
json_env = jsonencode({
# Переменные подключения к Postgres.
PGHOST = nubes_postgres.db2.state_out_flat["internalConnect.master"]
PGPORT = "5432"
PGUSER = nubes_postgres.db2.vault_secrets["adminUser"]
PGPASSWORD = nubes_postgres.db2.vault_secrets["adminPass"]
PGSSLMODE = "require"
DATABASE_URL = format(
"postgresql://%s:%s@%s:5432/postgres",
nubes_postgres.db2.vault_secrets["adminUser"],
nubes_postgres.db2.vault_secrets["adminPass"],
nubes_postgres.db2.state_out_flat["internalConnect.master"]
)
})
resource_c_p_u = 300
resource_memory = 256
resource_instances = 1
depends_on = [nubes_postgres.db2]
}
```
### Пример (PROD_STAND/RABBIT)
Ниже полный пример `resources.tf` для RabbitMQ + Lucee UI + NodeJS воркера.
Комментарий: UI Lucee отправляет CRUD‑запросы в RabbitMQ, а применение изменений в Postgres выполняет отдельный воркер на NodeJS.
Сервис Postgres должен быть запущен заранее. В данном примере используется Postgres из раздела https://terra.k8c.ru/docs/nubes/nubes/2.1.7/30_registry/guides/getting-started/#lucee-postgress
```hcl title="resources.tf"
# RabbitMQ кластер для демо.
resource "nubes_rabbitmq" "rb1" {
resource_name = "rabbit_0"
resource_realm = "k8s-3.ext.nubes.ru"
resource_instances = 1
resource_memory = 512
resource_c_p_u = 500
resource_disk = 5
need_external_address_master = false
need_external_address_slave = false
}
# Lucee UI, который пишет в Rabbit и читает из Postgres.
resource "nubes_lucee" "rabbit_ui" {
resource_name = "rb-lucee-ui"
resource_realm = "k8s-3.ext.nubes.ru"
domain = "rb-ui"
app_version = "5.4"
git_path = "https://gitea-naeel.giteak8s.services.ngcloud.ru/naeel/rabbit-lsd"
resource_c_p_u = 300
resource_memory = 512
resource_instances = 1
# Переменные окружения для datasource, Rabbit и UI.
json_env = jsonencode({
testds_bundleName = "org.postgresql.jdbc"
testds_bundleVersion = "42.6.0"
testds_class = "org.postgresql.Driver"
testds_connectionLimit = "5"
testds_connectionString = "jdbc:postgresql://${var.PGHOST}:5432/postgres"
testds_liveTimeout = "15"
testds_username = var.PGUSER
testds_password = var.PGPASSWORD
testds_validate = "false"
PG_TABLE = "rabbit_messages"
UI_LOG_TABLE = "rabbit_ui_log"
RABBIT_HOST = try(nubes_rabbitmq.rb1.state_out_flat["internalConnect.master"], nubes_rabbitmq.rb1.state_out_flat["inernalConnect.master"])
RABBIT_PORT = "5672"
RABBIT_USER = nubes_rabbitmq.rb1.vault_secrets["adminUser"]
RABBIT_PASSWORD = nubes_rabbitmq.rb1.vault_secrets["adminPass"]
RABBIT_VHOST = "/"
RABBIT_QUEUES = "crud_queue"
RABBIT_DURABLE = "true"
RABBIT_ADMIN_URL = "https://${nubes_rabbitmq.rb1.state_out_flat["externalConnect.admin.fqdn"]}/#/"
NODEWORKER_URL = "https://nodeworker.nodejsk8s.services.ngcloud.ru/"
})
depends_on = [nubes_rabbitmq.rb1]
}
# NodeJS воркер, который переносит CRUD из очереди в Postgres.
resource "nubes_nodejs" "rabbit_nodeworker" {
resource_name = "nodeworker"
resource_realm = "k8s-3.ext.nubes.ru"
domain = "nodeworker"
app_version = "23"
git_path = "https://gitea-naeel.giteak8s.services.ngcloud.ru/naeel/rabbit-nodeworker.git"
health_path = "/healthz"
resource_c_p_u = 100
resource_memory = 256
resource_instances = 1
# Параметры подключения к Rabbit и Postgres.
json_env = jsonencode({
RABBIT_HOST = try(nubes_rabbitmq.rb1.state_out_flat["internalConnect.master"], nubes_rabbitmq.rb1.state_out_flat["inernalConnect.master"])
RABBIT_PORT = "5672"
RABBIT_USER = nubes_rabbitmq.rb1.vault_secrets["adminUser"]
RABBIT_PASSWORD = nubes_rabbitmq.rb1.vault_secrets["adminPass"]
RABBIT_VHOST = "/"
RABBIT_QUEUES = "crud_queue"
RABBIT_DURABLE = "true"
RABBIT_PREFETCH = "1"
REQUEUE_ON_ERROR = "true"
PGHOST = var.PGHOST
PGPORT = "5432"
PGUSER = var.PGUSER
PGPASSWORD = var.PGPASSWORD
PGDATABASE = "postgres"
PGSSLMODE = "require"
PG_TABLE = "rabbit_messages"
})
depends_on = [nubes_rabbitmq.rb1]
}
# Ручной триггер redeploy для воркера.
resource "nubes_nodejs_redeploy" "rabbit_nodeworker_redeploy" {
nodejs_id = nubes_nodejs.rabbit_nodeworker.id
resource_realm = "k8s-3.ext.nubes.ru"
run_id = "redeploy-2026-02-23-011"
}
```
```hcl title="variables.tf"
// Postgres уже запущен, значения берутся из UI Личного кабинета.
variable "PGUSER" {
type = string
default = "postgres"
}
variable "PGPASSWORD" {
type = string
default = "" # пароль укажите вручную, в примере не публикуем
}
variable "PGHOST" {
type = string
default = "postgresqlk8s-master.<id>.svc.k8s-3.ext.nubes.ru" # оставьте префикс и суффикс, меняется только <id>
}
```
```hcl title="terraform.tfvars"
# Инструкция по получению токена: раздел "Получение API токена"
api_token = "eyJhbGciOiJ..."
```
+53
View File
@@ -0,0 +1,53 @@
# Глоссарий терминов
## Apply
Применение изменений, описанных в Terraform конфигурации. Выполняет создание, изменение или удаление ресурсов.
## Destroy
Полное удаление ресурсов, описанных в конфигурации. Выполняется командой `terraform destroy`.
## Import
Подключение уже существующего ресурса к Terraform state. Импорт не создает ресурс, а только добавляет его в состояние.
Короткий пример:
```bash
terraform import nubes_vc_vm_v3.my_vm <resource_id>
```
## Manifest (манифест)
Набор `.tf` файлов в одной папке, которые Terraform рассматривает как единую конфигурацию.
## Module
Переиспользуемая часть конфигурации Terraform. Может использоваться для шаблонов и типовых наборов ресурсов.
## Plan
Просмотр изменений, которые Terraform собирается применить. Выполняется командой `terraform plan`.
## Resource
Описание управляемого объекта в Terraform. Например, виртуальная машина или сеть.
## Stack (стек)
Отдельный набор ресурсов Terraform, управляемый собственным `terraform state`. Обычно это отдельная папка с `.tf` файлами.
## State
Файл состояния Terraform, в котором хранится информация о созданных ресурсах и их текущих параметрах.
Удаление ресурса только из state (без удаления в облаке):
```bash
terraform state rm nubes_vc_vm_v3.my_vm
```
## Workspace
Логическое разделение одного и того же набора конфигураций по разным окружениям. Имеет отдельные state.
@@ -0,0 +1,79 @@
# S3 Bucket Notifications: изменения в бакете и вызов функции
## Короткий ответ
Да, для S3-совместимого хранилища можно вызывать обработчик при изменениях в бакете через стандартный механизм уведомлений:
- событие в бакете (`ObjectCreated`, `ObjectRemoved`),
- правило уведомления на бакете,
- destination (webhook/queue/topic),
- consumer/функция, которая принимает событие.
## Что проверено в нашем контуре
Проверка выполнялась удалённо (через SSH), не локально.
- API `deck-api-test.ngcloud.ru`:
- есть общий endpoint `/notifications`,
- явных endpoint'ов вида `bucketNotifications`, `events`, `webhooks` в этом API не обнаружено.
- Документация `docs.s3.msk-1.ngcloud.ru`:
- в публичных страницах не найден явный раздел про bucket notifications.
- Прямая проверка S3-слоя:
- `mc event ls <alias>/<bucket>` отработал успешно (код возврата `0`),
- это подтверждает доступность стандартной S3 операции чтения notification-конфигурации;
- пустой вывод означает, что правила ещё не заданы.
## Нужно ли задавать это при создании бакета
Рекомендуется задавать сразу в том же Terraform apply, но это отдельная конфигурация относительно самого факта создания бакета.
Практически правильно так:
1. Создать (или использовать) `S3 Storage service`.
2. Создать бакет.
3. Создать destination для событий (webhook/queue/topic).
4. Назначить notification rule на бакет.
5. Поднять consumer/функцию, которая обрабатывает событие.
## Как это выглядит архитектурно
```text
Bucket (ObjectCreated/ObjectRemoved)
-> Bucket Notification Rule
-> Destination (Webhook / Queue / Topic)
-> Function/Worker (business logic)
```
## Что это значит для Terraform
Лучший путь: один модуль/стек, где декларативно описано сразу всё:
- bucket,
- destination,
- notification rule,
- function/consumer.
Это даёт предсказуемый результат: после `apply` события бакета уже маршрутизируются в обработчик.
## Если notifications недоступны в конкретном backend
Fallback — polling:
- периодический опрос бакета,
- сравнение состояния (`key + etag/version_id + mtime`),
- вызов функции только на diff.
## Проверка и настройка через CLI
Пример скрипта в репозитории:
- `scripts/s3_notification_example.sh`
Скрипт:
- читает `.s3cfg`,
- показывает текущие правила,
- добавляет правило,
- показывает итоговую конфигурацию.
> Важно: для `event add` нужен существующий destination (`TARGET_ARN`) в S3/MinIO-конфигурации.
@@ -0,0 +1,99 @@
# Справочник по Terraform для начинающих
Terraform — это инструмент для управления инфраструктурой как кодом (IaC). Он позволяет вам описывать желаемое состояние вашей инфраструктуры в текстовых файлах, а затем автоматически создавать, изменять и удалять облачные ресурсы, чтобы они соответствовали этому описанию.
Здесь собраны основные команды, которые вы будете использовать в 99% случаев.
## Основной рабочий процесс
### 1. `terraform init`
**"Инициализация"**
Первая команда, которую нужно выполнить в новой директории с конфигурацией.
* Скачивает необходимые плагины (провайдеры), описанные в `main.tf`.
* Настраивает "бэкенд" (хранилище состояния).
```bash
terraform init
```
### 2. `terraform validate`
**"Проверка синтаксиса"**
Проверяет ваши файлы конфигурации (`.tf`) на наличие синтаксических ошибок и корректность использования атрибутов. Не обращается к облаку, только статический анализ.
```bash
terraform validate
```
### 3. `terraform plan`
**"План действий"**
Самая важная команда для безопасности. Она сравнивает ваш код с реальным состоянием облака и показывает, что *произойдет*, если вы примените изменения.
* `+` (зеленый): будет добавлено.
* `~` (желтый): будет изменено.
* `-` (красный): будет удалено.
```bash
terraform plan
```
### 4. `terraform apply`
**"Применение"**
Выполняет действия, запланированные на предыдущем шаге. Создает, меняет или удаляет реальные ресурсы в облаке Nubes.
* Всегда запрашивает подтверждение `yes` перед стартом (если не указан флаг `-auto-approve`).
```bash
terraform apply
```
### 5. `terraform destroy`
**"Уничтожение"**
Удаляет **все** ресурсы, описанные в текущей конфигурации Terraform. Используйте осторожно, чтобы очистить тестовое окружение.
* Также требует подтверждения `yes`.
```bash
terraform destroy
```
## Дополнительные полезные команды
* `terraform fmt`: Автоматически форматирует ваш код (расставляет отступы), делая его красивым и аккуратным.
* `terraform output`: Выводит значения "outputs", если вы их определили (например, IP-адреса созданных серверов).
* `terraform state list`: Показывает список ресурсов, про которые "знает" терраформ в данный момент.
## Когда использовать `terraform state rm`
`terraform state rm` удаляет ресурс **только из Terraform state**, но **не удаляет** его в облаке.
Используйте эту команду, когда:
* ресурс уже удалён в облаке вручную/вне Terraform;
* `plan` падает ошибкой вида "экземпляр ... удален";
* нужно заставить Terraform считать ресурс новым и создать его заново на следующем `apply`.
Пример:
```bash
terraform state rm nubes_postgres.db2
terraform plan
terraform apply
```
### Отличие от `terraform import`
* `terraform state rm` — "забыть" ресурс в state.
* `terraform import` — "подхватить" уже существующий ресурс в state.
Если ресурс в облаке действительно удалён, обычно нужен именно `state rm`, а не `import`.
---
!!! tip "Совет"
Всегда выполняйте `terraform plan` перед `apply`, чтобы убедиться, что вы случайно не удаляете важные ресурсы.
@@ -0,0 +1,67 @@
# Структура Terraform проекта
## Почему важно разделять манифесты
Если ресурсы не зависят друг от друга, лучше разделять их по разным папкам или разным state. Тогда сбой одного ресурса не блокирует применение остальных.
Если ресурсы взаимозависимы (например, сеть -> ВМ), их стоит держать вместе, чтобы Terraform применял изменения в правильном порядке.
## Важно: все .tf в папке объединяются
Terraform рассматривает все `.tf` в одной папке как единый конфигурационный файл. Это значит:
- Все ресурсы и переменные в папке находятся в одном graph.
- Ошибка одного ресурса может остановить `apply` для всех остальных.
- При `destroy` Terraform будет удалять все ресурсы из этой папки.
## Рекомендуемая структура
- Один каталог = один независимый стек.
- Для каждого стека отдельные `main.tf`, `variables.tf`, `outputs.tf`.
- Для разных окружений использовать разные каталоги.
Пример:
```
project/
stacks/
vm-a/
main.tf
variables.tf
vm-b/
main.tf
variables.tf
edge/
main.tf
variables.tf
```
## Импорт ресурсов
Импорт используется, когда ресурс уже существует, но Terraform его не создавал.
Общий подход:
1. Создать ресурс в `.tf` с корректными аргументами.
2. Выполнить `terraform import`.
3. Сделать `terraform plan` и убедиться, что нет изменений.
Важно:
- Импорт добавляет ресурс в state, но не создает его.
- После импорта нужно обязательно сверить параметры в `.tf`.
## Удаление ресурсов
Удаление зависит от того, где находится ресурс:
- Если ресурс прописан в `.tf`, Terraform удалит его при `destroy`.
- Если ресурс удален из `.tf`, Terraform удалит его при следующем `apply`.
Рекомендация: перед удалением делать `plan`, чтобы увидеть список ресурсов, которые будут удалены.
## Что делать при ошибках
- Разделяйте независимые ресурсы по разным папкам.
- Проверяйте `plan` перед `apply`.
- Для проблемного ресурса работайте в его отдельном стеке.
+16
View File
@@ -0,0 +1,16 @@
---
description: Создание ИТ-инфраструктуры за считанные часы для вашего бизнеса на базе дата-центров Tier III в Москве. Экономьте на оборудовании. Платите за потребление.
keywords: Нубес, Nubes, облачный провайдер, создание ит-инфраструктуры, дата-центр Tier III, облачная ит инфраструктура, облачный сервис, облачные решения
---
# Nubes Terraform Provider
Добро пожаловать в документацию провайдера **Nubes**. Здесь собраны инструкции для пользователей по установке, настройке и работе с ресурсами.
## Быстрый старт
- [Getting started](guides/getting-started.md)
- [Terraform basics](guides/terraform-basics.md)
## Ресурсы
@@ -0,0 +1,7 @@
(function() {
// Client-side trailing slash enforcer for dumb static servers
var path = window.location.pathname;
if (path.length > 1 && path.substr(-1) !== '/' && path.indexOf('.') === -1) {
window.location.replace(path + '/' + window.location.search + window.location.hash);
}
})();
+27
View File
@@ -0,0 +1,27 @@
# Resource nubes_Akhq
Service ID: `119`
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
## Example
```hcl
resource "nubes_akhq" "example" {
# required params ...
suspend_on_destroy = "suspend"
adopt_existing_on_create = true
}
```
@@ -0,0 +1,3 @@
# Инструкция для Akhq
# Инструкция по развертыванию Apache Kafka через платформу<br/><br/>---<br/>## 1. Общая информация<br/>AKHQ — это веб-интерфейс для работы с кластерами Apache Kafka.<br/>Позволяет просматривать топики, consumer group'ы, сообщения, ACL, схему безопасности, состояние брокеров и метаданные.<br/>Поддерживает работу с несколькими кластерами Kafka одновременно, включая внутренние и внешние (TLS) подключения.<br/><br/>## Доступные операции<br/>- **create** — Создание ресурса AKHQ<br/>- **suspend** — Остановка ресурса<br/>- **resume** — Возобновление работы ресурса<br/>- **modify** — Модификация настроек<br/>- **delete** — Удаление ресурса<br/><br/>---<br/>## 2. Параметры развертывания кластера<br/>Ниже перечислены параметры, которые необходимо указать при создании ресурса Kafka:<br/><br/>* **Кластер Kafka к которому нужно настроить подключение**<br/>Для использования AKHQ необходимо предварительно развернуть сервис Kafka. Пример: `kafka-external`.<br/><br/>* **Платформа для развертывания:**<br/>Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.<br/><br/>* **Количество узлов в сети:**<br/>Количество узлов для работы Akhq. Пример `2`<br/><br/>* **Квота (megabyte) памяти пода:**<br/>Квота памяти пода в мегабайтах. Пример: `512`<br/><br/>* **Квота (millicore ) ядра пода:**<br/>Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`<br/><br/>* **Имя домена:**<br/>Dns Имя по которому будет происходить обращение к сервису. Указать необходимо уникальное имя до . ( то есть если необходимо получить dns ui) Пример: `kafka-external`<br/><br/>---<br/>## 4. Выходные параметры<br/>После успешного развертывания ресурса Kafka платформа возвращает ряд параметров.<br/>Ключевым из них является:<br/><br/>**connectionUrl**<br/>Это полное доменное имя (FQDN), по которому будет доступен интерфейс AKHQ. После развёртывания подождите несколько минут — UI станет доступен по HTTPS, как только все сервисы полностью запустятся.<br/><br/>**Учетные данные**<br/>Здесь представлены поля для ввода логина и пароля, с помощью которых вы сможете авторизоваться в сервисе.<br/><br/>---<br/>## 5. Дополнительная информация<br/>Учётные записи, созданные для работы с AKHQ, предоставляют доступ только для просмотра данных. Для управления Kafka, пожалуйста, используйте возможности личного кабинета.<br/>---
+17
View File
@@ -0,0 +1,17 @@
# Resource nubes_Akhq
Service ID: `119`
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
+17
View File
@@ -0,0 +1,17 @@
# Resource nubes_Akhq
Service ID: `119`
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
[Overview](Akhq.md) | [Parameters](Akhq_params.md) | [Operations](Akhq_ops.md)
+27
View File
@@ -0,0 +1,27 @@
# Resource nubes_DEPRECATED
Service ID: `24`
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
## Example
```text
resource "nubes_DEPRECATED" "example" {
# required params ...
delete_mode = "state_only"
resume_if_exists = true
}
```
@@ -0,0 +1,3 @@
# Инструкция для DEPRECATED
Правила маршрутизации в Cloud Director. Требует наличие сетей, ВМ<br/>DEPRECATED
@@ -0,0 +1,17 @@
# Resource nubes_DEPRECATED
Service ID: `24`
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
@@ -0,0 +1,17 @@
# Resource nubes_DEPRECATED
Service ID: `24`
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
[Overview](DEPRECATED.md) | [Parameters](DEPRECATED_params.md) | [Operations](DEPRECATED_ops.md)
@@ -0,0 +1,27 @@
# Resource nubes_GiteaComplex
Service ID: `114`
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
## Example
```hcl
resource "nubes_gitea_complex" "example" {
# required params ...
suspend_on_destroy = "state_only"
adopt_existing_on_create = true
}
```
@@ -0,0 +1,3 @@
# Инструкция для GiteaComplex
Комплексная услуга из [&quot;gittea&quot;, &quot;postgres&quot;]
@@ -0,0 +1,17 @@
# Resource nubes_GiteaComplex
Service ID: `114`
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
@@ -0,0 +1,17 @@
# Resource nubes_GiteaComplex
Service ID: `114`
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
[Overview](GiteaComplex.md) | [Parameters](GiteaComplex_params.md) | [Operations](GiteaComplex_ops.md)
@@ -0,0 +1,92 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
## MAN
<div class="man-content">
# Инструкция по управлению кластерами и пользователями ClickHouse<br/><br/>---<br/><br/>## Общая информация<br/><br/>ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.<br/><br/>Кластер создаётся через оператор Altinity (<code class="man-inline">https://github.com/Altinity/clickhouse-operator</code>) в ресурсной платформе типа <code class="man-inline">k8s</code><br/><br/>Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра <code class="man-inline">Создать ClickHouse-Keeper</code>.<br/><br/>Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу <code class="man-inline">S3 Object Storage</code>.<br/>---<br/><br/>## Доступные операции<br/><br/>* create — Создание кластера<br/>* delete — Удаление кластера<br/>* suspend — Приостановка работы кластера<br/>* resume — Возобновление работы кластера<br/>* create_database — Создание базы данных<br/>* delete_database — Удаление базы данных<br/>* create_user — Создание пользователя и настройка прав доступа к базе данных<br/>* delete_user — Удаление пользователя<br/><br/>## Процесс создания и первого подключения<br/><br/>1. Выполнить операцию <code class="man-inline">create</code> - будет создан кластер<br/>2. Выполнить операцию <code class="man-inline">create_database</code> - будет создана база данных<br/>3. Выполнить операцию <code class="man-inline">create_user</code> - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)<br/><br/>## Примеры подключения<br/><br/>### Подключение через HTTP-интерфейс<br/><br/><pre class="man-code language-bash"># Проверка доступности кластера
<span class="man-kw">curl</span> &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:<span class="man-num">8123</span>/<span class="man-str">&quot; -d &quot;</span>SELECT 1<span class="man-str">&quot;
# Выполнение запроса
curl &quot;</span>http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:<span class="man-num">8123</span>/<span class="man-str">&quot; -d &quot;</span>SHOW DATABASES&quot;</pre><br/><br/>## Простые кейсы<br/>*Создать БД и обычной таблицы*<br/><pre class="man-code language-clickhouse"><span class="man-kw">CREATE</span> <span class="man-kw">TABLE</span> <span class="man-ident">database.table</span>
(
id UInt64,
value String
)
<span class="man-kw">ENGINE</span> = <span class="man-fn">MergeTree</span>()
<span class="man-kw">ORDER</span> <span class="man-kw">BY</span> id;
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.table</span> <span class="man-kw">SELECT</span> number, <span class="man-fn">toString</span>(number) <span class="man-kw">FROM</span> <span class="man-fn">numbers</span>(<span class="man-num">10000000</span>);
<span class="man-kw">SELECT</span> <span class="man-kw">count</span>() <span class="man-kw">FROM</span> <span class="man-ident">database.table</span>;</pre><br/>Базы и таблицы не реплицируются без специального ключа (<code class="man-inline">ON CLUSTER 'clickhousek8s'</code>)<br/>В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах<br/><br/><br/>*Создание БД и шардированной таблицы*<br/><pre class="man-code language-clickhouse"><span class="man-kw">CREATE</span> <span class="man-kw">TABLE</span> <span class="man-ident">database.localUsers</span>
(
id UInt64,
value String
)
<span class="man-kw">ENGINE</span> = <span class="man-fn">MergeTree</span>()
<span class="man-kw">ORDER</span> <span class="man-kw">BY</span> id;
<span class="man-kw">CREATE</span> <span class="man-kw">TABLE</span> <span class="man-ident">database.shardedTable</span>
<span class="man-kw">AS</span> localUsers
<span class="man-kw">ENGINE</span> = <span class="man-fn">Distributed</span>(<span class="man-str">'clickhousek8s'</span>, <span class="man-str">'database'</span>, <span class="man-str">'localUsers'</span>, id);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> shardedTable <span class="man-kw">SELECT</span> number, <span class="man-fn">toString</span>(number) <span class="man-kw">FROM</span> <span class="man-fn">numbers</span>(<span class="man-num">10000000</span>);
<span class="man-kw">SELECT</span> <span class="man-kw">count</span>() <span class="man-kw">FROM</span> shardedTable;</pre><br/>Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse<br/><br/>*Создание реплицируемой и шардированной таблицы*<br/><pre class="man-code language-clickhouse"><span class="man-kw">CREATE</span> <span class="man-kw">TABLE</span> <span class="man-kw">IF</span> <span class="man-kw">NOT</span> <span class="man-kw">EXISTS</span> <span class="man-ident">database.localUsers</span> <span class="man-kw">ON</span> <span class="man-kw">cluster</span> <span class="man-str">'clickhousek8s'</span>
(
user_id UInt64,
name String,
email String
)
<span class="man-kw">ENGINE</span> = <span class="man-fn">ReplicatedMergeTree</span>(
<span class="man-str">'/clickhouse/tables/{shard}/localUsers'</span>,
<span class="man-str">'{replica}'</span>
)
<span class="man-kw">ORDER</span> <span class="man-kw">BY</span> user_id;
<span class="man-kw">CREATE</span> <span class="man-kw">TABLE</span> <span class="man-kw">IF</span> <span class="man-kw">NOT</span> <span class="man-kw">EXISTS</span> <span class="man-ident">database.users</span> <span class="man-kw">ON</span> <span class="man-kw">cluster</span> <span class="man-str">'clickhousek8s'</span>
<span class="man-kw">AS</span> <span class="man-ident">database.localUsers</span>
<span class="man-kw">ENGINE</span> = <span class="man-fn">Distributed</span>(<span class="man-str">'clickhousek8s'</span>, <span class="man-str">'database'</span>, <span class="man-str">'localUsers'</span>, rand());
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">1</span>, <span class="man-str">'Alice'</span>, <span class="man-str">'alice@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">2</span>, <span class="man-str">'Bob'</span>, <span class="man-str">'bob@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">3</span>, <span class="man-str">'Charlie'</span>, <span class="man-str">'charlie@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">4</span>, <span class="man-str">'David'</span>, <span class="man-str">'david@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">5</span>, <span class="man-str">'Gosha'</span>, <span class="man-str">'gosha@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">6</span>, <span class="man-str">'Eve'</span>, <span class="man-str">'eve@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">7</span>, <span class="man-str">'Frank'</span>, <span class="man-str">'frank@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">8</span>, <span class="man-str">'Grace'</span>, <span class="man-str">'grace@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">9</span>, <span class="man-str">'Hannah'</span>, <span class="man-str">'hannah@example.com'</span>);
<span class="man-kw">INSERT</span> <span class="man-kw">INTO</span> <span class="man-ident">database.users</span> <span class="man-kw">VALUES</span> (<span class="man-num">10</span>, <span class="man-str">'Ivan'</span>, <span class="man-str">'ivan@example.com'</span>);
<span class="man-kw">SELECT</span> * <span class="man-kw">FROM</span> <span class="man-ident">database.localUsers</span>;
<span class="man-kw">SELECT</span> * <span class="man-kw">FROM</span> <span class="man-ident">database.users</span>;
<span class="man-kw">SELECT</span> <span class="man-kw">COUNT</span>(*) <span class="man-kw">AS</span> total_users <span class="man-kw">FROM</span> <span class="man-ident">database.users</span>;
<span class="man-kw">SELECT</span> <span class="man-kw">COUNT</span>(*) <span class="man-kw">AS</span> total_users_local <span class="man-kw">FROM</span> <span class="man-ident">database.localUsers</span>;</pre>
- <code class="man-inline">state_params</code> (map) — параметры, отправленные в API при создании/изменении.
- <code class="man-inline">state_out</code> (map) — ответ API с результатами/выходными значениями.
- <code class="man-inline">state_params_flat</code> (map) — параметры в плоском виде (ключи с путями).
- <code class="man-inline">state_out_flat</code> (map) — ответы в плоском виде (ключи с путями).
- <code class="man-inline">vault_secrets</code> (map) — секреты, записанные в Vault для ресурса.
- <code class="man-inline">vault_url</code> (string) — адрес Vault для ресурса.
- <code class="man-inline">vault_user_path</code> (string) — путь пользователя в Vault.
- <code class="man-inline">vault_fields</code> (list) — список ключей доступных секретов.
</div>
## Summary
# Инструкция по управлению кластерами и пользователями ClickHouse
## Lifecycle behavior
- If suspend/resume exist, delete maps to suspend and apply can resume.
- Advanced users may override delete_mode and resume_if_exists.
@@ -0,0 +1,20 @@
# Resource nubes_clickhouse_database
Service: nubes_clickhouse
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
## Example
```hcl
resource "nubes_clickhouse_database" "example" {
clickhouse_id = nubes_clickhouse.example.id
database_name = "TODO"
}
```
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse_database
Service: nubes_clickhouse
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse_database
Service: nubes_clickhouse
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
@@ -0,0 +1,58 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
## Copy-ready manifest (`clickhouse_main.tf`)
<div class="copy-ready-code"><pre><code><span class="token-keyword">terraform</span> {
<span class="token-attr">required_providers</span> {
<span class="token-name">nubes</span> = {
<span class="token-attr">source</span> = <span class="token-value">"terra.k8c.ru/nubes/nubes"</span>
<span class="token-attr">version</span> = <span class="token-value">"2.1.10"</span> <span class="token-comment"># Для определения актуальной версии наберите в терминале terraform version</span>
}
}
}
<span class="token-comment"># Токен доступа api_token к Nubes API — замените на реальный.</span>
<span class="token-keyword">provider</span> <span class="token-name">"nubes"</span> {
<span class="token-attr">api_token</span> = <span class="token-value">"token_***"</span>
<span class="token-attr">api_endpoint</span> = <span class="token-value">"https://deck-api.ngcloud.ru/api/v1/index.cfm"</span>
}
<span class="token-keyword">resource</span> <span class="token-type">"nubes_clickhouse"</span> <span class="token-name">"baza"</span> {
<span class="token-comment"># TODO - обязательный параметр, задаваемый пользователем</span>
<span class="token-attr">resourceRealm</span> = <span class="token-value">"TODO"</span> <span class="token-comment"># Кластер Kubernetes в котором будет развернуто приложение, например "k8s-3.ext.nubes.ru"</span>
<span class="token-attr">s3Uid</span> = <span class="token-value">"TODO"</span> <span class="token-comment"># Экземпляр (учетная запись) S3, это имя S3 Object Storage</span>
<span class="token-comment"># Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте</span>
<span class="token-attr">resourceInstances</span> = <span class="token-value">1</span>
<span class="token-attr">resourceInstancesShards</span> = <span class="token-value">1</span>
<span class="token-attr">resourceCPU</span> = <span class="token-value">1000</span>
<span class="token-attr">resourceMemory</span> = <span class="token-value">1536</span>
<span class="token-attr">appVersion</span> = <span class="token-value">"25.10"</span>
<span class="token-attr">resourceDisk</span> = <span class="token-value">10</span>
<span class="token-attr">needExternalAddressMaster</span> = <span class="token-value">false</span>
<span class="token-attr">needCreateKeeper</span> = <span class="token-value">true</span>
<span class="token-attr">resourceCPUKeeper</span> = <span class="token-value">50</span>
<span class="token-attr">resourceMemoryKeeper</span> = <span class="token-value">152</span>
<span class="token-attr">resourceInstancesKeeper</span> = <span class="token-value">1</span>
<span class="token-attr">ext_BACKUP_SCHEDULE</span> = <span class="token-value">"0 0 * * *"</span>
<span class="token-attr">ext_BACKUP_NUM_TO_RETAIN</span> = <span class="token-value">7</span>
}
</code></pre></div>
## Outputs usage
<div class="copy-ready-code"><pre><code><span class="token-comment"># Выходные параметры можно использовать как</span>
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">state_params</span>[<span class="token-value">"имя_ключа"</span>]
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">state_out</span>[<span class="token-value">"имя_ключа"</span>]
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">state_params_flat</span>[<span class="token-value">"имя_ключа"</span>]
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">state_out_flat</span>[<span class="token-value">"имя_ключа"</span>]
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">vault_secrets</span>[<span class="token-value">"имя_ключа"</span>]
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">vault_url</span>
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">vault_user_path</span>
<span class="token-type">nubes_clickhouse</span>.<span class="token-name">baza</span>.<span class="token-attr">vault_fields</span>
</code></pre></div>
@@ -0,0 +1,3 @@
# Инструкция для clickhouse
# Инструкция по управлению кластерами и пользователями ClickHouse<br/><br/>---<br/><br/>## Общая информация<br/><br/>ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.<br/><br/>Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`<br/><br/>Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.<br/><br/>Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.<br/>---<br/><br/>## Доступные операции<br/><br/>* **create** — Создание кластера<br/>* **delete** — Удаление кластера<br/>* **suspend** — Приостановка работы кластера<br/>* **resume** — Возобновление работы кластера<br/>* **create_database** — Создание базы данных<br/>* **delete_database** — Удаление базы данных<br/>* **create_user** — Создание пользователя и настройка прав доступа к базе данных<br/>* **delete_user** — Удаление пользователя<br/><br/>## Процесс создания и первого подключения<br/><br/>1. Выполнить операцию `create` - будет создан кластер<br/>2. Выполнить операцию `create_database` - будет создана база данных<br/>3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)<br/><br/>## Примеры подключения<br/><br/>### Подключение через HTTP-интерфейс<br/><br/>```bash<br/># Проверка доступности кластера<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SELECT 1&quot;<br/><br/># Выполнение запроса<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SHOW DATABASES&quot;<br/>```<br/><br/>## Простые кейсы<br/>*Создать БД и обычной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>```<br/>Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER 'clickhousek8s'`)<br/>В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах<br/><br/><br/>*Создание БД и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>```<br/>Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse<br/><br/>*Создание реплицируемой и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> '/clickhouse/tables/{shard}/localUsers',<br/> '{replica}'<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'<br/>AS database.localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());<br/><br/>INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');<br/>INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');<br/>INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');<br/>INSERT INTO database.users VALUES (4, 'David', 'david@example.com');<br/>INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');<br/>INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');<br/>INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');<br/>INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');<br/>INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');<br/>INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>```
@@ -0,0 +1,3 @@
# MAN: clickhouse
# Инструкция по управлению кластерами и пользователями ClickHouse<br/><br/>---<br/><br/>## Общая информация<br/><br/>ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.<br/><br/>Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`<br/><br/>Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.<br/><br/>Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.<br/>---<br/><br/>## Доступные операции<br/><br/>* **create** — Создание кластера<br/>* **delete** — Удаление кластера<br/>* **suspend** — Приостановка работы кластера<br/>* **resume** — Возобновление работы кластера<br/>* **create_database** — Создание базы данных<br/>* **delete_database** — Удаление базы данных<br/>* **create_user** — Создание пользователя и настройка прав доступа к базе данных<br/>* **delete_user** — Удаление пользователя<br/><br/>## Процесс создания и первого подключения<br/><br/>1. Выполнить операцию `create` - будет создан кластер<br/>2. Выполнить операцию `create_database` - будет создана база данных<br/>3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)<br/><br/>## Примеры подключения<br/><br/>### Подключение через HTTP-интерфейс<br/><br/>```bash<br/># Проверка доступности кластера<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SELECT 1&quot;<br/><br/># Выполнение запроса<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SHOW DATABASES&quot;<br/>```<br/><br/>## Простые кейсы<br/>*Создать БД и обычной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>```<br/>Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER 'clickhousek8s'`)<br/>В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах<br/><br/><br/>*Создание БД и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>```<br/>Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse<br/><br/>*Создание реплицируемой и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> '/clickhouse/tables/{shard}/localUsers',<br/> '{replica}'<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'<br/>AS database.localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());<br/><br/>INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');<br/>INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');<br/>INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');<br/>INSERT INTO database.users VALUES (4, 'David', 'david@example.com');<br/>INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');<br/>INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');<br/>INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');<br/>INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');<br/>INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');<br/>INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>```
@@ -0,0 +1,20 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
## Operations
- `create` — Создание кластера. Параметры: [Create params](clickhouse_params_create.md)
- `modify` — Изменение кластера. Параметры: [Modify params](clickhouse_params_modify.md)
- `delete` — Удаление кластера (после `suspend`, требуется время на остановку)
- `suspend` — Остановка кластера (pods удаляются, PV остаются)
- `resume` — Возобновление работы кластера
- `create_database` — Создание базы данных. См. [nubes_clickhouse_database](clickhouse_database.md)
- `delete_database` — Удаление базы данных. См. [nubes_clickhouse_database](clickhouse_database.md)
- `create_user` — Создание пользователя. См. [nubes_clickhouse_user](clickhouse_user.md)
- `delete_user` — Удаление пользователя. См. [nubes_clickhouse_user](clickhouse_user.md)
@@ -0,0 +1,18 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
## Output params
- `state_params` (map) — параметры, отправленные в API при создании/изменении.
- `state_out` (map) — ответ API с результатами/выходными значениями.
- `state_params_flat` (map) — параметры в плоском виде (ключи с путями).
- `state_out_flat` (map) — ответы в плоском виде (ключи с путями).
- `vault_secrets` (map) — секреты, записанные в Vault для ресурса.
- `vault_url` (string) — адрес Vault для ресурса.
- `vault_user_path` (string) — путь пользователя в Vault.
- `vault_fields` (list) — список ключей доступных секретов.
@@ -0,0 +1,12 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
## Parameters
- [Create params](clickhouse_params_create.md)
- [Modify params](clickhouse_params_modify.md)
@@ -0,0 +1,47 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
## Create params
**Обязательные параметры (вводимые пользователем)**
<table class="resource-table resource-table-compact resource-table-required">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>572</td><td><strong><code class="code-no-wrap">resourceRealm</code></strong></td><td><code>string</code></td><td>Выбрать платформу из списка<br/><br/>**Если список не отображается**<br/>обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы</td><td>func=getAvailableResourceRealms</td></tr>
<tr><td>573</td><td><strong><code class="code-no-wrap">s3Uid</code></strong></td><td><code>uuid</code></td><td>**Если список не отображается** <br/>перейдите в раздел `S3 Object Storage` <br/>операция `create`</td><td>ref_svc_id=12</td></tr>
<tr><td>581</td><td><strong><code class="code-no-wrap">ipSpaceNameMaster</code></strong></td><td><code>string</code></td><td>Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`</td><td></td></tr>
</tbody></table>
**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте**
<table class="resource-table resource-table-compact">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>574</td><td><strong><code class="code-no-wrap">resourceInstances</code></strong></td><td><code>integer</code></td><td><code>1</code></td><td>**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>575</td><td><strong><code class="code-no-wrap">resourceInstancesShards</code></strong></td><td><code>integer</code></td><td><code>1</code></td><td>**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>576</td><td><strong><code class="code-no-wrap">resourceCPU</code></strong></td><td><code>integer</code></td><td><code>1000</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=1000; maxvalue=8000</td></tr>
<tr><td>577</td><td><strong><code class="code-no-wrap">resourceMemory</code></strong></td><td><code>integer</code></td><td><code>1536</code></td><td>Указывается в Megabytes</td><td>minvalue=1536; maxvalue=8192</td></tr>
<tr><td>578</td><td><strong><code class="code-no-wrap">appVersion</code></strong></td><td><code>string</code></td><td><code>25.10</code></td><td>Версия `clickhouse-server`</td><td>value_list=25.10</td></tr>
<tr><td>579</td><td><strong><code class="code-no-wrap">resourceDisk</code></strong></td><td><code>integer</code></td><td><code>10</code></td><td>Указывается в Gigabytes</td><td>minvalue=1; maxvalue=999</td></tr>
<tr><td>580</td><td><strong><code class="code-no-wrap">needExternalAddressMaster</code></strong></td><td><code>boolean</code></td><td><code>false</code></td><td>Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы</td><td>value_list=false, true</td></tr>
<tr><td>582</td><td><strong><code class="code-no-wrap">needCreateKeeper</code></strong></td><td><code>boolean</code></td><td><code>true</code></td><td>Аналог `Zookeeper`, представленный от ClickHouse</td><td>value_list=false, true</td></tr>
<tr><td>583</td><td><strong><code class="code-no-wrap">resourceCPUKeeper</code></strong></td><td><code>integer</code></td><td><code>50</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=50; maxvalue=8000</td></tr>
<tr><td>584</td><td><strong><code class="code-no-wrap">resourceMemoryKeeper</code></strong></td><td><code>integer</code></td><td><code>152</code></td><td>Указывается в Megabytes</td><td>minvalue=152; maxvalue=8192</td></tr>
<tr><td>585</td><td><strong><code class="code-no-wrap">resourceInstancesKeeper</code></strong></td><td><code>integer</code></td><td><code>1</code></td><td>Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды</td><td>minvalue=1; maxvalue=3; value_list=1, 3</td></tr>
<tr><td>586</td><td><strong><code class="code-no-wrap">ext_BACKUP_SCHEDULE</code></strong></td><td><code>string</code></td><td><code>0 0 * * *</code></td><td>Принимает формат `CRON`</td><td>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))+)$</td></tr>
<tr><td>587</td><td><strong><code class="code-no-wrap">ext_BACKUP_NUM_TO_RETAIN</code></strong></td><td><code>integer</code></td><td><code>7</code></td><td>Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**</td><td>minvalue=3; maxvalue=60</td></tr>
</tbody></table>
<div class="lifecycle-note">
<strong>Параметры жизненного цикла (Lifecycle defaults)</strong><br/>
По умолчанию: `delete_mode_default = suspend`, `resume_if_exists_default = True`.<br/>
Если для сервиса доступны операции `suspend` и `resume`, то `delete` выполняет приостановку (без удаления данных),<br/>
а `apply` при необходимости возобновляет работу существующего ресурса.<br/>
Менять эти значения стоит только в продвинутых сценариях — через параметры `delete_mode` и `resume_if_exists` в манифесте.
</div>
@@ -0,0 +1,28 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
## Modify params
<table class="resource-table resource-table-compact">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>603</td><td><strong><code class="code-no-wrap">resourceInstances</code></strong></td><td><code>integer</code></td><td>**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>604</td><td><strong><code class="code-no-wrap">resourceInstancesShards</code></strong></td><td><code>integer</code></td><td>**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>605</td><td><strong><code class="code-no-wrap">resourceCPU</code></strong></td><td><code>integer</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=1000; maxvalue=8000</td></tr>
<tr><td>606</td><td><strong><code class="code-no-wrap">resourceMemory</code></strong></td><td><code>integer</code></td><td>Указывается в Megabytes</td><td>minvalue=1536; maxvalue=8192</td></tr>
<tr><td>607</td><td><strong><code class="code-no-wrap">appVersion</code></strong></td><td><code>string</code></td><td>Версия `clickhouse-server`</td><td></td></tr>
<tr><td>608</td><td><strong><code class="code-no-wrap">resourceDisk</code></strong></td><td><code>integer</code></td><td>Указывается в Gigabytes<br/>**Нельзя** выставлять меньше текущего значения</td><td>minvalue=1; maxvalue=999</td></tr>
<tr><td>609</td><td><strong><code class="code-no-wrap">needExternalAddressMaster</code></strong></td><td><code>boolean</code></td><td>Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы</td><td>value_list=false, true</td></tr>
<tr><td>610</td><td><strong><code class="code-no-wrap">ipSpaceNameMaster</code></strong></td><td><code>string</code></td><td>Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`</td><td></td></tr>
<tr><td>611</td><td><strong><code class="code-no-wrap">needCreateKeeper</code></strong></td><td><code>boolean</code></td><td>Аналог `Zookeeper`, представленный от ClickHouse</td><td>value_list=false, true</td></tr>
<tr><td>612</td><td><strong><code class="code-no-wrap">resourceCPUKeeper</code></strong></td><td><code>integer</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=50; maxvalue=8000</td></tr>
<tr><td>613</td><td><strong><code class="code-no-wrap">resourceMemoryKeeper</code></strong></td><td><code>integer</code></td><td>Указывается в Megabytes</td><td>minvalue=152; maxvalue=8192</td></tr>
<tr><td>614</td><td><strong><code class="code-no-wrap">resourceInstancesKeeper</code></strong></td><td><code>integer</code></td><td>Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды</td><td>minvalue=1; maxvalue=3; value_list=1, 3</td></tr>
<tr><td>615</td><td><strong><code class="code-no-wrap">ext_BACKUP_SCHEDULE</code></strong></td><td><code>string</code></td><td>Принимает формат `CRON`</td><td>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))+)$</td></tr>
<tr><td>616</td><td><strong><code class="code-no-wrap">ext_BACKUP_NUM_TO_RETAIN</code></strong></td><td><code>integer</code></td><td>Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**</td><td>minvalue=3; maxvalue=60</td></tr>
</tbody></table>
@@ -0,0 +1,22 @@
# Resource nubes_clickhouse_user
Service: nubes_clickhouse
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
## Example
```hcl
resource "nubes_clickhouse_user" "example" {
clickhouse_id = nubes_clickhouse.example.id
username = "TODO"
database_name = ["database"]
access_hosts = ::/0
}
```
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse_user
Service: nubes_clickhouse
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse_user
Service: nubes_clickhouse
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
+13
View File
@@ -0,0 +1,13 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
## MAN
<div class="man-content">
# Инструкция по развертыванию Apache Kafka через платформу<br/><br/>---<br/>## 1. Общая информация<br/>AKHQ — это веб-интерфейс для работы с кластерами Apache Kafka.<br/>Позволяет просматривать топики, consumer group'ы, сообщения, ACL, схему безопасности, состояние брокеров и метаданные.<br/>Поддерживает работу с несколькими кластерами Kafka одновременно, включая внутренние и внешние (TLS) подключения.<br/><br/>## Доступные операции<br/>- **create** — Создание ресурса AKHQ<br/>- **suspend** — Остановка ресурса<br/>- **resume** — Возобновление работы ресурса<br/>- **modify** — Модификация настроек<br/>- **delete** — Удаление ресурса<br/><br/>---<br/>## 2. Параметры развертывания кластера<br/>Ниже перечислены параметры, которые необходимо указать при создании ресурса Kafka:<br/><br/>* **Кластер Kafka к которому нужно настроить подключение**<br/>Для использования AKHQ необходимо предварительно развернуть сервис Kafka. Пример: `kafka-external`.<br/><br/>* **Платформа для развертывания:**<br/>Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.<br/><br/>* **Количество узлов в сети:**<br/>Количество узлов для работы Akhq. Пример `2`<br/><br/>* **Квота (megabyte) памяти пода:**<br/>Квота памяти пода в мегабайтах. Пример: `512`<br/><br/>* **Квота (millicore ) ядра пода:**<br/>Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`<br/><br/>* **Имя домена:**<br/>Dns Имя по которому будет происходить обращение к сервису. Указать необходимо уникальное имя до . ( то есть если необходимо получить dns ui) Пример: `kafka-external`<br/><br/>---<br/>## 4. Выходные параметры<br/>После успешного развертывания ресурса Kafka платформа возвращает ряд параметров.<br/>Ключевым из них является:<br/><br/>**connectionUrl**<br/>Это полное доменное имя (FQDN), по которому будет доступен интерфейс AKHQ. После развёртывания подождите несколько минут — UI станет доступен по HTTPS, как только все сервисы полностью запустятся.<br/><br/>**Учетные данные**<br/>Здесь представлены поля для ввода логина и пароля, с помощью которых вы сможете авторизоваться в сервисе.<br/><br/>---<br/>## 5. Дополнительная информация<br/>Учётные записи, созданные для работы с AKHQ, предоставляют доступ только для просмотра данных. Для управления Kafka, пожалуйста, используйте возможности личного кабинета.<br/>---
</div>
@@ -0,0 +1,50 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
## Copy-ready manifest (`akhq_main.tf`)
```hcl
terraform {
required_providers {
nubes = {
source = "terra.k8c.ru/nubes/nubes"
version = "2.1.23"
}
}
}
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
}
resource "nubes_akhq" "baza" {
resource_realm = "TODO" # Выбрать платформу из списка
domain = "TODO" # Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
kafka_uid = "TODO" # Выбрать кластер из списка
# Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте
resource_memory = 512 # Пример: `1024`
resource_c_p_u = 500 # Пример: `1000`
resource_instances = 1
}
```
## Outputs usage
```hcl
# Выходные параметры можно использовать как
nubes_akhq.baza.state_params["имя_ключа"]
nubes_akhq.baza.state_out["имя_ключа"]
nubes_akhq.baza.state_params_flat["имя_ключа"]
nubes_akhq.baza.state_out_flat["имя_ключа"]
nubes_akhq.baza.vault_secrets["имя_ключа"]
nubes_akhq.baza.vault_url
nubes_akhq.baza.vault_user_path
nubes_akhq.baza.vault_fields
```
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_example.md) | [Parameters](akhq_example_params.md) | [Operations](akhq_example_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_example.md) | [Parameters](akhq_example_params.md) | [Operations](akhq_example_ops.md)
+3
View File
@@ -0,0 +1,3 @@
# MAN: akhq
# Инструкция по развертыванию Apache Kafka через платформу<br/><br/>---<br/>## 1. Общая информация<br/>AKHQ — это веб-интерфейс для работы с кластерами Apache Kafka.<br/>Позволяет просматривать топики, consumer group'ы, сообщения, ACL, схему безопасности, состояние брокеров и метаданные.<br/>Поддерживает работу с несколькими кластерами Kafka одновременно, включая внутренние и внешние (TLS) подключения.<br/><br/>## Доступные операции<br/>- **create** — Создание ресурса AKHQ<br/>- **suspend** — Остановка ресурса<br/>- **resume** — Возобновление работы ресурса<br/>- **modify** — Модификация настроек<br/>- **delete** — Удаление ресурса<br/><br/>---<br/>## 2. Параметры развертывания кластера<br/>Ниже перечислены параметры, которые необходимо указать при создании ресурса Kafka:<br/><br/>* **Кластер Kafka к которому нужно настроить подключение**<br/>Для использования AKHQ необходимо предварительно развернуть сервис Kafka. Пример: `kafka-external`.<br/><br/>* **Платформа для развертывания:**<br/>Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.<br/><br/>* **Количество узлов в сети:**<br/>Количество узлов для работы Akhq. Пример `2`<br/><br/>* **Квота (megabyte) памяти пода:**<br/>Квота памяти пода в мегабайтах. Пример: `512`<br/><br/>* **Квота (millicore ) ядра пода:**<br/>Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`<br/><br/>* **Имя домена:**<br/>Dns Имя по которому будет происходить обращение к сервису. Указать необходимо уникальное имя до . ( то есть если необходимо получить dns ui) Пример: `kafka-external`<br/><br/>---<br/>## 4. Выходные параметры<br/>После успешного развертывания ресурса Kafka платформа возвращает ряд параметров.<br/>Ключевым из них является:<br/><br/>**connectionUrl**<br/>Это полное доменное имя (FQDN), по которому будет доступен интерфейс AKHQ. После развёртывания подождите несколько минут — UI станет доступен по HTTPS, как только все сервисы полностью запустятся.<br/><br/>**Учетные данные**<br/>Здесь представлены поля для ввода логина и пароля, с помощью которых вы сможете авторизоваться в сервисе.<br/><br/>---<br/>## 5. Дополнительная информация<br/>Учётные записи, созданные для работы с AKHQ, предоставляют доступ только для просмотра данных. Для управления Kafka, пожалуйста, используйте возможности личного кабинета.<br/>---
+15
View File
@@ -0,0 +1,15 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
## Operations
- `create` — Создание кластера. Параметры: [Create params](akhq_params_create.md)
- `delete`
- `modify` — Изменение кластера. Параметры: [Modify params](akhq_params_modify.md)
- `resume`
- `suspend`
@@ -0,0 +1,41 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
## Output params
- `state_params` (map) — параметры, отправленные в API при создании/изменении
- `state_out` (map) — ответ API с результатами/выходными значениями
- `state_params_flat` (map) — параметры в плоском виде (ключи с путями)
- `state_out_flat` (map) — ответы в плоском виде (ключи с путями)
- `vault_secrets` (map) — секреты, записанные в Vault для ресурса
- `vault_url` (string) — адрес Vault для ресурса
- `vault_user_path` (string) — путь пользователя в Vault
- `vault_fields` (list) — список ключей доступных секретов
## Реальные поля из облака (prod / Akhq-4 / suspended)
Поля ниже получены из реальных инстансов этого сервиса в облаке.
Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`.
### `state_params` ключи
- `state_params["domain"]`
- `state_params["resourceCPU"]`
- `state_params["resourceRealm"]`
- `state_params["resourceMemory"]`
- `state_params["resourceInstances"]`
### `state_out_flat` ключи
- `state_out_flat["connectionUrl"]`
### `vault_secrets` ключи
- `vault_secrets["url"]`
- `vault_secrets["fields"]`
- `vault_secrets["userPath"]`
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_outputs.md) | [Parameters](akhq_outputs_params.md) | [Operations](akhq_outputs_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_outputs.md) | [Parameters](akhq_outputs_params.md) | [Operations](akhq_outputs_ops.md)
+12
View File
@@ -0,0 +1,12 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
## Parameters
- [Create params](akhq_params_create.md)
- [Modify params](akhq_params_modify.md)
@@ -0,0 +1,40 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
## Create params
**Обязательные параметры (вводимые пользователем)**
<table class="resource-table resource-table-compact resource-table-required">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>550</td><td><strong><code class="code-no-wrap">resource_realm</code></strong></td><td><code>string</code></td><td>Выбрать платформу из списка</td><td>func=getAvailableResourceRealms</td></tr>
<tr><td>553</td><td><strong><code class="code-no-wrap">domain</code></strong></td><td><code>string</code></td><td>Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm</td><td>regex=^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$</td></tr>
<tr><td>555</td><td><strong><code class="code-no-wrap">kafka_uid</code></strong></td><td><code>uuid</code></td><td>Выбрать кластер из списка</td><td>ref_svc_id=116</td></tr>
</tbody></table>
**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте**
<table class="resource-table resource-table-compact">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>551</td><td><strong><code class="code-no-wrap">resource_memory</code></strong></td><td><code>integer</code></td><td><code>512</code></td><td>Пример: `1024`</td><td>minvalue=512</td></tr>
<tr><td>552</td><td><strong><code class="code-no-wrap">resource_cpu</code></strong></td><td><code>integer</code></td><td><code>500</code></td><td>Пример: `1000`</td><td>minvalue=500</td></tr>
<tr><td>554</td><td><strong><code class="code-no-wrap">resource_instances</code></strong></td><td><code>integer</code></td><td><code>1</code></td><td></td><td>minvalue=1</td></tr>
</tbody></table>
<div class="lifecycle-note">
<strong>Параметры поведения (кратко)</strong><br/>
По умолчанию: `suspend_on_destroy = True`, `adopt_existing_on_create = False`.<br/>
При `terraform destroy` или удалении ресурса из манифеста:<br/>
- `suspend_on_destroy=true` — инстанс переводится в `Suspend` (не удаляется).<br/>
- `suspend_on_destroy=false` — Terraform удаляет ресурс только из state.<br/>
При `apply` флаг `adopt_existing_on_create` работает как авто-`import`:<br/>
- `false` — если ресурс уже есть, будет ошибка.<br/>
- `true` — Terraform может взять существующий инстанс под управление (`running` → adopt, `suspended` → resume+adopt при совпадении параметров).<br/>
Важно: один инстанс должен быть только в одном state. Иначе получите конфликт управления.
</div>
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_params_create.md) | [Parameters](akhq_params_create_params.md) | [Operations](akhq_params_create_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_params_create.md) | [Parameters](akhq_params_create_params.md) | [Operations](akhq_params_create_ops.md)
@@ -0,0 +1,15 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
## Modify params
<table class="resource-table resource-table-compact">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>565</td><td><strong><code class="code-no-wrap">kafka_uid</code></strong></td><td><code>uuid</code></td><td>Выбрать кластер из списка</td><td>ref_svc_id=116</td></tr>
</tbody></table>
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_params_modify.md) | [Parameters](akhq_params_modify_params.md) | [Operations](akhq_params_modify_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_akhq
Service ID: `119`
Service Name: Akhq
[Manual](akhq.md) | [Create params](akhq_params_create.md) | [Modify params](akhq_params_modify.md) | [Output params](akhq_outputs.md) | [Operations](akhq_ops.md) | [Example](akhq_example.md)
[Overview](akhq_params_modify.md) | [Parameters](akhq_params_modify_params.md) | [Operations](akhq_params_modify_ops.md)
File diff suppressed because it is too large Load Diff
+66
View File
@@ -0,0 +1,66 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Overview](clickhouse.md) | [Parameters](clickhouse_params.md) | [Operations](clickhouse_ops.md)
## MAN
# Инструкция по управлению кластерами и пользователями ClickHouse<br/><br/>---<br/><br/>## Общая информация<br/><br/>ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.<br/><br/>Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`<br/><br/>Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.<br/><br/>Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.<br/>---<br/><br/>## Доступные операции<br/><br/>* **create** — Создание кластера<br/>* **delete** — Удаление кластера<br/>* **suspend** — Приостановка работы кластера<br/>* **resume** — Возобновление работы кластера<br/>* **create_database** — Создание базы данных<br/>* **delete_database** — Удаление базы данных<br/>* **create_user** — Создание пользователя и настройка прав доступа к базе данных<br/>* **delete_user** — Удаление пользователя<br/><br/>## Процесс создания и первого подключения<br/><br/>1. Выполнить операцию `create` - будет создан кластер<br/>2. Выполнить операцию `create_database` - будет создана база данных<br/>3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)<br/><br/>## Примеры подключения<br/><br/>### Подключение через HTTP-интерфейс<br/><br/>```bash<br/># Проверка доступности кластера<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SELECT 1&quot;<br/><br/># Выполнение запроса<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SHOW DATABASES&quot;<br/>```<br/><br/>## Простые кейсы<br/>*Создать БД и обычной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>```<br/>Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER 'clickhousek8s'`)<br/>В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах<br/><br/><br/>*Создание БД и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>```<br/>Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse<br/><br/>*Создание реплицируемой и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> '/clickhouse/tables/{shard}/localUsers',<br/> '{replica}'<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'<br/>AS database.localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());<br/><br/>INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');<br/>INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');<br/>INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');<br/>INSERT INTO database.users VALUES (4, 'David', 'david@example.com');<br/>INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');<br/>INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');<br/>INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');<br/>INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');<br/>INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');<br/>INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>```
## Summary
# Инструкция по управлению кластерами и пользователями ClickHouse
## Example
```hcl
resource "nubes_clickhouse" "example" {
resource_realm = "TODO"
s3_uid = "235e0546-..."
resource_instances = 1
resource_instances_shards = 1
resource_c_p_u = 1000
resource_memory = 1536
app_version = 25.10
resource_disk = 10
need_external_address_master = false
need_create_keeper = true
resource_c_p_u_keeper = 50
resource_memory_keeper = 152
resource_instances_keeper = 1
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
adopt_existing_on_create = НЕТ
suspend_on_destroy = ДА
}
```
## Outputs
- `state_params` (map)
- `state_out` (map)
- `state_params_flat` (map)
- `state_out_flat` (map)
- `vault_secrets` (map)
- `vault_url` (string)
- `vault_user_path` (string)
- `vault_fields` (list)
## Lifecycle defaults
- `suspend_on_destroy_default` = `True`
- `adopt_existing_on_create_default` = `False`
## Lifecycle behavior
- For suspend-capable services: cloud status `missing/deleted` => create, `suspend` + key params match => resume.
- `running` requires explicit `adopt_existing_on_create=true` for adopt/import behavior, otherwise error.
- Destroy uses `suspend_on_destroy`: true => suspend, false => remove from state only.
@@ -0,0 +1,26 @@
# Resource nubes_clickhouse_database
Service: nubes_clickhouse
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
## Example
```hcl
resource "nubes_clickhouse_database" "example" {
clickhouse_id = nubes_clickhouse.example.id
database_name = "TODO"
}
```
@@ -0,0 +1,17 @@
# Resource nubes_clickhouse_database
Service: nubes_clickhouse
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
@@ -0,0 +1,17 @@
# Resource nubes_clickhouse_database
Service: nubes_clickhouse
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
[Overview](clickhouse_database.md) | [Parameters](clickhouse_database_params.md) | [Operations](clickhouse_database_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
[Overview](clickhouse_example.md) | [Parameters](clickhouse_example_params.md) | [Operations](clickhouse_example_ops.md)
@@ -0,0 +1,3 @@
# Инструкция для clickhouse
# Инструкция по управлению кластерами и пользователями ClickHouse<br/><br/>---<br/><br/>## Общая информация<br/><br/>ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.<br/><br/>Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`<br/><br/>Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.<br/><br/>Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.<br/>---<br/><br/>## Доступные операции<br/><br/>* **create** — Создание кластера<br/>* **delete** — Удаление кластера<br/>* **suspend** — Приостановка работы кластера<br/>* **resume** — Возобновление работы кластера<br/>* **create_database** — Создание базы данных<br/>* **delete_database** — Удаление базы данных<br/>* **create_user** — Создание пользователя и настройка прав доступа к базе данных<br/>* **delete_user** — Удаление пользователя<br/><br/>## Процесс создания и первого подключения<br/><br/>1. Выполнить операцию `create` - будет создан кластер<br/>2. Выполнить операцию `create_database` - будет создана база данных<br/>3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)<br/><br/>## Примеры подключения<br/><br/>### Подключение через HTTP-интерфейс<br/><br/>```bash<br/># Проверка доступности кластера<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SELECT 1&quot;<br/><br/># Выполнение запроса<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SHOW DATABASES&quot;<br/>```<br/><br/>## Простые кейсы<br/>*Создать БД и обычной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>```<br/>Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER 'clickhousek8s'`)<br/>В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах<br/><br/><br/>*Создание БД и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>```<br/>Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse<br/><br/>*Создание реплицируемой и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> '/clickhouse/tables/{shard}/localUsers',<br/> '{replica}'<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'<br/>AS database.localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());<br/><br/>INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');<br/>INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');<br/>INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');<br/>INSERT INTO database.users VALUES (4, 'David', 'david@example.com');<br/>INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');<br/>INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');<br/>INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');<br/>INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');<br/>INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');<br/>INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>```
@@ -0,0 +1,3 @@
# MAN: clickhouse
# Инструкция по управлению кластерами и пользователями ClickHouse<br/><br/>---<br/><br/>## Общая информация<br/><br/>ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.<br/><br/>Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`<br/><br/>Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.<br/><br/>Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.<br/>---<br/><br/>## Доступные операции<br/><br/>* **create** — Создание кластера<br/>* **delete** — Удаление кластера<br/>* **suspend** — Приостановка работы кластера<br/>* **resume** — Возобновление работы кластера<br/>* **create_database** — Создание базы данных<br/>* **delete_database** — Удаление базы данных<br/>* **create_user** — Создание пользователя и настройка прав доступа к базе данных<br/>* **delete_user** — Удаление пользователя<br/><br/>## Процесс создания и первого подключения<br/><br/>1. Выполнить операцию `create` - будет создан кластер<br/>2. Выполнить операцию `create_database` - будет создана база данных<br/>3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)<br/><br/>## Примеры подключения<br/><br/>### Подключение через HTTP-интерфейс<br/><br/>```bash<br/># Проверка доступности кластера<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SELECT 1&quot;<br/><br/># Выполнение запроса<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SHOW DATABASES&quot;<br/>```<br/><br/>## Простые кейсы<br/>*Создать БД и обычной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>```<br/>Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER 'clickhousek8s'`)<br/>В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах<br/><br/><br/>*Создание БД и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>```<br/>Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse<br/><br/>*Создание реплицируемой и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster 'clickhousek8s'<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> '/clickhouse/tables/{shard}/localUsers',<br/> '{replica}'<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster 'clickhousek8s'<br/>AS database.localUsers<br/>ENGINE = Distributed('clickhousek8s', 'database', 'localUsers', rand());<br/><br/>INSERT INTO database.users VALUES (1, 'Alice', 'alice@example.com');<br/>INSERT INTO database.users VALUES (2, 'Bob', 'bob@example.com');<br/>INSERT INTO database.users VALUES (3, 'Charlie', 'charlie@example.com');<br/>INSERT INTO database.users VALUES (4, 'David', 'david@example.com');<br/>INSERT INTO database.users VALUES (5, 'Gosha', 'gosha@example.com');<br/>INSERT INTO database.users VALUES (6, 'Eve', 'eve@example.com');<br/>INSERT INTO database.users VALUES (7, 'Frank', 'frank@example.com');<br/>INSERT INTO database.users VALUES (8, 'Grace', 'grace@example.com');<br/>INSERT INTO database.users VALUES (9, 'Hannah', 'hannah@example.com');<br/>INSERT INTO database.users VALUES (10, 'Ivan', 'ivan@example.com');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>```
@@ -0,0 +1,179 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Overview](clickhouse.md) | [Parameters](clickhouse_params.md) | [Operations](clickhouse_ops.md)
## Operations
| Operation | Kind | Action | Subresource | ID | Params | Description |
|---|---|---|---|---|---|---|
| `create` | `instance` | `create` | `` | `181` | resourceRealm, s3Uid, resourceInstances, resourceInstancesShards, resourceCPU, resourceMemory, appVersion, resourceDisk, needExternalAddressMaster, ipSpaceNameMaster, needCreateKeeper, resourceCPUKeeper, resourceMemoryKeeper, resourceInstancesKeeper, ext_BACKUP_SCHEDULE, ext_BACKUP_NUM_TO_RETAIN | Операция создания кластера ClickHouse<br/><br/>Для подключения к кластеру также необходимо создать базу данных через операцию `create_database` и создание пользователя через операцию `create_user` |
| `create_database` | `subresource` | `create` | `database` | `186` | databaseName | База данных создаётся на всех репликах кластера ClickHouse |
| `create_user` | `subresource` | `create` | `user` | `185` | username, databaseName, accessHosts | |
| `delete` | `instance` | `delete` | `` | `184` | | Удаление возможно только после остановки сервиса через операцию `suspend`<br/>После выполнения операции необходимо выждать определенное кол-во времени |
| `delete_database` | `subresource` | `delete` | `database` | `188` | databaseName | Необратимое действие!!!<br/>Трижды подумай, заблокируй телефон тимлида и не выполняй это действие |
| `delete_user` | `subresource` | `delete` | `user` | `187` | username | |
| `modify` | `instance` | `modify` | `` | `189` | resourceInstances, resourceInstancesShards, resourceCPU, resourceMemory, appVersion, resourceDisk, needExternalAddressMaster, ipSpaceNameMaster, needCreateKeeper, resourceCPUKeeper, resourceMemoryKeeper, resourceInstancesKeeper, ext_BACKUP_SCHEDULE, ext_BACKUP_NUM_TO_RETAIN | |
| `resume` | `instance` | `resume` | `` | `183` | | |
| `suspend` | `instance` | `suspend` | `` | `182` | | Операция приводит к удалению всех подов<br/>Persistent Volume остаются нетронутыми |
### Operation: create
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>572</td><td><strong><code class="code-no-wrap">resourceRealm</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Выбрать платформу из списка<br/><br/>**Если список не отображается**<br/>обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы</td><td>func=getAvailableResourceRealms</td></tr>
<tr><td>573</td><td><strong><code class="code-no-wrap">s3Uid</code></strong></td><td><code>uuid</code></td><td>ДА</td><td></td><td>**Если список не отображается** <br/>перейдите в раздел `S3 Object Storage` <br/>операция `create`</td><td>ref_svc_id=12</td></tr>
<tr><td>574</td><td><strong><code class="code-no-wrap">resourceInstances</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1</code></td><td>**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>575</td><td><strong><code class="code-no-wrap">resourceInstancesShards</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1</code></td><td>**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>576</td><td><strong><code class="code-no-wrap">resourceCPU</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1000</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=1000; maxvalue=8000</td></tr>
<tr><td>577</td><td><strong><code class="code-no-wrap">resourceMemory</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1536</code></td><td>Указывается в Megabytes</td><td>minvalue=1536; maxvalue=8192</td></tr>
<tr><td>578</td><td><strong><code class="code-no-wrap">appVersion</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>25.10</code></td><td>Версия `clickhouse-server`</td><td>value_list=25.10</td></tr>
<tr><td>579</td><td><strong><code class="code-no-wrap">resourceDisk</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>10</code></td><td>Указывается в Gigabytes</td><td>minvalue=1; maxvalue=999</td></tr>
<tr><td>580</td><td><strong><code class="code-no-wrap">needExternalAddressMaster</code></strong></td><td><code>boolean</code></td><td>ДА</td><td><code>false</code></td><td>Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы</td><td>value_list=false, true</td></tr>
<tr><td>581</td><td><strong><code class="code-no-wrap">ipSpaceNameMaster</code></strong></td><td><code>string</code></td><td>НЕТ</td><td></td><td>Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`</td><td></td></tr>
<tr><td>582</td><td><strong><code class="code-no-wrap">needCreateKeeper</code></strong></td><td><code>boolean</code></td><td>ДА</td><td><code>true</code></td><td>Аналог `Zookeeper`, представленный от ClickHouse</td><td>value_list=false, true</td></tr>
<tr><td>583</td><td><strong><code class="code-no-wrap">resourceCPUKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>50</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=50; maxvalue=8000</td></tr>
<tr><td>584</td><td><strong><code class="code-no-wrap">resourceMemoryKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>152</code></td><td>Указывается в Megabytes</td><td>minvalue=152; maxvalue=8192</td></tr>
<tr><td>585</td><td><strong><code class="code-no-wrap">resourceInstancesKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1</code></td><td>Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды</td><td>minvalue=1; maxvalue=3; value_list=1, 3</td></tr>
<tr><td>586</td><td><strong><code class="code-no-wrap">ext_BACKUP_SCHEDULE</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>0 0 * * *</code></td><td>Принимает формат `CRON`</td><td>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))+)$</td></tr>
<tr><td>587</td><td><strong><code class="code-no-wrap">ext_BACKUP_NUM_TO_RETAIN</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>7</code></td><td>Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**</td><td>minvalue=3; maxvalue=60</td></tr>
</tbody></table>
### Operation: create_database
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>600</td><td><strong><code class="code-no-wrap">databaseName</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Пример: `db01`</td><td>regex=^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$</td></tr>
</tbody></table>
### Operation: create_user
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>596</td><td><strong><code class="code-no-wrap">username</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Пример: `myusername`</td><td>regex=^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$; maxlength=62; minlength=2</td></tr>
<tr><td>598</td><td><strong><code class="code-no-wrap">databaseName</code></strong></td><td><code>json</code></td><td>ДА</td><td><code>[&quot;database&quot;]</code></td><td>Если базы не существует - при выполнении операции вернётся ошибка</td><td></td></tr>
<tr><td>599</td><td><strong><code class="code-no-wrap">accessHosts</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>::/0</code></td><td>Пример: `::/0`</td><td></td></tr>
</tbody></table>
### Operation: delete
None.
### Operation: delete_database
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>602</td><td><strong><code class="code-no-wrap">databaseName</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>ВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ</td><td></td></tr>
</tbody></table>
### Operation: delete_user
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>601</td><td><strong><code class="code-no-wrap">username</code></strong></td><td></td><td>ДА</td><td></td><td>Имя пользователя, созданное через операцию `create_user`</td><td></td></tr>
</tbody></table>
### Operation: modify
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>603</td><td><strong><code class="code-no-wrap">resourceInstances</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>604</td><td><strong><code class="code-no-wrap">resourceInstancesShards</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>605</td><td><strong><code class="code-no-wrap">resourceCPU</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=1000; maxvalue=8000</td></tr>
<tr><td>606</td><td><strong><code class="code-no-wrap">resourceMemory</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Megabytes</td><td>minvalue=1536; maxvalue=8192</td></tr>
<tr><td>607</td><td><strong><code class="code-no-wrap">appVersion</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>25.10</code></td><td>Версия `clickhouse-server`</td><td></td></tr>
<tr><td>608</td><td><strong><code class="code-no-wrap">resourceDisk</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Gigabytes<br/>**Нельзя** выставлять меньше текущего значения</td><td>minvalue=1; maxvalue=999</td></tr>
<tr><td>609</td><td><strong><code class="code-no-wrap">needExternalAddressMaster</code></strong></td><td><code>boolean</code></td><td>ДА</td><td></td><td>Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы</td><td>value_list=false, true</td></tr>
<tr><td>610</td><td><strong><code class="code-no-wrap">ipSpaceNameMaster</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`</td><td></td></tr>
<tr><td>611</td><td><strong><code class="code-no-wrap">needCreateKeeper</code></strong></td><td><code>boolean</code></td><td>ДА</td><td></td><td>Аналог `Zookeeper`, представленный от ClickHouse</td><td>value_list=false, true</td></tr>
<tr><td>612</td><td><strong><code class="code-no-wrap">resourceCPUKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=50; maxvalue=8000</td></tr>
<tr><td>613</td><td><strong><code class="code-no-wrap">resourceMemoryKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Megabytes</td><td>minvalue=152; maxvalue=8192</td></tr>
<tr><td>614</td><td><strong><code class="code-no-wrap">resourceInstancesKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды</td><td>minvalue=1; maxvalue=3; value_list=1, 3</td></tr>
<tr><td>615</td><td><strong><code class="code-no-wrap">ext_BACKUP_SCHEDULE</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>0 0 * * *</code></td><td>Принимает формат `CRON`</td><td>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))+)$</td></tr>
<tr><td>616</td><td><strong><code class="code-no-wrap">ext_BACKUP_NUM_TO_RETAIN</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**</td><td>minvalue=3; maxvalue=60</td></tr>
</tbody></table>
### Operation: resume
None.
### Operation: suspend
None.
## Subresources
### nubes_clickhouse_database
#### Example
```hcl
resource "nubes_clickhouse_database" "example" {
clickhouse_id = nubes_clickhouse.example.id
database_name = "TODO"
}
```
#### Create parameters
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>600</td><td><strong><code class="code-no-wrap">databaseName</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Пример: `db01`</td><td>regex=^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$</td></tr>
</tbody></table>
#### Modify parameters
None.
#### Delete parameters
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>602</td><td><strong><code class="code-no-wrap">databaseName</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>ВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ</td><td></td></tr>
</tbody></table>
### nubes_clickhouse_user
#### Example
```hcl
resource "nubes_clickhouse_user" "example" {
clickhouse_id = nubes_clickhouse.example.id
username = "TODO"
database_name = ["database"]
access_hosts = ::/0
}
```
#### Create parameters
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>596</td><td><strong><code class="code-no-wrap">username</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Пример: `myusername`</td><td>regex=^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$; maxlength=62; minlength=2</td></tr>
<tr><td>598</td><td><strong><code class="code-no-wrap">databaseName</code></strong></td><td><code>json</code></td><td>ДА</td><td><code>[&quot;database&quot;]</code></td><td>Если базы не существует - при выполнении операции вернётся ошибка</td><td></td></tr>
<tr><td>599</td><td><strong><code class="code-no-wrap">accessHosts</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>::/0</code></td><td>Пример: `::/0`</td><td></td></tr>
</tbody></table>
#### Modify parameters
None.
#### Delete parameters
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>601</td><td><strong><code class="code-no-wrap">username</code></strong></td><td></td><td>ДА</td><td></td><td>Имя пользователя, созданное через операцию `create_user`</td><td></td></tr>
</tbody></table>
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
[Overview](clickhouse_outputs.md) | [Parameters](clickhouse_outputs_params.md) | [Operations](clickhouse_outputs_ops.md)
@@ -0,0 +1,52 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Overview](clickhouse.md) | [Parameters](clickhouse_params.md) | [Operations](clickhouse_ops.md)
## Create parameters
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>572</td><td><strong><code class="code-no-wrap">resourceRealm</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Выбрать платформу из списка<br/><br/>**Если список не отображается**<br/>обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы</td><td>func=getAvailableResourceRealms</td></tr>
<tr><td>573</td><td><strong><code class="code-no-wrap">s3Uid</code></strong></td><td><code>uuid</code></td><td>ДА</td><td></td><td>**Если список не отображается** <br/>перейдите в раздел `S3 Object Storage` <br/>операция `create`</td><td>ref_svc_id=12</td></tr>
<tr><td>574</td><td><strong><code class="code-no-wrap">resourceInstances</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1</code></td><td>**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>575</td><td><strong><code class="code-no-wrap">resourceInstancesShards</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1</code></td><td>**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>576</td><td><strong><code class="code-no-wrap">resourceCPU</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1000</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=1000; maxvalue=8000</td></tr>
<tr><td>577</td><td><strong><code class="code-no-wrap">resourceMemory</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1536</code></td><td>Указывается в Megabytes</td><td>minvalue=1536; maxvalue=8192</td></tr>
<tr><td>578</td><td><strong><code class="code-no-wrap">appVersion</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>25.10</code></td><td>Версия `clickhouse-server`</td><td>value_list=25.10</td></tr>
<tr><td>579</td><td><strong><code class="code-no-wrap">resourceDisk</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>10</code></td><td>Указывается в Gigabytes</td><td>minvalue=1; maxvalue=999</td></tr>
<tr><td>580</td><td><strong><code class="code-no-wrap">needExternalAddressMaster</code></strong></td><td><code>boolean</code></td><td>ДА</td><td><code>false</code></td><td>Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы</td><td>value_list=false, true</td></tr>
<tr><td>581</td><td><strong><code class="code-no-wrap">ipSpaceNameMaster</code></strong></td><td><code>string</code></td><td>НЕТ</td><td></td><td>Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`</td><td></td></tr>
<tr><td>582</td><td><strong><code class="code-no-wrap">needCreateKeeper</code></strong></td><td><code>boolean</code></td><td>ДА</td><td><code>true</code></td><td>Аналог `Zookeeper`, представленный от ClickHouse</td><td>value_list=false, true</td></tr>
<tr><td>583</td><td><strong><code class="code-no-wrap">resourceCPUKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>50</code></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=50; maxvalue=8000</td></tr>
<tr><td>584</td><td><strong><code class="code-no-wrap">resourceMemoryKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>152</code></td><td>Указывается в Megabytes</td><td>minvalue=152; maxvalue=8192</td></tr>
<tr><td>585</td><td><strong><code class="code-no-wrap">resourceInstancesKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>1</code></td><td>Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды</td><td>minvalue=1; maxvalue=3; value_list=1, 3</td></tr>
<tr><td>586</td><td><strong><code class="code-no-wrap">ext_BACKUP_SCHEDULE</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>0 0 * * *</code></td><td>Принимает формат `CRON`</td><td>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))+)$</td></tr>
<tr><td>587</td><td><strong><code class="code-no-wrap">ext_BACKUP_NUM_TO_RETAIN</code></strong></td><td><code>integer</code></td><td>ДА</td><td><code>7</code></td><td>Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**</td><td>minvalue=3; maxvalue=60</td></tr>
</tbody></table>
## Modify parameters
<table class="resource-table">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Required</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>603</td><td><strong><code class="code-no-wrap">resourceInstances</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>604</td><td><strong><code class="code-no-wrap">resourceInstancesShards</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда</td><td>minvalue=1; maxvalue=7</td></tr>
<tr><td>605</td><td><strong><code class="code-no-wrap">resourceCPU</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=1000; maxvalue=8000</td></tr>
<tr><td>606</td><td><strong><code class="code-no-wrap">resourceMemory</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Megabytes</td><td>minvalue=1536; maxvalue=8192</td></tr>
<tr><td>607</td><td><strong><code class="code-no-wrap">appVersion</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>25.10</code></td><td>Версия `clickhouse-server`</td><td></td></tr>
<tr><td>608</td><td><strong><code class="code-no-wrap">resourceDisk</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Gigabytes<br/>**Нельзя** выставлять меньше текущего значения</td><td>minvalue=1; maxvalue=999</td></tr>
<tr><td>609</td><td><strong><code class="code-no-wrap">needExternalAddressMaster</code></strong></td><td><code>boolean</code></td><td>ДА</td><td></td><td>Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы</td><td>value_list=false, true</td></tr>
<tr><td>610</td><td><strong><code class="code-no-wrap">ipSpaceNameMaster</code></strong></td><td><code>string</code></td><td>ДА</td><td></td><td>Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`</td><td></td></tr>
<tr><td>611</td><td><strong><code class="code-no-wrap">needCreateKeeper</code></strong></td><td><code>boolean</code></td><td>ДА</td><td></td><td>Аналог `Zookeeper`, представленный от ClickHouse</td><td>value_list=false, true</td></tr>
<tr><td>612</td><td><strong><code class="code-no-wrap">resourceCPUKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Milicores<br/>`1000` Mili == `1` Ядро</td><td>minvalue=50; maxvalue=8000</td></tr>
<tr><td>613</td><td><strong><code class="code-no-wrap">resourceMemoryKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Указывается в Megabytes</td><td>minvalue=152; maxvalue=8192</td></tr>
<tr><td>614</td><td><strong><code class="code-no-wrap">resourceInstancesKeeper</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды</td><td>minvalue=1; maxvalue=3; value_list=1, 3</td></tr>
<tr><td>615</td><td><strong><code class="code-no-wrap">ext_BACKUP_SCHEDULE</code></strong></td><td><code>string</code></td><td>ДА</td><td><code>0 0 * * *</code></td><td>Принимает формат `CRON`</td><td>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))+)$</td></tr>
<tr><td>616</td><td><strong><code class="code-no-wrap">ext_BACKUP_NUM_TO_RETAIN</code></strong></td><td><code>integer</code></td><td>ДА</td><td></td><td>Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**</td><td>minvalue=3; maxvalue=60</td></tr>
</tbody></table>
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
[Overview](clickhouse_params_create.md) | [Parameters](clickhouse_params_create_params.md) | [Operations](clickhouse_params_create_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
@@ -0,0 +1,11 @@
# Resource nubes_clickhouse
Service ID: `120`
Service Name: ClickHouse
[Manual](clickhouse.md) | [Create params](clickhouse_params_create.md) | [Modify params](clickhouse_params_modify.md) | [Output params](clickhouse_outputs.md) | [Operations](clickhouse_ops.md) | [Example](clickhouse_example.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
[Overview](clickhouse_params_modify.md) | [Parameters](clickhouse_params_modify_params.md) | [Operations](clickhouse_params_modify_ops.md)
@@ -0,0 +1,28 @@
# Resource nubes_clickhouse_user
Service: nubes_clickhouse
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
## Example
```hcl
resource "nubes_clickhouse_user" "example" {
clickhouse_id = nubes_clickhouse.example.id
username = "TODO"
database_name = ["database"]
access_hosts = ::/0
}
```
@@ -0,0 +1,17 @@
# Resource nubes_clickhouse_user
Service: nubes_clickhouse
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
@@ -0,0 +1,17 @@
# Resource nubes_clickhouse_user
Service: nubes_clickhouse
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
[Overview](clickhouse_user.md) | [Parameters](clickhouse_user_params.md) | [Operations](clickhouse_user_ops.md)
@@ -0,0 +1,71 @@
# Resource nubes_d_e_p_r_e_c_a_t_e_d
Service ID: `24`
Service Name: DEPRECATED Правила маршрутизации для VM (vc_nat)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
## MAN
Правила маршрутизации в Cloud Director. Требует наличие сетей, ВМ<br/>DEPRECATED
## Summary
Правила маршрутизации в Cloud Director. Требует наличие сетей, ВМ<br/>DEPRECATED
## Example
```text
resource "nubes_d_e_p_r_e_c_a_t_e_d" "example" {
delete_mode = "state_only"
resume_if_exists = НЕТ
}
```
## Outputs
- `state_params` (map)
- `state_out` (map)
- `state_params_flat` (map)
- `state_out_flat` (map)
- `vault_secrets` (map)
- `vault_url` (string)
- `vault_user_path` (string)
- `vault_fields` (list)
## Lifecycle defaults
- `delete_mode_default` = `state_only`
- `resume_if_exists_default` = `False`
## Lifecycle behavior
- If suspend/resume exist, delete maps to suspend and apply can resume.
- Advanced users may override delete_mode and resume_if_exists.
@@ -0,0 +1,3 @@
# MAN: d_e_p_r_e_c_a_t_e_d
Правила маршрутизации в Cloud Director. Требует наличие сетей, ВМ<br/>DEPRECATED
@@ -0,0 +1,13 @@
# Resource nubes_d_e_p_r_e_c_a_t_e_d
Service ID: `24`
Service Name: DEPRECATED Правила маршрутизации для VM (vc_nat)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
@@ -0,0 +1,13 @@
# Resource nubes_d_e_p_r_e_c_a_t_e_d
Service ID: `24`
Service Name: DEPRECATED Правила маршрутизации для VM (vc_nat)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
[Overview](d_e_p_r_e_c_a_t_e_d.md) | [Parameters](d_e_p_r_e_c_a_t_e_d_params.md) | [Operations](d_e_p_r_e_c_a_t_e_d_ops.md)
+13
View File
@@ -0,0 +1,13 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
## MAN
<div class="man-content">
Необходима DNS зона, в которой будет создана DNS запись.<br/>Выберите <br/>* Зону в которой будет создана запись<br/>* Тип записи<br/>* Имя записи<br/>* Значение записи
</div>
@@ -0,0 +1,49 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
## Copy-ready manifest (`dnsrecord_main.tf`)
```hcl
terraform {
required_providers {
nubes = {
source = "terra.k8c.ru/nubes/nubes"
version = "2.1.23"
}
}
}
# Токен доступа api_token к Nubes API — замените на реальный.
provider "nubes" {
api_token = "token_***"
api_endpoint = "https://deck-api.ngcloud.ru/api/v1/index.cfm"
}
resource "nubes_dnsrecord" "baza" {
zone_uid = "TODO" # UUID экземпляра услуги DNS-зоны
record_type = "A" # Тип DNS-записи
record_name = "TODO" # Имя записи. Имя зоны в конце проставляется автоматически
record_input = "TODO" # Значение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
# Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте
record_t_t_l = 3600 # Time-to-Leave записи. Раз в какое время запись будет обновлена
}
```
## Outputs usage
```hcl
# Выходные параметры можно использовать как
nubes_dnsrecord.baza.state_params["имя_ключа"]
nubes_dnsrecord.baza.state_out["имя_ключа"]
nubes_dnsrecord.baza.state_params_flat["имя_ключа"]
nubes_dnsrecord.baza.state_out_flat["имя_ключа"]
nubes_dnsrecord.baza.vault_secrets["имя_ключа"]
nubes_dnsrecord.baza.vault_url
nubes_dnsrecord.baza.vault_user_path
nubes_dnsrecord.baza.vault_fields
```
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_example.md) | [Parameters](dnsrecord_example_params.md) | [Operations](dnsrecord_example_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_example.md) | [Parameters](dnsrecord_example_params.md) | [Operations](dnsrecord_example_ops.md)
@@ -0,0 +1,3 @@
# Инструкция для dnsrecord
Необходима DNS зона, в которой будет создана DNS запись.<br/>Выберите <br/>* Зону в которой будет создана запись<br/>* Тип записи<br/>* Имя записи<br/>* Значение записи
@@ -0,0 +1,3 @@
# MAN: dnsrecord
Необходима DNS зона, в которой будет создана DNS запись.<br/>Выберите <br/>* Зону в которой будет создана запись<br/>* Тип записи<br/>* Имя записи<br/>* Значение записи
@@ -0,0 +1,13 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
## Operations
- `create` — Создание кластера. Параметры: [Create params](dnsrecord_params_create.md)
- `delete`
- `modify` — Изменение кластера. Параметры: [Modify params](dnsrecord_params_modify.md)
@@ -0,0 +1,41 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
## Output params
- `state_params` (map) — параметры, отправленные в API при создании/изменении
- `state_out` (map) — ответ API с результатами/выходными значениями
- `state_params_flat` (map) — параметры в плоском виде (ключи с путями)
- `state_out_flat` (map) — ответы в плоском виде (ключи с путями)
- `vault_secrets` (map) — секреты, записанные в Vault для ресурса
- `vault_url` (string) — адрес Vault для ресурса
- `vault_user_path` (string) — путь пользователя в Vault
- `vault_fields` (list) — список ключей доступных секретов
## Реальные поля из облака (test / A-record (admin.1dbfe9da-ce1c-4958-b359-d016a4b455c8) / running)
Поля ниже получены из реальных инстансов этого сервиса в облаке.
Используйте их как готовые ключи для `state_out_flat` и `vault_secrets`.
### `state_params` ключи
- `state_params["zoneUid"]`
- `state_params["recordTTL"]`
- `state_params["recordName"]`
- `state_params["recordType"]`
- `state_params["recordInput"]`
### `state_out_flat` ключи
- `state_out_flat["record"]`
- `state_out_flat["dnsServers"]`
### `vault_secrets` ключи
- `vault_secrets["fields"]`
- `vault_secrets["userPath"]`
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_outputs.md) | [Parameters](dnsrecord_outputs_params.md) | [Operations](dnsrecord_outputs_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_outputs.md) | [Parameters](dnsrecord_outputs_params.md) | [Operations](dnsrecord_outputs_ops.md)
@@ -0,0 +1,12 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
## Parameters
- [Create params](dnsrecord_params_create.md)
- [Modify params](dnsrecord_params_modify.md)
@@ -0,0 +1,27 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
## Create params
**Обязательные параметры (вводимые пользователем)**
<table class="resource-table resource-table-compact resource-table-required">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>75</td><td><strong><code class="code-no-wrap">zone_uid</code></strong></td><td><code>uuid</code></td><td>UUID экземпляра услуги DNS-зоны</td><td>ref_svc_id=110</td></tr>
<tr><td>76</td><td><strong><code class="code-no-wrap">record_type</code></strong></td><td><code>string</code></td><td>Тип DNS-записи</td><td>value_list=A, AAAA, CNAME, MX, PTR, SOA, SRV, TXT, LUA, NS, SSHFP</td></tr>
<tr><td>77</td><td><strong><code class="code-no-wrap">record_name</code></strong></td><td><code>string</code></td><td>Имя записи. Имя зоны в конце проставляется автоматически</td><td>unique_scope=parent</td></tr>
<tr><td>78</td><td><strong><code class="code-no-wrap">record_input</code></strong></td><td><code>string</code></td><td>Значение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP</td><td></td></tr>
</tbody></table>
**Параметры, имеющие значение по умолчанию, если не меняете - эти параметры не обязательно прописывать в манифесте**
<table class="resource-table resource-table-compact">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Default</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>450</td><td><strong><code class="code-no-wrap">record_ttl</code></strong></td><td><code>integer</code></td><td><code>3600</code></td><td>Time-to-Leave записи. Раз в какое время запись будет обновлена</td><td>minvalue=30; maxvalue=604800</td></tr>
</tbody></table>
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_params_create.md) | [Parameters](dnsrecord_params_create_params.md) | [Operations](dnsrecord_params_create_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_params_create.md) | [Parameters](dnsrecord_params_create_params.md) | [Operations](dnsrecord_params_create_ops.md)
@@ -0,0 +1,15 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
## Modify params
<table class="resource-table resource-table-compact">
<thead><tr><th>ID</th><th>Code</th><th>Type</th><th>Description</th><th>Constraints</th></tr></thead>
<tbody>
<tr><td>256</td><td><strong><code class="code-no-wrap">record_input</code></strong></td><td><code>string</code></td><td>Запись. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP</td><td></td></tr>
</tbody></table>
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_params_modify.md) | [Parameters](dnsrecord_params_modify_params.md) | [Operations](dnsrecord_params_modify_ops.md)
@@ -0,0 +1,9 @@
# Resource nubes_dnsrecord
Service ID: `111`
Service Name: DNS запись
[Manual](dnsrecord.md) | [Create params](dnsrecord_params_create.md) | [Modify params](dnsrecord_params_modify.md) | [Output params](dnsrecord_outputs.md) | [Operations](dnsrecord_ops.md) | [Example](dnsrecord_example.md)
[Overview](dnsrecord_params_modify.md) | [Parameters](dnsrecord_params_modify_params.md) | [Operations](dnsrecord_params_modify_ops.md)
+13
View File
@@ -0,0 +1,13 @@
# Resource nubes_dnszone
Service ID: `110`
Service Name: DNS зона
[Manual](dnszone.md) | [Create params](dnszone_params_create.md) | [Modify params](dnszone_params_modify.md) | [Output params](dnszone_outputs.md) | [Operations](dnszone_ops.md) | [Example](dnszone_example.md)
## MAN
<div class="man-content">
## ![image](https://img.icons8.com/?size=50&id=41400&format=png) Необходимо делегировать зону у регистратора на Авторитетные DNS (Сервера зон)<br/><br/>ns3.ngcloud.ru<br/>``` bash<br/>185.247.187.83<br/>2a10:aa80:0:5::3<br/>```<br/><br/>ns4.ngcloud.ru<br/>``` bash<br/>81.22.46.43<br/>2a10:aa80:0:6::3<br/>```
</div>

Some files were not shown because too many files have changed in this diff Show More