diff --git a/dev/resources_yaml/109_zones_v2.yaml b/dev/resources_yaml/109_zones_v2.yaml
deleted file mode 100644
index b17bfc4..0000000
--- a/dev/resources_yaml/109_zones_v2.yaml
+++ /dev/null
@@ -1,281 +0,0 @@
-name: zones_v2
-service_id: 109
-service_display_name: Управление DNS
-service_short_name: zonesV2
-service_man: '# Управление DNS
## Что делает сервис
Управляет DNS-зоной вашего домена в инфраструктуре `ngcloud.ru`.
Сервис помогает:
- создать DNS-зону;
- поддерживать записи в зоне (добавлять, удалять, массово менять);
- удалять зону;
- синхронизировать данные зоны с фактическим состоянием на DNS-серверах.
Сервис работает с авторитетными DNS-серверами зоны:
- `ns3.ngcloud.ru`
- `185.247.187.83`
- `2a10:aa80:0:5::3`
- `ns4.ngcloud.ru`
- `81.22.46.43`
- `2a10:aa80:0:6::3`
## Очень важно: что сделать у регистратора домена
Чтобы зона действительно начала обслуживаться, **нужно делегировать домен** у регистратора на авторитетные DNS-серверы:
- `ns3.ngcloud.ru`
- `ns4.ngcloud.ru`
В панели регистратора нужно заменить NS-серверы домена на значения выше.
Без этого записи в зоне могут быть созданы, но интернет не будет использовать их для вашего домена.
## Проверка после настройки
Проверить ответы от серверов зоны:
```bash
dig <ваш_домен> @ns3.ngcloud.ru
dig <ваш_домен> @ns4.ngcloud.ru
```
Проверить, что делегирование у регистратора применилось:
```bash
dig <ваш_домен> NS
```
В ответе должны быть `ns3.ngcloud.ru` и `ns4.ngcloud.ru`.
'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 254
- kind: instance
- action: create
- man: '# Операция `create` (создание DNS-зоны)
## Что делает операция
`create` создает новую DNS-зону на авторитетных серверах сервиса.
После создания зона закрепляется за пользователем, который запустил создание инстанса.
## Когда использовать
- подключаете домен к сервису впервые;
- нужна новая отдельная зона.
## Важное условие после создания
У регистратора домена нужно делегировать зону на:
- `ns3.ngcloud.ru`
- `185.247.187.83`
- `2a10:aa80:0:5::3`
- `ns4.ngcloud.ru`
- `81.22.46.43`
- `2a10:aa80:0:6::3`
Если этого не сделать, зона будет создана технически, но в интернете домен не начнет работать через эти DNS.
## Объяснение параметра `Типа зоны`
### `NATIVE`
Это основная (ведущая) зона в нашем сервисе.
Вы управляете записями здесь, и именно эта зона считается источником правды.
### `SLAVE`
Это копия зоны, которая подтягивает данные с внешнего DNS-сервера.
Такой режим нужен, когда истинный источник записей находится не в нашем сервисе, а на другом DNS.
## Что проверяет операция
- что такая зона еще не существует на целевых DNS;
- корректность входных параметров зоны;
- ограничения на служебные/запрещенные имена зон.'
- params:
- - id: 761
- code: zoneName
- data_type: string
- required: true
- regex: ^([a-z0-9-]+\.)+[a-z0-9-]+$
- maxlength: 64
- minlength: 1
- descr: Имя зоны
- sort: 20
- - id: 762
- code: zoneKind
- data_type: string
- required: true
- default: NATIVE
- value_list:
- - NATIVE
- - SLAVE
- descr: Тип зоны
- sort: 30
- - id: 763
- code: zoneMastersForSlave
- data_type: string
- required: false
- descr: Использовать если выбран тип SLAVE. IP адреса в формате через пробел для настройки Master-серверов
- man: Пример:
**8.8.8.8 8.8.4.4**
- sort: 40
- - id: 764
- code: zoneRefresh
- data_type: integer > 0
- required: true
- default: "86400"
- minvalue: 600
- descr: Время ожидания ответа вторичного DNS перед запросом SOA-записи с первичных серверов
- sort: 50
- - id: 765
- code: zoneRetry
- data_type: integer > 0
- required: true
- default: "7200"
- minvalue: 600
- descr: Время в течение которого сервер повторно попробует синхронизировать информацию с первичных DNS-серверов
- sort: 60
- - id: 766
- code: zoneExpire
- data_type: integer > 0
- required: true
- default: "3600000"
- minvalue: 3600
- descr: Время в течение которого вторичный DNS будет пытаться завершить синхронизацию зоны с первичным
- sort: 70
- - id: 767
- code: zoneTTL
- data_type: integer > 0
- required: true
- default: "86400"
- minvalue: 600
- descr: Время, в течение которого информация будет кешироваться другими DNS-серверами
- sort: 80
- - id: 768
- code: resourceRealm
- data_type: string
- required: true
- default: powerdns
- value_list:
- - powerdns
- func: getAvailableResourceRealms
- sort: 10
- - name: create_record
- id: 260
- kind: subresource
- action: create
- subresource: record
- man: '# Операция `create_record` (добавление одной записи)
## Что делает операция
`create_record` точечно добавляет одну DNS-запись в существующую зону.
Если аналогичная запись уже есть, итоговый набор дополняется в рамках логики типа/имени.
## Когда использовать
- нужно добавить одну новую запись без массовой переработки зоны;
- нужно быстро внести точечное изменение.
'
- params:
- - id: 777
- code: recordName
- data_type: string
- required: true
- regex: ^([a-zA-Z0-9\-_]+\.)*[a-zA-Z0-9\-_]+$|^(\d{1,3}\.){3}\d{1,3}$|^.+$
- unique_scope: parent
- maxlength: 64
- minlength: 1
- man: Имя зоны в конце проставляется автоматически
- sort: 10
- - id: 778
- code: recordTTL
- data_type: integer > 0
- required: true
- default: "3600"
- maxvalue: 84000
- minvalue: 30
- man: Time-to-Leave записи. Раз в какое время запись будет обновлена
- sort: 20
- - id: 779
- code: recordType
- data_type: string
- required: true
- default: A
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- sort: 30
- - id: 780
- code: recordInput
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- man: Валидация производится только после запуска операции. Если при указанном типе будет указано некорректно значение, это будет описано в логе ошибки операции
- sort: 40
- sub_params:
- - id: 240
- code: record
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: delete
- id: 255
- kind: instance
- action: delete
- man: '# Операция `delete` (удаление зоны)
## Что делает операция
`delete` удаляет DNS-зону целиком вместе со всеми записями.
## Когда использовать
- зона больше не нужна;
- домен выводится из эксплуатации в рамках сервиса.
## Важная логика
- удаляется вся зона, а не отдельные записи;
- перед удалением стоит проверить, что домен действительно не используется.
'
- params: []
- - name: delete_record
- id: 261
- kind: subresource
- action: delete
- subresource: record
- man: '# Операция `delete_record` (удаление записей по имени)
## Что делает операция
`delete_record` удаляет все записи с указанным именем (`recordName`), независимо от типа (`A`, `TXT`, `CNAME` и т.д.).
## Когда использовать
- нужно полностью убрать конкретное имя из зоны;
- требуется быстро очистить все варианты записи для одного имени.
## Важная логика
- удаляются все типы записей для выбранного имени;
- если нужно удалить только один тип записи, лучше использовать `modify_record` с нужным целевым состоянием.
'
- params:
- - id: 781
- code: recordName
- data_type: string
- required: true
- - name: modify
- id: 256
- kind: instance
- action: modify
- man: '# Операция `modify` (массовое изменение записей зоны)
## Что делает операция
`modify` обновляет записи зоны целиком на основе переданного массива `records`.
Это операция "приведения к целевому состоянию": система берет входной набор и применяет его на DNS-серверах.
## Когда использовать
- нужно массово обновить зону;
- нужно заменить сразу несколько записей одним запуском;
- нужно синхронно привести зону к заранее подготовленному списку записей.
## Важная логика
- запись группируется по `(имя, тип, TTL)`;
- операция ориентирована на полное обновление набора, а не на "точечную мелкую правку".
Для точечных изменений одной записи обычно удобнее `create_record` или `modify_record`.
'
- params:
- - id: 769
- code: records
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 86
- code: recordName
- data_type: string
- required: true
- default: ""
- regex: ^([a-zA-Z0-9\-_]+\.)*[a-zA-Z0-9\-_]+$|^(\d{1,3}\.){3}\d{1,3}$|^.+$
- man: Имя зоны в конце проставляется автоматически
- is_modifiable: false
- - id: 88
- code: recordTTL
- data_type: integer > 0
- required: true
- default: "3600"
- man: Time-to-Leave записи. Раз в какое время запись будет обновлена
- is_modifiable: false
- - id: 85
- code: recordType
- data_type: string
- required: true
- default: A
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- - CAA
- is_modifiable: false
- - id: 87
- code: recordInput
- data_type: string
- required: true
- default: ""
- man: Валидация производится только после запуска операции. Если при указанном типе будет указано некорректно значение, это будет описано в логе ошибки операции
- is_modifiable: false
- - name: modify_record
- id: 262
- kind: subresource
- action: modify
- subresource: record
- man: '# Операция `modify_record` (изменение конкретной записи)
## Что делает операция
`modify_record` заменяет записи с указанным именем одной новой записью заданного типа и значения.
## Когда использовать
- нужно исправить одну конкретную запись;
- нужно заменить старые значения записи на новое целевое значение.
## Важная логика
- существующие записи выбранного имени очищаются;
- затем добавляется одна новая запись с переданными параметрами.
'
- params:
- - id: 783
- code: recordName
- data_type: string
- required: true
- sort: 10
- - id: 784
- code: recordTTL
- data_type: integer > 0
- required: true
- maxvalue: 84000
- minvalue: 30
- man: Time-to-Leave записи. Раз в какое время запись будет обновлена
- sort: 20
- - id: 785
- code: recordType
- data_type: string
- required: true
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- sort: 30
- - id: 786
- code: recordInput
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- man: Заменяет все текущие записи конкретного типа
Валидация производится только после запуска операции. Если при указанном типе будет указано некорректно значение, это будет описано в логе ошибки операции
- sort: 40
- depends_on: recordName
- sub_params:
- - id: 241
- code: record
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: reconcile
- id: 259
- kind: action
- action: reconcile
- man: '# Операция `reconcile` (актуализация состояния зоны)
## Что делает операция
`reconcile` подтягивает актуальное фактическое состояние DNS-зоны и синхронизирует его с данными инстанса.
Операция техническая: она нужна для выравнивания состояния, а не для бизнес-изменений записей.
## Когда использовать
- записи менялись вручную на DNS-серверах;
- нужно обновить схему/состояние инстанса в личном кабинете;
- нужно импортировать текущие записи в управляемое состояние.
## Важная логика
- актуализируется список записей в данных инстанса;
- стандартно ничего "нового" для клиента не добавляет и не удаляет само по себе, а приводит данные к реальности.
'
- params: []
diff --git a/dev/resources_yaml/111_dnsrecord.yaml b/dev/resources_yaml/111_dnsrecord.yaml
deleted file mode 100644
index d87a3c1..0000000
--- a/dev/resources_yaml/111_dnsrecord.yaml
+++ /dev/null
@@ -1,105 +0,0 @@
-name: dnsrecord
-service_id: 111
-service_display_name: DNS запись
-service_short_name: dnsrecord
-service_man: Необходима DNS зона, в которой будет создана DNS запись.
Выберите
* Зону в которой будет создана запись
* Тип записи
* Имя записи
* Значение записи
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 45
- kind: instance
- action: create
- params:
- - id: 75
- code: zoneUid
- data_type: uuid
- required: true
- ref_svc_id: 109
- descr: UUID экземпляра услуги DNS-зоны
- man: UUID экземпляра услуги DNS-зоны
- sort: 10
- - id: 76
- code: recordType
- data_type: string
- required: true
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - PTR
- - SOA
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- descr: Тип DNS-записи
- man: Тип DNS-записи
- sort: 20
- - id: 77
- code: recordName
- data_type: string
- required: true
- unique_scope: parent
- descr: Имя записи. Имя зоны в конце проставляется автоматически
- man: Имя записи. Имя зоны в конце проставляется автоматически
- sort: 30
- - id: 78
- code: recordInput
- data_type: string
- required: true
- descr: Значение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
- man: Значение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
- sort: 40
- is_modifiable: true
- - id: 450
- code: recordTTL
- data_type: integer > 0
- required: true
- default: "3600"
- maxvalue: 604800
- minvalue: 30
- descr: Time-to-Leave записи. Раз в какое время запись будет обновлена
- sort: 50
- - name: delete
- id: 46
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 90
- kind: instance
- action: modify
- params:
- - id: 256
- code: recordInput
- data_type: string
- required: true
- descr: Запись. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
- - name: reconcile
- id: 408
- kind: action
- action: reconcile
- params: []
diff --git a/dev/resources_yaml/115_mariadb.yaml b/dev/resources_yaml/115_mariadb.yaml
deleted file mode 100644
index f8ee1c1..0000000
--- a/dev/resources_yaml/115_mariadb.yaml
+++ /dev/null
@@ -1,458 +0,0 @@
-name: mariadb
-service_id: 115
-service_display_name: Mariadb
-service_short_name: mariadb
-service_man: 'Mariadb кластер. Ресурсная платформа: k8s. Автоматизация: k8s operator.
Автоматическое резервное копирование, ручное восстановление.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 138
- kind: instance
- action: create
- params:
- - id: 877
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 242
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 878
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 243
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 244
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 245
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- man: Пока `Galera` выключена
Как будет запрос на включение и тестирование, реплики можно будет увеличивать
- is_modifiable: false
- - id: 246
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 879
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 248
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 247
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 880
- code: mariadbConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 249
- code: version
- data_type: string
- required: true
- default: 9.4.0
- value_list:
- - 8.4.0
- - 9.4.0
- is_modifiable: false
- - id: 881
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- is_modifiable: true
- sub_params:
- - id: 250
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 251
- code: retain
- data_type: integer > 0
- required: true
- default: "720"
- is_modifiable: false
- - id: 252
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 882
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- is_modifiable: true
- sub_params:
- - id: 253
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 254
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 255
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 256
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - name: create_database
- id: 242
- kind: subresource
- action: create
- subresource: database
- params:
- - id: 734
- code: dbName
- data_type: string
- required: true
- default: db-ebbjso21
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- descr: 'Пример: `db01`'
- - name: create_user
- id: 243
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 735
- code: username
- data_type: string
- required: true
- default: user3vanbmfy
- regex: ^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$
- maxlength: 62
- minlength: 2
- descr: 'Пример: `myusername`'
- sort: 10
- - id: 736
- code: password
- data_type: string
- required: true
- default: p4egnsar
- maxlength: 62
- minlength: 8
- descr: Секрет будет записан в хранилище секретов и не будет отображаться публично
- sort: 20
- is_sensitive: true
- - id: 737
- code: dbName
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- descr: Необходимо указать массив существующих баз
- man: Если базы не существует - при выполнении операции вернётся ошибка
- sort: 30
- sub_params:
- - id: 54
- code: dbname
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 738
- code: accessHosts
- data_type: string
- required: true
- default: '%'
- descr: 'Пример: `%`'
- sort: 40
- - name: delete
- id: 139
- kind: instance
- action: delete
- params:
- - id: 456
- code: deleteS3Bucket
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- descr: Также удалить технический S3 Bucket с бэкапами?
- sort: 10
- - name: delete_database
- id: 248
- kind: subresource
- action: delete
- subresource: database
- params:
- - id: 745
- code: dbName
- data_type: string
- required: true
- descr: ВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ
- - name: delete_user
- id: 247
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 744
- code: username
- data_type: string
- required: true
- descr: Имя пользователя, созданное через операцию `create_user`
- - name: modify
- id: 142
- kind: instance
- action: modify
- params:
- - id: 883
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 257
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 258
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 259
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- man: Пока `Galera` выключена
Как будет запрос на включение и тестирование, реплики можно будет увеличивать
- is_modifiable: false
- - id: 260
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 884
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 261
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 262
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 885
- code: mariadbConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 263
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - 8.4.0
- - 9.4.0
- is_modifiable: false
- - id: 886
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 266
- code: schedule
- data_type: string
- required: true
- default: ""
- 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))+)$
- is_modifiable: false
- - id: 264
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 265
- code: retain
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 887
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- sub_params:
- - id: 270
- code: percent
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 267
- code: enabled
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 268
- code: schedule
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 269
- code: quota
- data_type: integer > 0
- required: true
- default: ""
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - name: reconcile
- id: 287
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 141
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 140
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/116_kafka.yaml b/dev/resources_yaml/116_kafka.yaml
deleted file mode 100644
index 54f2f69..0000000
--- a/dev/resources_yaml/116_kafka.yaml
+++ /dev/null
@@ -1,335 +0,0 @@
-name: kafka
-service_id: 116
-service_display_name: ApacheKafka
-service_short_name: kafka
-service_man: '# Инструкция по развертыванию Организация в Cloud Director через платформу
## 1. Общая информация
Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.
### Доступные операции
**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.
### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.
### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).
---
## 4. Выходные параметры
Услуга предоставляет следующие выходные параметры (формируются в процессе операций):
### Идентификатор организации
Уникальный идентификатор созданной организации. Используется для всех дальнейших API-операций.
### Статус организации
Отражает текущее состояние: active, suspended, modifying, deleting.
### Параметры сети
Выходные данные при наличии ipSpaces: список выделенных внешних IP, имя ip_space, количество IP.
---
## 5. Дополнительная информация
- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)**;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к этой организации.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak.
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 148
- kind: instance
- action: create
- params:
- - id: 1084
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 579
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1085
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 580
- code: cpu
- data_type: integer > 0
- required: true
- default: "2000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 581
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- is_modifiable: false
- - id: 582
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 583
- code: disk
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 1086
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 584
- code: allocationExternal
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- is_modifiable: false
- - id: 585
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: create_topic
- id: 165
- kind: subresource
- action: create
- subresource: topic
- man: '# Инструкция по управлению топиками Apache Kafka через платформу
## 1. Общая информация
---
Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам.
Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API.
---
## Доступные операции
- **create_topic** — Создание топика
- **modify_topic** — Модификация топика
- **delete_topic** — Удаление топика
---
## 2. Параметры создания топика
Ниже перечислены параметры, которые необходимо указать при создании нового топика:
* **Имя топика**
Название топика.
Должно быть уникальным в пределах кластера.
Пример: `orders-events`.
* **Партиции**
Количество партиций топика.
Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки.
Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества
Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
* **Реплики**
Количество реплик для каждой партиции.
Обычно равно количеству доступных брокеров или меньше.
Пример: `3`.
---
## 4. Параметры модификации топика
Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными:
* **Имя топика**
Название топика.
Пример: `orders-events`.
* **Партиции**
Новое количество партиций.
Пример: `12`.
* **Реплики**
Новое количество реплик.
Пример: `2`.
---
## 5. Рекомендации
* Планируйте количество партиций с запасом — уменьшение их числа невозможно.
* Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров.
* Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки.
---'
- params:
- - id: 523
- code: nameTopic
- data_type: string
- required: true
- descr: 'Пример: `orders-events`'
- sort: 10
- - id: 524
- code: partitions
- data_type: integer > 0
- required: true
- descr: Число партиций можно увеличить, но уменьшить их нельзя.
- - id: 525
- code: replicas
- data_type: integer > 0
- required: true
- descr: Количество реплик не может привышать количество реплик брокера
- sort: 20
- - name: create_user
- id: 168
- kind: subresource
- action: create
- subresource: user
- man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
- params:
- - id: 530
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- - id: 531
- code: nameTopic
- data_type: string
- required: true
- descr: 'Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`'
- - id: 532
- code: operations
- data_type: array
- required: true
- value_list:
- - Create
- - Describe
- - Read
- - Write
- descr: 'Пример: `Create, Describe, Read, Write`'
- - id: 533
- code: group
- data_type: string
- required: true
- default: '*'
- descr: 'Пример: `order-consumers` или `*`'
- - id: 534
- code: accessHosts
- data_type: string
- required: true
- default: '*'
- descr: 'Пример: `192.168.1.0/24` или `*`'
- - name: delete
- id: 149
- kind: instance
- action: delete
- params: []
- - name: delete_topic
- id: 167
- kind: subresource
- action: delete
- subresource: topic
- params:
- - id: 529
- code: nameTopic
- data_type: string
- required: true
- descr: Необходимо выбрать топик, который необходимо удалить
- - name: delete_user
- id: 170
- kind: subresource
- action: delete
- subresource: user
- man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
- params:
- - id: 540
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- - name: modify
- id: 162
- kind: instance
- action: modify
- params:
- - id: 1087
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 586
- code: cpu
- data_type: integer > 0
- required: true
- default: "2000"
- is_modifiable: false
- - id: 587
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- is_modifiable: false
- - id: 588
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 589
- code: disk
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 1088
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 590
- code: allocationExternal
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- is_modifiable: false
- - id: 591
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- is_modifiable: false
- - name: modify_topic
- id: 166
- kind: subresource
- action: modify
- subresource: topic
- man: '# Инструкция по управлению топиками Apache Kafka через платформу
## 1. Общая информация
---
Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам.
Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API.
---
## Доступные операции
- **create_topic** — Создание топика
- **modify_topic** — Модификация топика
- **delete_topic** — Удаление топика
---
## 2. Параметры создания топика
Ниже перечислены параметры, которые необходимо указать при создании нового топика:
* **Имя топика**
Название топика.
Должно быть уникальным в пределах кластера.
Пример: `orders-events`.
* **Партиции**
Количество партиций топика.
Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки.
Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества
Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
* **Реплики**
Количество реплик для каждой партиции.
Обычно равно количеству доступных брокеров или меньше.
Пример: `3`.
---
## 4. Параметры модификации топика
Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными:
* **Имя топика**
Название топика.
Пример: `orders-events`.
* **Партиции**
Новое количество партиций.
Пример: `12`.
* **Реплики**
Новое количество реплик.
Пример: `2`.
---
## 5. Рекомендации
* Планируйте количество партиций с запасом — уменьшение их числа невозможно.
* Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров.
* Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки.
---'
- params:
- - id: 526
- code: nameTopic
- data_type: string
- required: true
- descr: 'Пример: `orders-events`'
- sort: 10
- - id: 527
- code: partitions
- required: false
- descr: Число партиций на кластер ≤ 100 × (число брокеров) × (фактор репликации). Пример `50`
- sort: 30
- - id: 528
- code: replicas
- required: false
- descr: Количество партиций ≤ (число брокеров). Пример `2`
- sort: 20
- - name: modify_user
- id: 169
- kind: subresource
- action: modify
- subresource: user
- man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
- params:
- - id: 535
- code: nameTopic
- data_type: string
- required: false
- default: '*'
- descr: 'Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`'
- - id: 536
- code: operations
- data_type: array
- required: false
- value_list:
- - Create
- - Describe
- - Read
- - Write
- descr: 'Пример: `Create, Describe, Read, Write`'
- - id: 537
- code: group
- data_type: string
- required: false
- default: '*'
- descr: 'Пример: `order-consumers` или `*`'
- - id: 538
- code: accessHosts
- data_type: string
- required: false
- default: '*'
- descr: 'Пример: `192.168.1.0/24` или `*`'
- - id: 539
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- sort: 10
- - name: resume
- id: 161
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 160
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/119_akhq.yaml b/dev/resources_yaml/119_akhq.yaml
deleted file mode 100644
index 4a1cc9d..0000000
--- a/dev/resources_yaml/119_akhq.yaml
+++ /dev/null
@@ -1,107 +0,0 @@
-name: akhq
-service_id: 119
-service_display_name: Akhq
-service_short_name: Akhq
-service_man: '# Инструкция по развертыванию Apache Kafka через платформу
---
## 1. Общая информация
AKHQ — это веб-интерфейс для работы с кластерами Apache Kafka.
Позволяет просматривать топики, consumer group''ы, сообщения, ACL, схему безопасности, состояние брокеров и метаданные.
Поддерживает работу с несколькими кластерами Kafka одновременно, включая внутренние и внешние (TLS) подключения.
## Доступные операции
- **create** — Создание ресурса AKHQ
- **suspend** — Остановка ресурса
- **resume** — Возобновление работы ресурса
- **modify** — Модификация настроек
- **delete** — Удаление ресурса
---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса Kafka:
* **Кластер Kafka к которому нужно настроить подключение**
Для использования AKHQ необходимо предварительно развернуть сервис Kafka. Пример: `kafka-external`.
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество узлов для работы Akhq. Пример `2`
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `512`
* **Квота (millicore ) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`
* **Имя домена:**
Dns Имя по которому будет происходить обращение к сервису. Указать необходимо уникальное имя до . ( то есть если необходимо получить dns ui) Пример: `kafka-external`
---
## 4. Выходные параметры
После успешного развертывания ресурса Kafka платформа возвращает ряд параметров.
Ключевым из них является:
**connectionUrl**
Это полное доменное имя (FQDN), по которому будет доступен интерфейс AKHQ. После развёртывания подождите несколько минут — UI станет доступен по HTTPS, как только все сервисы полностью запустятся.
**Учетные данные**
Здесь представлены поля для ввода логина и пароля, с помощью которых вы сможете авторизоваться в сервисе.
---
## 5. Дополнительная информация
Учётные записи, созданные для работы с AKHQ, предоставляют доступ только для просмотра данных. Для управления Kafka, пожалуйста, используйте возможности личного кабинета.
---'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 175
- kind: instance
- action: create
- params:
- - id: 550
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Выбрать платформу из списка
- sort: 10
- - id: 551
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- minvalue: 512
- descr: 'Пример: `1024`'
- sort: 20
- - id: 552
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- minvalue: 500
- descr: 'Пример: `1000`'
- sort: 30
- - id: 553
- code: domain
- data_type: string
- required: true
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 40
- - id: 554
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- minvalue: 1
- sort: 11
- - id: 555
- code: kafkaUid
- data_type: uuid
- required: true
- ref_svc_id: 116
- descr: Выбрать кластер из списка
- sort: 5
- is_modifiable: true
- - name: delete
- id: 176
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 180
- kind: instance
- action: modify
- params:
- - id: 565
- code: kafkaUid
- data_type: uuid
- required: true
- ref_svc_id: 116
- descr: Выбрать кластер из списка
- - name: resume
- id: 178
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 177
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/120_clickhouse.yaml b/dev/resources_yaml/120_clickhouse.yaml
deleted file mode 100644
index 8c1fd84..0000000
--- a/dev/resources_yaml/120_clickhouse.yaml
+++ /dev/null
@@ -1,570 +0,0 @@
-name: clickhouse
-service_id: 120
-service_display_name: ClickHouse
-service_short_name: clickhouse
-service_man: '# Инструкция по управлению кластерами и пользователями ClickHouse
---
## Общая информация
ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.
Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`
Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.
Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.
---
## Доступные операции
* **create** — Создание кластера
* **delete** — Удаление кластера
* **suspend** — Приостановка работы кластера
* **resume** — Возобновление работы кластера
* **create_database** — Создание базы данных
* **delete_database** — Удаление базы данных
* **create_user** — Создание пользователя и настройка прав доступа к базе данных
* **delete_user** — Удаление пользователя
## Процесс создания и первого подключения
1. Выполнить операцию `create` - будет создан кластер
2. Выполнить операцию `create_database` - будет создана база данных
3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)
## Примеры подключения
### Подключение через HTTP-интерфейс
```bash
# Проверка доступности кластера
curl "http://<username>:<password>@<host>:8123/" -d "SELECT 1"
# Выполнение запроса
curl "http://<username>:<password>@<host>:8123/" -d "SHOW DATABASES"
```
## Простые кейсы
*Создать БД и обычной таблицы*
```clickhouse
CREATE TABLE database.table
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;
INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);
SELECT count() FROM database.table;
```
Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER ''clickhousek8s''`)
В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах
*Создание БД и шардированной таблицы*
```clickhouse
CREATE TABLE database.localUsers
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;
CREATE TABLE database.shardedTable
AS localUsers
ENGINE = Distributed(''clickhousek8s'', ''database'', ''localUsers'', id);
INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);
SELECT count() FROM shardedTable;
```
Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse
*Создание реплицируемой и шардированной таблицы*
```clickhouse
CREATE TABLE IF NOT EXISTS database.localUsers ON cluster ''clickhousek8s''
(
user_id UInt64,
name String,
email String
)
ENGINE = ReplicatedMergeTree(
''/clickhouse/tables/{shard}/localUsers'',
''{replica}''
)
ORDER BY user_id;
CREATE TABLE IF NOT EXISTS database.users ON cluster ''clickhousek8s''
AS database.localUsers
ENGINE = Distributed(''clickhousek8s'', ''database'', ''localUsers'', rand());
INSERT INTO database.users VALUES (1, ''Alice'', ''alice@example.com'');
INSERT INTO database.users VALUES (2, ''Bob'', ''bob@example.com'');
INSERT INTO database.users VALUES (3, ''Charlie'', ''charlie@example.com'');
INSERT INTO database.users VALUES (4, ''David'', ''david@example.com'');
INSERT INTO database.users VALUES (5, ''Gosha'', ''gosha@example.com'');
INSERT INTO database.users VALUES (6, ''Eve'', ''eve@example.com'');
INSERT INTO database.users VALUES (7, ''Frank'', ''frank@example.com'');
INSERT INTO database.users VALUES (8, ''Grace'', ''grace@example.com'');
INSERT INTO database.users VALUES (9, ''Hannah'', ''hannah@example.com'');
INSERT INTO database.users VALUES (10, ''Ivan'', ''ivan@example.com'');
SELECT * FROM database.localUsers;
SELECT * FROM database.users;
SELECT COUNT(*) AS total_users FROM database.users;
SELECT COUNT(*) AS total_users_local FROM database.localUsers;
```'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 181
- kind: instance
- action: create
- man: Операция создания кластера ClickHouse
Для подключения к кластеру также необходимо создать базу данных через операцию `create_database` и создание пользователя через операцию `create_user`
- params:
- - id: 837
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 194
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 838
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 195
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 196
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 197
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 199
- code: shards
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "2"
- - "3"
- man: '**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации.
**Реплика** - это точная копия данных внутри одного шарда'
- is_modifiable: false
- - id: 198
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 839
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 200
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 201
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 840
- code: clickhouseKeeperConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 202
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 203
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 204
- code: replicas
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "1"
- - "3"
- man: Если указан 0, то инстансы ClickHouse Keeper развёрнуты не будут
- is_modifiable: false
- - id: 841
- code: clickhouseConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- is_modifiable: true
- sub_params:
- - id: 205
- code: version
- data_type: string
- required: true
- default: "25.10"
- value_list:
- - "25.10"
- is_modifiable: false
- - id: 842
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- is_modifiable: true
- sub_params:
- - id: 208
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 206
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 207
- code: retain
- data_type: integer > 0
- required: true
- default: "7"
- is_modifiable: false
- - id: 843
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 80
- is_modifiable: true
- sub_params:
- - id: 210
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 211
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 212
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 209
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 851
- code: clickhouseFilesConfiguration
- data_type: array-map-fixed
- required: false
- man: 'Формат:
- path: somethings3.xml
xmlConfig: ''<clickhouse>......</clickhouse>'''
- sort: 60
- is_modifiable: true
- sub_params:
- - id: 234
- code: path
- data_type: string
- required: true
- default: something.xml
- regex: ^[a-zA-Z0-9]+\.xml$
- is_modifiable: false
- - id: 235
- code: xmlConfig
- data_type: string
- required: true
- default: '<clickhouse></clickhouse>'
- man: Предварительно xml необходимо отформатировать через
```
$ tr -d '\n \t' < input.xml > output.xml
```
Позже будет исправлено
- is_modifiable: false
- is_sensitive: true
- - name: create_database
- id: 186
- kind: subresource
- action: create
- subresource: database
- man: База данных создаётся на всех репликах кластера ClickHouse
- params:
- - id: 600
- code: dbName
- data_type: string
- required: true
- default: db01
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- descr: 'Пример: `db01`'
- sort: 10
- - name: create_user
- id: 185
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 596
- code: username
- data_type: string
- required: true
- default: myusername
- regex: ^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$
- maxlength: 62
- minlength: 2
- descr: 'Пример: `myusername`'
- sort: 10
- - id: 598
- code: dbName
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 30
- sub_params:
- - id: 233
- code: dbName
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 599
- code: accessHosts
- data_type: string
- required: true
- default: ::/0
- descr: 'Пример: `::/0`'
- sort: 40
- - name: delete
- id: 184
- kind: instance
- action: delete
- man: Удаление возможно только после остановки сервиса через операцию `suspend`
После выполнения операции необходимо выждать определенное кол-во времени
- params: []
- - name: delete_database
- id: 188
- kind: subresource
- action: delete
- subresource: database
- man: Необратимое действие!!!
Трижды подумай, заблокируй телефон тимлида и не выполняй это действие
- params:
- - id: 602
- code: dbName
- data_type: string
- required: true
- descr: ВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ
- - name: delete_user
- id: 187
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 601
- code: username
- required: true
- descr: Имя пользователя, созданное через операцию `create_user`
- - name: modify
- id: 189
- kind: instance
- action: modify
- params:
- - id: 844
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 216
- code: shards
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "2"
- - "3"
- man: '**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации.
**Реплика** - это точная копия данных внутри одного шарда'
- is_modifiable: false
- - id: 217
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 213
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 214
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 215
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 845
- code: clickhouseKeeperConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 220
- code: replicas
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "1"
- - "3"
- man: Если указан 0, то инстансы ClickHouse Keeper развёрнуты не будут
- is_modifiable: false
- - id: 218
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 219
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 846
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 221
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 222
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 847
- code: clickhouseConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 223
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "25.10"
- is_modifiable: false
- - id: 848
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- sub_params:
- - id: 224
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 225
- code: retain
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 226
- code: schedule
- data_type: string
- required: true
- default: ""
- 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))+)$
- is_modifiable: false
- - id: 849
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- sub_params:
- - id: 227
- code: enabled
- data_type: boolean
- required: true
- default: false,true
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 228
- code: schedule
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 229
- code: quota
- data_type: integer > 0
- required: true
- default: ""
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 230
- code: percent
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 850
- code: clickhouseFilesConfiguration
- data_type: array-map-fixed
- required: false
- man: 'Формат:
- path: somethings3.xml
xmlConfig: ''<clickhouse>......</clickhouse>'''
- sort: 50
- sub_params:
- - id: 231
- code: path
- data_type: string
- required: true
- default: something.xml
- regex: ^[a-zA-Z0-9]+\.xml$
- is_modifiable: false
- - id: 232
- code: xmlConfig
- data_type: string
- required: true
- default: '<clickhouse></clickhouse>'
- man: Предварительно xml необходимо отформатировать через
```
$ tr -d '\n \t' < input.xml > output.xml
```
Позже будет исправлено
- is_modifiable: false
- is_sensitive: true
- - name: reconcile
- id: 276
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 183
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 182
- kind: instance
- action: suspend
- man: Операция приводит к удалению всех подов
Persistent Volume остаются нетронутыми
- params: []
diff --git a/dev/resources_yaml/12_s3.yaml b/dev/resources_yaml/12_s3.yaml
deleted file mode 100644
index e1665b7..0000000
--- a/dev/resources_yaml/12_s3.yaml
+++ /dev/null
@@ -1,130 +0,0 @@
-name: s3
-service_id: 12
-service_display_name: S3 Object Storage
-service_short_name: s3
-service_man: Руководство доступно по ссылке:
https://docs.s3-website.msk-1.ngcloud.ru/
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 1
- kind: instance
- action: create
- params:
- - id: 163
- code: resourceRealm
- required: true
- default: ceph.tst.nubes.ru
- value_list:
- - ceph.tst.nubes.ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: кластер S3 для подключения
- sort: 20
- - id: 320
- code: displayName
- data_type: string
- required: true
- regex: ^[a-zA-Z0-9_]{1,61}[a-zA-Z0-9]$
- descr: Человеко-читаемое имя (транслит из Elma) - передаётся имя клиента
- sort: 10
- - name: create_sub_user
- id: 6
- kind: subresource
- action: create
- subresource: sub_user
- params:
- - id: 60
- code: subUserName
- data_type: string
- required: true
- - id: 61
- code: subUserAccess
- data_type: string
- required: true
- value_list:
- - read
- - write
- - readwrite
- - full
- - name: delete
- id: 5
- kind: instance
- action: delete
- params: []
- - name: delete_sub_user
- id: 7
- kind: subresource
- action: delete
- subresource: sub_user
- params:
- - id: 63
- code: subUserName
- data_type: string
- required: true
- descr: subUserName. По идее услуга уже создана - должен передаваться из ЛК
- - name: modify
- id: 4
- kind: instance
- action: modify
- man: При первичном вызове операции услуга Trial прекращает действие
- params:
- - id: 50
- code: maxSizeGbPerUser
- data_type: integer > 0
- required: false
- maxvalue: 50000
- minvalue: 1
- descr: maxSizeGb. Передаём руками
- man: maxSizeGb. Передаём руками
- - id: 51
- code: maxObjectsPerBucket
- data_type: integer > 0
- required: false
- maxvalue: 1e+07
- minvalue: 1
- descr: Квота на бакет. Кол-во объектов. Передаём руками
- man: Квота на бакет. Кол-во объектов. Передаём руками
- - id: 52
- code: maxBucketsPerUser
- data_type: integer > 0
- required: false
- maxvalue: 1000
- minvalue: 1
- descr: Квота на пользователя. Количество бакетов пользователя. Передаём руками
- man: Квота на пользователя. Количество бакетов пользователя. Передаём руками
- - name: reconcile
- id: 407
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 3
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 2
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/13_s3bucket.yaml b/dev/resources_yaml/13_s3bucket.yaml
deleted file mode 100644
index 68e506c..0000000
--- a/dev/resources_yaml/13_s3bucket.yaml
+++ /dev/null
@@ -1,90 +0,0 @@
-name: s3bucket
-service_id: 13
-service_display_name: S3 бакет
-service_short_name: s3bucket
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 51
- kind: instance
- action: create
- params:
- - id: 124
- code: s3UserUid
- data_type: uuid
- required: true
- ref_svc_id: 12
- descr: UID Корневой услуги S3. На основе него будет создан бакет.
- - id: 125
- code: bucketName
- data_type: string
- required: true
- descr: Имя бакета s3
- - id: 126
- code: maxSize
- required: true
- default: "-1"
- descr: Максимальный размер бакета s3. Если поставить -1, будет безлимит. Размер указывается в Bytes
- man: Максимальный размер бакета s3. Если поставить 0, будет безлимит. Размер указывается в Bytes
- - id: 127
- code: readAll
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Публичный доступ на чтение позволяет любому пользователю интернета скачивать объекты из бакета.
- - id: 128
- code: listAll
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Публичный доступ к листингу позволяет любому пользователю интернета получить список объектов в бакете.
- - id: 129
- code: corsAll
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Публичный доступ к чтению настроек позволяет любому пользователю интернета читать конфигурации CORS
- - id: 130
- code: placement
- data_type: string
- required: true
- default: HOT
- value_list:
- - HOT
- - COLD
- descr: Класс хранилища, который используется по умолчанию при загрузке объектов. Чем холоднее, тем дешевле место, но дороже обращения
- - name: delete
- id: 52
- kind: instance
- action: delete
- params: []
diff --git a/dev/resources_yaml/148_vc_mgmt_sthutrval_cluster.yaml b/dev/resources_yaml/148_vc_mgmt_sthutrval_cluster.yaml
deleted file mode 100644
index ac6b7bd..0000000
--- a/dev/resources_yaml/148_vc_mgmt_sthutrval_cluster.yaml
+++ /dev/null
@@ -1,176 +0,0 @@
-name: vc_mgmt_sthutrval_cluster
-service_id: 148
-service_display_name: Менеджмент Kubernetes кластер Штурвал
-service_short_name: vcMgmtSthutrvalCluster
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 258
- kind: instance
- action: create
- params:
- - id: 771
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 91
- code: resourceRealm
- data_type: string
- required: true
- default: sandbox.nubes.ru
- value_list:
- - sandbox.nubes.ru
- descr: Облако в котором будет развёрнут тенант
- man: Выбрать платформу из списка
**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
- is_modifiable: false
- - id: 89
- code: clusterName
- data_type: string
- required: true
- default: example-brcyqrjr
- regex: (?=^.{1,63}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- is_modifiable: false
- - id: 772
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 90
- code: appVersion
- data_type: string
- required: true
- default: 2.13.1
- value_list:
- - 2.13.1
- - 2.12.1
- - 2.11.0
- is_modifiable: false
- - id: 773
- code: controlPlaneConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 92
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy представлены исходя из ресурсной платформы, которая была выбрана
- is_modifiable: false
- - id: 93
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- is_modifiable: false
- - id: 94
- code: count
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- is_modifiable: false
- - id: 774
- code: workerConfiguration
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 40
- sub_params:
- - id: 97
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- is_modifiable: false
- - id: 98
- code: count
- data_type: integer > 0
- required: true
- default: "2"
- is_modifiable: false
- - id: 95
- code: groupName
- data_type: string
- required: true
- default: workers-jax0kk2f
- regex: (?=^.{3,40}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- man: Имена групп воркеров в рамках кластера должно быть уникальным
- is_modifiable: false
- - id: 96
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy представлены исходя из ресурсной платформы, которая была выбрана
- is_modifiable: false
- - id: 775
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- sub_params:
- - id: 99
- code: needExternalAddressAPI
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к kubernetes API. Пока нельзя выставить false
- is_modifiable: false
- - id: 100
- code: accessIpListAPI
- data_type: json
- required: true
- default: '[]'
- man: 'Access IP List для подключения к Kubernetes API. Указывается массив. Если передан пустой массив, доступ выделяется всем
Пример: **["0.0.0.0/0"]** или **[]** или **["178.4.13.2", "178.4.14.0/24"]**'
- is_modifiable: false
- - id: 101
- code: needExternalAddressIngress
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к Ingress
- is_modifiable: false
- - id: 102
- code: accessIpListIngress
- data_type: json
- required: true
- default: '[]'
- man: 'Access IP List для подключения к Ingress. Указывается массив. Если передан пустой массив, доступ выделяется всем
Пример: **["0.0.0.0/0"]** или **[]** или **["178.4.13.2", "178.4.14.0/24"]**'
- is_modifiable: false
diff --git a/dev/resources_yaml/149_valo_tenant.yaml b/dev/resources_yaml/149_valo_tenant.yaml
deleted file mode 100644
index 5065814..0000000
--- a/dev/resources_yaml/149_valo_tenant.yaml
+++ /dev/null
@@ -1,249 +0,0 @@
-name: valo_tenant
-service_id: 149
-service_display_name: VALO Cloud
-service_short_name: valoTenant
-service_man: '# Инструкция по развертыванию Тенант Valo через платформу
## 1. Общая информация
Тенант Valo — логический изолированный экземпляр сервиса VALO Cloud, предоставляющий защищённое облачное хранилище, синхронизацию данных и доступ к документам с различных устройств. При создании тенант автоматически разворачивается в тестовом режиме сроком на 2 месяца. Перевод в промышленную эксплуатацию выполняется отдельной операцией.
### Доступные операции
* **create** — создание нового тенанта в тестовом режиме сроком на 2 месяца.
* **modify** — изменение настроек тенанта, включая перевод из ТЕСТ в ПРОД.
* **suspend** — выключение (приостановка работы) тенанта.
* **resume** — включение ранее приостановленного тенанта.
* **delete** — удаление тенанта; доступно только после выполнения операции suspend.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: платформа, на которой будет создан тенант.
Пример значения: `valo.ngcloud.ru`.
### DNS-Префикс
Описание: Будет добавлено в зону valo.ngcloud.ru
Пример значения: `mysimpledomain`.
### Параметры хранилища
Описание: Сколько места будет выделено под использование в тенанте. Данные хранятся в S3. Размер указывается в Gigabytes
Пример значения: `10`.
### Настройки тенанта
Описание: Ряд конфигурации Valo-тенанта, такие как настройки пользователя и доступного функционала
Пример значения: `опционально в рамках настройки`.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
Достаточно развернуть тенант в ТЕСТ. Срок предоставляется в 2 месяца. По истечению срока тенант автоматически переводится в `suspend` на стороне ресурсной платформы
### Промышленное окружение
Для разблокировки используйте операцию `modify`
---
## 4. Выходные параметры
Услуга предоставляет следующие выходные параметры (формируются в процессе операций):
### Статус тенанта
Отражает текущее состояние и параметры.
---
## 5. Дополнительная информация
Тенант всегда создаётся в режиме ТЕСТ и не может быть сразу переведён в ПРОД без операции modify.
Удаление тенанта возможно только после его выключения с помощью операции suspend.
Срок тестового режима составляет 2 месяца с момента создания.
Операции suspend и resume используются для временного управления доступностью сервиса без потери конфигурации.
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 202
- kind: instance
- action: create
- params:
- - id: 655
- code: resourceRealm
- data_type: string
- required: true
- default: valo.ngcloud.ru
- value_list:
- - valo.ngcloud.ru
- func: getAvailableResourceRealms
- sort: 10
- - id: 656
- code: domain
- data_type: string
- required: true
- regex: ^[a-z0-9](?:[a-z0-9-]{3,61}[a-z0-9])?$
- maxlength: 61
- minlength: 3
- descr: Будет добавлено в зону valo.ngcloud.ru
- sort: 20
- - id: 657
- code: valoOptions
- data_type: map-fixed
- required: true
- default: '{}'
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 24
- code: ffThemes
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 25
- code: ffPublicLink
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 26
- code: ffLogging
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 28
- code: userCount
- data_type: integer > 0
- required: true
- default: "10"
- is_modifiable: false
- - id: 20
- code: requestApproveMaxPeriod
- data_type: integer > 0
- required: true
- default: "2"
- descr: Максимальное значение периода согласования (в днях)
- is_modifiable: false
- - id: 21
- code: ffOnlineEditor
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 22
- code: ffWatermark
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 23
- code: ffUserImport
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 658
- code: s3Storage
- data_type: integer > 0
- required: true
- default: "10"
- maxvalue: 999
- minvalue: 1
- descr: Параметр указывается в `Gb`
- man: Данные хранятся в отдельном экземпляре S3
- sort: 30
- is_modifiable: true
- - name: delete
- id: 206
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 203
- kind: instance
- action: modify
- params:
- - id: 659
- code: valoOptions
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 32
- code: ffWatermark
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 33
- code: ffUserImport
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 34
- code: ffThemes
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 35
- code: ffPublicLink
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 36
- code: ffLogging
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 29
- code: userCount
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 30
- code: requestApproveMaxPeriod
- data_type: integer > 0
- required: true
- default: ""
- descr: Максимальное значение периода согласования (в днях)
- is_modifiable: false
- - id: 31
- code: ffOnlineEditor
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 660
- code: s3Storage
- data_type: integer > 0
- required: true
- descr: Параметр указывается в `Gb`
- man: Данные хранятся в отдельном экземпляре S3
- sort: 20
- - name: resume
- id: 205
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 204
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/150_k8s_sthutrval_cluster.yaml b/dev/resources_yaml/150_k8s_sthutrval_cluster.yaml
deleted file mode 100644
index a96092b..0000000
--- a/dev/resources_yaml/150_k8s_sthutrval_cluster.yaml
+++ /dev/null
@@ -1,371 +0,0 @@
-name: k8s_sthutrval_cluster
-service_id: 150
-service_display_name: Kubernetes кластер Штурвал
-service_short_name: k8sSthutrvalCluster
-service_man: Перед разворачиванием убедиться, что в облаке есть 2 свободных невыделенных IP в пуле
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 108
- kind: instance
- action: create
- params:
- - id: 750
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 57
- code: vdcUid
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 58
- code: nsxtUid
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 59
- code: clusterName
- data_type: string
- required: true
- default: example-imhltbba
- regex: (?=^.{1,63}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- is_modifiable: false
- - id: 751
- code: controlPlaneConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 61
- code: sizingPolicy
- data_type: string
- required: true
- default: '[]'
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 62
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 63
- code: count
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- is_modifiable: false
- - id: 752
- code: workerConfiguration
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 65
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 66
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 67
- code: count
- data_type: integer > 0
- required: true
- default: "2"
- is_modifiable: false
- - id: 64
- code: groupName
- data_type: string
- required: true
- default: workers-0krz2kek
- regex: (?=^.{3,40}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- man: Имена групп воркеров в рамках кластера должно быть уникальным
- is_modifiable: false
- - id: 753
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- is_modifiable: true
- sub_params:
- - id: 68
- code: needExternalAddressAPI
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к kubernetes API. Пока нельзя выставить false
- is_modifiable: false
- - id: 69
- code: accessIpListAPI
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Kubernetes API. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 70
- code: needExternalAddressIngress
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к Ingress
- is_modifiable: false
- - id: 71
- code: accessIpListIngress
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Ingress. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 755
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 72
- code: appVersion
- data_type: string
- required: true
- default: 2.13.1
- value_list:
- - 2.13.1
- - 2.12.1
- - 2.11.0
- is_modifiable: false
- - name: create_user
- id: 281
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 869
- code: admins
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 10
- sub_params:
- - id: 236
- code: email
- data_type: string
- required: true
- default: ""
- man: Пользователи будут добавлены, только если они зарегистрированы в личном кабинете
- is_modifiable: false
- - name: delete
- id: 109
- kind: instance
- action: delete
- params: []
- - name: delete_user
- id: 282
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 870
- code: admins
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 237
- code: email
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: modify
- id: 110
- kind: instance
- action: modify
- man: При изменении кол-ва узлов, удаления группы, если в этой группе есть поды на которых есть PV с named-дисками, удаляться ноды сами НЕ БУДУТ.
Убедитесь, что они будут смигрированы на другие ноды в процессе прежде чем группа узлов/узлы будут удалены
- params:
- - id: 756
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 73
- code: appVersion
- data_type: string
- required: true
- default: ""
- value_list:
- - 2.13.1
- - 2.12.1
- - 2.11.0
- is_modifiable: false
- - id: 757
- code: controlPlaneConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 74
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 75
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: ""
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 76
- code: count
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- is_modifiable: false
- - id: 758
- code: workerConfiguration
- data_type: array-map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 77
- code: groupName
- data_type: string
- required: true
- default: workers-apak4rks
- regex: (?=^.{3,40}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- man: Имена групп воркеров в рамках кластера должно быть уникальным
- is_modifiable: false
- - id: 78
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 79
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: ""
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 80
- code: count
- data_type: integer >= 0
- required: true
- default: ""
- is_modifiable: false
- - id: 759
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 81
- code: needExternalAddressAPI
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к kubernetes API. Пока нельзя выставить false
- is_modifiable: false
- - id: 82
- code: accessIpListAPI
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Kubernetes API. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 83
- code: needExternalAddressIngress
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к Ingress
- is_modifiable: false
- - id: 84
- code: accessIpListIngress
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Ingress. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: reconcile
- id: 253
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 174
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 173
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/151_k8s_openbao.yaml b/dev/resources_yaml/151_k8s_openbao.yaml
deleted file mode 100644
index 7d45820..0000000
--- a/dev/resources_yaml/151_k8s_openbao.yaml
+++ /dev/null
@@ -1,389 +0,0 @@
-name: k8s_openbao
-service_id: 151
-service_display_name: Vault
-service_short_name: k8sOpenbao
-service_man: '# Инструкция по развертыванию Хранилища секретов через платформу
## 1. Общая информация
Хранилище секретов — сервис централизованного и защищённого хранения чувствительных данных (секретов, ключей, конфигураций). Предназначен для использования приложениями и сервисами в Kubernetes с управлением доступом на основе ролей.
В качестве приложения используется открытый проект OpenBao с поддержкой кластерного режима RAFT.
### Доступные операции
**create** — Создание хранилища секретов и инициализация кластера.
**delete** — Удаление хранилища секретов с полной очисткой всех связанных сущностей.
**modify** — Изменение параметров развернутого хранилища секретов.
**suspend** — Приостановка работы кластера без удаления Persistent Volume.
**resume** — Возобновление работы кластера с автоматическим unseal всех нод.
**restart** — Поочередный перезапуск нод с последующим подключением в кластер.
**create_kv** — Создание Key/Value хранилища версии V2.
**delete_kv** — Удаление Key/Value хранилища со всеми содержащимися секретами.
**create_secrets** — Создание секрета внутри Key/Value хранилища.
**delete_secrets** — Удаление секрета из Key/Value хранилища.
**update_secrets** — Обновление значения секрета.
**recovery_secrets** — Откат секрета к указанной версии.
**create_role** — Создание роли для управления Key/Value хранилищем или секретами.
**update_role** — Обновление параметров роли.
**delete_role** — Удаление роли доступа.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: Кластер Kubernetes, в котором будет развернуто приложение.
Формат значения: имя Kubernetes-кластера.
### Имя домена
Описание: Доменное имя сервиса. При указании полного FQDN выполняется проверка DNS A-записи или добавляется А-запись в техническую зону.
Формат значения: secrets.domain.com / mysecretdomain.
### Кол-во реплик
Описание: Количество узлов в кластере.
Формат значения: целое число.
### Квота ядра пода
Описание: Лимит CPU для одного узла. Указывается в milicores (1000 milicores = 1 CPU).
Формат значения: целое число.
### Квота памяти пода
Описание: Лимит оперативной памяти для одного узла. Указывается в megabytes.
Формат значения: целое число.
### Размер диска под хранение секретов
Описание: Объем диска для хранения данных. Фактический объем равен значению, умноженному на количество реплик. Указывается в Gigabytes
Формат значения: целое число.
### Версия OpenBao
Описание: Версия OpenBao для развертывания сервиса.
Формат значения: выбор из предоставленного списка версий.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
Кол-во реплик: 2.
Квота ядра пода: 200.
Квота памяти пода: 256.
Размер диска под хранение секретов: 1.
Версия OpenBao: актуальная стабильная версия.
### Промышленное окружение
Кол-во реплик: от 3.
Квота ядра пода: от 1000.
Квота памяти пода: от 1024.
Размер диска под хранение секретов: от 10.
Версия OpenBao: актуальная стабильная версия.
---
## 4. Выходные параметры
Настройки внутри хранилища (kv/secrets/roles) — конфигурации Key/Value, секретов и ролей, созданные соответствующими операциями.
Настройки самого хранилище (сайзинг, объемы) — параметры ресурсов и хранилища данных, примененные к сервису.
Статус кластера (running / suspended) — текущее состояние работы кластера.
url для подключения к веб — адрес веб-интерфейса сервиса.
---
## 5. Дополнительная информация
При удалении хранилища все данные и настройки безвозвратно удаляются.
При использовании доменного имени требуется корректная настройка DNS.
Операции управления секретами и ролями выполняются только после успешного создания хранилища.
Удаление кластера производится через операцию `suspend`, а удаление становится доступно через 14 дней после остановки кластера
Правило выше не относится к операции `delete_kv` / `delete_secrets` / `delete_role`'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 210
- kind: instance
- action: create
- params:
- - id: 663
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Кластер Kubernetes в котором будет развёрнуто приложение
- man: Выбрать платформу из списка
**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
- sort: 0
- - id: 664
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 8000
- minvalue: 250
- descr: 'Пример: `500`'
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- sort: 30
- is_modifiable: true
- - id: 665
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "3"
- maxvalue: 7
- minvalue: 1
- descr: 'Пример: `3`'
- sort: 20
- is_modifiable: true
- - id: 666
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 256
- descr: 'Пример: `2048`'
- man: Указывается в Megabytes
- sort: 40
- is_modifiable: true
- - id: 667
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "10"
- maxvalue: 999
- minvalue: 1
- descr: 'Пример: `10`'
- man: Указывается в Gigabytes
- sort: 50
- is_modifiable: true
- - id: 668
- code: appVersion
- data_type: string
- required: true
- default: 2.5.2
- value_list:
- - 2.5.2
- descr: Выбрать из списка
- sort: 60
- is_modifiable: true
- - id: 669
- code: domain
- data_type: string
- required: true
- default: bao-onbcvsgk
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - name: create_kv
- id: 212
- kind: subresource
- action: create
- subresource: kv
- params:
- - id: 675
- code: kvName
- data_type: string
- required: true
- default: kvname-9e9wvkt2
- regex: ^[a-zA-Z0-9-]{1,24}$
- man: Будет создан `v2 тип движка`
Уникальное в рамках услуги
- sort: 10
- - name: create_policy
- id: 237
- kind: subresource
- action: create
- subresource: policy
- params:
- - id: 728
- code: policySettings
- data_type: array-map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 50
- code: capabilities
- data_type: json
- required: true
- default: '["read", "list"]'
- man: 'Пример: `["create", "read", "update", "delete", "list", "sudo"]`
Только чтение: `["list", "read"]`
Изменение: `["read", "list", "create", "update", "delete"]`'
- is_modifiable: false
- - id: 49
- code: path
- data_type: string
- required: true
- default: ""
- man: 'Пример 1: `mykv/*`
Пример 2: `mykv/path/*`
Пример 3: `mykv/path/to/secret`
'
- is_modifiable: false
- - id: 729
- code: policyName
- required: true
- default: policy-s0hfjfmn
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- man: Сделано для дальнейшего удобного использования
- sort: 10
- - name: create_secrets
- id: 214
- kind: subresource
- action: create
- subresource: secrets
- params:
- - id: 677
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- man: Если список пустой, создайте kv через операцию `create_kv`
- sort: 10
- - id: 678
- code: secretPath
- data_type: string
- required: true
- default: path/to/mysecret
- regex: ^[a-zA-Z0-9_-]+(?:\/[a-zA-Z0-9_-]+)*$
- descr: 'Пример: `path` или `road/to/path`'
- sort: 20
- - id: 679
- code: secretData
- data_type: map
- required: true
- descr: Хотя бы один секрет необходимо добавить
- man: Данные не сохраняются в ЛК, в дальнейшем при обновлении секретов это необходимо учитывать
- sort: 30
- - name: delete
- id: 231
- kind: instance
- action: delete
- params: []
- - name: delete_kv
- id: 213
- kind: subresource
- action: delete
- subresource: kv
- man: '**ОСТОРОЖНО**
Удаление KV подразумевает удаление ВСЕХ secrets внутри этой KV'
- params:
- - id: 676
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - name: delete_policy
- id: 239
- kind: subresource
- action: delete
- subresource: policy
- params:
- - id: 732
- code: policyName
- data_type: string
- required: true
- - name: delete_secrets
- id: 233
- kind: subresource
- action: delete
- subresource: secrets
- params:
- - id: 726
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - id: 727
- code: secretPath
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 20
- depends_on: kvName
- - name: modify
- id: 211
- kind: instance
- action: modify
- params:
- - id: 670
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- descr: 'Пример: `3`'
- sort: 10
- - id: 671
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 8000
- minvalue: 250
- descr: 'Пример: `500`'
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- sort: 20
- - id: 672
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 256
- descr: 'Пример: `2048`'
- man: Указывается в Megabytes
- sort: 30
- - id: 673
- code: resourceDisk
- data_type: integer > 0
- required: true
- maxvalue: 999
- minvalue: 1
- descr: 'Пример: `10`'
- man: Указывается в Gigabytes
- sort: 40
- - id: 674
- code: appVersion
- data_type: string
- required: true
- value_list:
- - 2.5.2
- descr: Выбрать из списка
- sort: 50
- - name: reconcile
- id: 236
- kind: action
- action: reconcile
- params: []
- - name: recovery_secrets
- id: 232
- kind: subresource
- action: recovery
- subresource: secrets
- man: Данная операция подразумевает откат на конкретную версию в секрете.
**Это не восстановление удалённого секрета**
- params:
- - id: 723
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - id: 724
- code: secretPath
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 20
- depends_on: kvName
- - id: 725
- code: secretVersion
- data_type: string
- required: true
- depends_on: kvName,secretPath
- - name: restart
- id: 234
- kind: action
- action: restart
- params: []
- - name: resume
- id: 216
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 215
- kind: instance
- action: suspend
- params: []
- - name: update_policy
- id: 238
- kind: subresource
- action: update
- subresource: policy
- params:
- - id: 730
- code: policyName
- data_type: string
- required: true
- sort: 10
- - id: 731
- code: policySettings
- data_type: array-map-fixed
- required: true
- descr: Производится полная перезапись политики!
- sort: 20
- sub_params:
- - id: 52
- code: capabilities
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 51
- code: path
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: update_secrets
- id: 230
- kind: subresource
- action: update
- subresource: secrets
- params:
- - id: 719
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - id: 720
- code: secretPath
- data_type: string
- required: true
- descr: Выберите из списка
- man: Предварительно необходимо выбрать параметр `Имя Key/Value хранилища`
- sort: 20
- depends_on: kvName
- - id: 721
- code: needFullUpdateSecret
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Если выбрать `true`, будет создана новая версия секрета `с нуля`
Если выбрать `false`, будет создана новая версия секрета с данными прошлой ревизии, а переданные данные в операции либо будут модифицированы, либо будут добавлены
- sort: 30
- - id: 722
- code: secretData
- data_type: map
- required: true
- descr: Хотя бы один секрет необходимо добавить
- sort: 40
diff --git a/dev/resources_yaml/163_llm_ai.yaml b/dev/resources_yaml/163_llm_ai.yaml
deleted file mode 100644
index 754818e..0000000
--- a/dev/resources_yaml/163_llm_ai.yaml
+++ /dev/null
@@ -1,232 +0,0 @@
-name: llm_ai
-service_id: 163
-service_display_name: LLM
-service_short_name: llmAi
-service_man: '## 1. Общая информация
LLMaaS (Large Language Model as a Service) — это сервис для доступа к языковым моделям через OpenAI-совместимое API.
Платформа позволяет создавать организации (тенанты), команды, выпускать и управлять API-ключами, устанавливать лимиты на использование.
---
## Доступные операции
- **create** — Создание организации в LLMaaS
- **delete** — Удаление организации
- **create_team** — Создание команды внутри организации
- **modify_team** — Редактирование команды (модели, RPM, TPM)
- **delete_team** — Удаление команды
- **create_secrets** — Создание API-ключа
- **update_secrets** — Обновление параметров API-ключа
- **delete_secrets** — Удаление API-ключа
---
## 2. Параметры создания организации
Ниже перечислены параметры, которые необходимо указать при создании организации:
* **Платформа для развертывания**
Выбирается автоматически, изменять не нужно.
* **Период бюджета**
Срок жизни организации в днях.
Пример: `30`
---
## 3. Параметры создания команды
* **Имя команды**
Уникальное имя команды в рамках организации.
Пример: `production`
* **Модель**
Название модели, доступной для команды.
Пример: `gpt-oss-120b`
* **Лимит запросов в минуту (RPM)**
Максимальное количество запросов к API в минуту.
Пример: `60`
* **Лимит токенов в минуту (TPM)**
Максимальное количество токенов (входящих + исходящих) в минуту.
Пример: `100000`
---
## 4. Параметры редактирования команды
Для существующей команды можно изменить:
* **Модель**
Новая модель для команды.
Пример: `gpt-oss-20b`
* **Лимит запросов в минуту (RPM)**
Новое значение RPM.
Пример: `120`
* **Лимит токенов в минуту (TPM)**
Новое значение TPM.
Пример: `200000`
---
## 5. Параметры создания API-ключа
Ниже перечислены параметры, которые необходимо указать при создании API-ключа:
* **Имя ключа**
Уникальное имя ключа в рамках организации.
Пример: `prod-key`
* **Команда**
Имя команды для привязки ключа. Если не указано — ключ привязывается к команде `main`.
Пример: `production`
* **Модель**
Название модели, доступной для данного ключа.
Пример: `gpt-oss-120b`
* **Лимит запросов в минуту (RPM)**
Максимальное количество запросов к API в минуту.
Пример: `60`
* **Лимит токенов в минуту (TPM)**
Максимальное количество токенов (входящих + исходящих) в минуту.
Пример: `100000`
**Важно:** Лимиты API-ключа не могут превышать лимиты команды, к которой он привязан.
При превышении операция будет отклонена с ошибкой.
Перед созданием ключа убедитесь, что `RPM <= team.RPM` и `TPM <= team.TPM`.
---
## 6. Параметры обновления API-ключа
Для уже существующего ключа можно изменить параметры. Все параметры являются опциональными:
* **Имя ключа**
Имя обновляемого ключа.
Пример: `prod-key`
* **Модель**
Новое название модели.
Пример: `gpt-oss-20b`
* **Лимит запросов в минуту (RPM)**
Новое значение RPM.
Пример: `120`
* **Лимит токенов в минуту (TPM)**
Новое значение TPM.
Пример: `200000`
**Важно:** При обновлении лимитов API-ключа новые значения не могут превышать лимиты команды.
Если указать значения выше командных, операция завершится ошибкой.
Указывайте `RPM <= team.RPM` и `TPM <= team.TPM`.
Команда определяется автоматически по стейту услуги — изменить привязку к другой команде через эту операцию нельзя.
---
## 7. Параметры удаления API-ключа
* **Команда**
Имя команды, к которой привязан ключ.
Пример: `production`
* **Имя ключа**
Имя удаляемого ключа.
Пример: `prod-key`
---
## 8. Параметры удаления команды
* **Имя команды**
Имя удаляемой команды.
Пример: `production`
---
## 9. Параметры удаления организации
Удаление организации не требует дополнительных параметров — удаляется вся организация со всеми командами и ключами.
---
## 10. Выходные параметры
После успешного создания организации платформа возвращает:
* **connectionUrl**
URL для доступа к inference API (OpenAI-совместимый).
Пример: `https://api.aillm.ru`
---
## 12. Пример использования API
После получения API-ключа клиент может обращаться к LLMaaS напрямую:
**Запрос к chat completions:**
```bash
curl https://api.aillm.ru/v1/chat/completions \
-H "Authorization: Bearer sk-..." \
-H "Content-Type: application/json" \
-d ''{
"model": "gpt-oss-120b",
"messages": [
{"role": "user", "content": "Привет!"}
]
}''
```
**Получение списка доступных моделей:**
```bash
curl https://api.aillm.ru/v1/models \
-H "Authorization: Bearer sk-..."
```
'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 271
- kind: instance
- action: create
- params:
- - id: 826
- code: resourceRealm
- data_type: string
- required: true
- default: llmAi.aillm.ru
- value_list:
- - llmAi.aillm.ru
- func: getAvailableResourceRealms
- - name: create_secrets
- id: 274
- kind: subresource
- action: create
- subresource: secrets
- params:
- - id: 833
- code: models
- data_type: array
- required: true
- sort: 20
- depends_on: teamName
- - id: 834
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- minvalue: 1
- - id: 835
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- minvalue: 1
- - id: 857
- code: keyName
- data_type: string
- required: true
- sort: 10
- - id: 859
- code: teamName
- data_type: string
- required: true
- sort: 15
- - id: 1083
- code: variablesKeys
- data_type: array-map-fixed
- required: true
- sub_params:
- - id: 571
- code: teamName
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 572
- code: keyName
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 573
- code: models
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- is_modifiable: false
- - id: 575
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- is_modifiable: false
- - id: 576
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- is_modifiable: false
- - id: 577
- code: count
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - name: create_team
- id: 278
- kind: subresource
- action: create
- subresource: team
- params:
- - id: 858
- code: teamName
- data_type: string
- required: true
- - id: 860
- code: models
- data_type: array
- required: true
- - id: 861
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- - id: 862
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- - name: delete
- id: 273
- kind: instance
- action: delete
- params: []
- - name: delete_secrets
- id: 275
- kind: subresource
- action: delete
- subresource: secrets
- params:
- - id: 836
- code: keyName
- data_type: string
- required: true
- depends_on: teamName
- - id: 876
- code: teamName
- data_type: string
- required: true
- sort: 10
- - name: delete_team
- id: 280
- kind: subresource
- action: delete
- subresource: team
- params:
- - id: 868
- code: teamName
- data_type: string
- required: true
- - name: modify_team
- id: 279
- kind: subresource
- action: modify
- subresource: team
- params:
- - id: 864
- code: teamName
- data_type: string
- required: true
- - id: 865
- code: models
- data_type: array
- required: true
- depends_on: teamName
- - id: 873
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- minvalue: 1
- - id: 874
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- minvalue: 1
- - name: update_secrets
- id: 277
- kind: subresource
- action: update
- subresource: secrets
- man: Данная операция предназначена для управления лимитами и моделями
- params:
- - id: 852
- code: keyName
- data_type: string
- required: true
- depends_on: teamName
- - id: 853
- code: models
- data_type: array
- required: true
- depends_on: teamName
- - id: 854
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- - id: 855
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- - id: 875
- code: teamName
- data_type: string
- required: true
- sort: 5
diff --git a/dev/resources_yaml/19_vc_org.yaml b/dev/resources_yaml/19_vc_org.yaml
deleted file mode 100644
index 001435f..0000000
--- a/dev/resources_yaml/19_vc_org.yaml
+++ /dev/null
@@ -1,140 +0,0 @@
-name: vc_org
-service_id: 19
-service_display_name: Организация в Cloud Director
-service_short_name: vcOrg
-service_man: '# Инструкция по развертыванию Организация в Cloud Director через платформу
## 1. Общая информация
Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.
### Доступные операции
**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.
### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.
### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).
---
## 4. Выходные параметры
Услуга предоставляет следующие выходные параметры (формируются в процессе операций):
### Url организации
Для быстрого доступа в тенант
### Статус организации
Отражает текущее состояние и параметры.
---
## 5. Дополнительная информация
- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)** привязанный к этой организации;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к vdc выше.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 136
- kind: instance
- action: create
- man: '`IaaS` - Доступ в Keycloak предоставляется пользователю, который создаёт услугу
`SaaS` - Без доступа к Keycloak'
- params:
- - id: 418
- code: resourceRealm
- data_type: string
- required: true
- default: sandbox.nubes.ru
- value_list:
- - sandbox.nubes.ru
- func: getAvailableResourceRealms
- descr: Облако в котором будет развёрнут тенант
- man: Выбрать платформу из списка
**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
- sort: 10
- - id: 556
- code: organizationType
- data_type: string
- required: true
- default: iaas
- value_list:
- - iaas
- - saas
- man: Доступ к организации предоставляется только при выборе `iaas`
- sort: 20
- - name: create_user
- id: 283
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 871
- code: admins
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 10
- sub_params:
- - id: 238
- code: email
- data_type: string
- required: true
- default: ""
- man: Пользователи будут добавлены, только если они зарегистрированы в личном кабинете
- is_modifiable: false
- - name: delete
- id: 137
- kind: instance
- action: delete
- man: 'Удалить возможно только через 14 дней после выполнения операции `suspend`
**ОСТОРЖНО: Удаление приводит к полному удалению всех сущностей внутри этого тенанта**
Если существуют инстансы VDC, Edge, vApp, Vm или Kubernetes-кластер Штурвал, которые были созданы, из ЛК удалены не будут. Необходимо обратиться к `технической поддержке` для удаления инстансов'
- params: []
- - name: delete_user
- id: 284
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 872
- code: admins
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 239
- code: email
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: modify
- id: 207
- kind: instance
- action: modify
- man: Для возможности изменения параметров предварительно необходимо создать **Виртуальный датацентр (VDC)**, потом **Сетевой шлюз периметра (Edge Gateway)**
Также при удалении ipSpaces убедитесь, что все внешние IP удалены. В случае если хоть одна привязка vIP есть, данный ipSpace удалён **не будет**
- params:
- - id: 662
- code: vIPConfigure
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 39
- code: name
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 40
- code: count
- data_type: integer > 0
- required: true
- default: ""
- descr: 'Пример: `1`'
- is_modifiable: false
- - name: reconcile
- id: 249
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 144
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 143
- kind: instance
- action: suspend
- man: Операция **не останавливает ВМки** в облаке, но не даёт редактировать все сущности внутри тенанта
- params: []
diff --git a/dev/resources_yaml/1_dummy.yaml b/dev/resources_yaml/1_dummy.yaml
deleted file mode 100644
index 9816c21..0000000
--- a/dev/resources_yaml/1_dummy.yaml
+++ /dev/null
@@ -1,339 +0,0 @@
-name: dummy
-service_id: 1
-service_display_name: Болванка
-service_short_name: dummy
-service_man: '## Болванка для тестов.
А это просто много букв, чтобы посмотреть, как ведет себя текст при переполнении контейнера.
``` json
{
"iamServiceUrl": "https://auth-api-test.ngcloud.ru/api/v1/user",
"idpResponse": {
"prefix": {
"charset": "",
"status_text": "Request Time-out",
"text": true,
"errordetail": "",
"filecontent": "Connection Timeout",
"responseheader": {},
"header": "",
"statuscode": "408 Request Time-out",
"status_code": 408,
"mimetype": "Unable to determine MIME type of file."
}
}
}
```'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 18
- kind: instance
- action: create
- man: Это мануал к операции CREATE сервиса Болванка
- params:
- - id: 198
- code: durationMs
- data_type: integer >= 0
- required: true
- default: "0"
- descr: перед завершением подождать (sleep) столько миллисекунд
- man: перед завершением подождать (sleep) столько миллисекунд
- sort: 20
- is_modifiable: true
- - id: 199
- code: failAtStart
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, завершить джоб, ничего не записывая в cmdb
- man: '**Операция не будет завершена**
Она будет в постоянном статусе PENDING, однако в Jenkins Job завершится с ошибкой'
- sort: 30
- is_modifiable: true
- - id: 200
- code: failInProgress
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdb
- man: если true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdb
- sort: 40
- is_modifiable: true
- - id: 201
- code: whereFail
- data_type: integer > 0
- required: false
- default: "1"
- value_list:
- - "1"
- - "2"
- - "3"
- descr: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- man: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- sort: 50
- is_modifiable: true
- - id: 242
- code: resourceRealm
- data_type: string
- required: true
- default: dummy
- value_list:
- - dummy
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование ресурсной платформы для подключения
- sort: 10
- - id: 286
- code: bodymessage
- data_type: string
- required: false
- descr: Дата, уходящая в Vault
- man: Дата, уходящая в Vault
- sort: 60
- is_modifiable: true
- - id: 321
- code: mapExample
- data_type: map
- required: false
- is_modifiable: true
- sub_params:
- - id: 2
- code: subparam2
- data_type: string
- required: false
- default: ""
- is_modifiable: false
- - id: 1
- code: subparam1
- data_type: string
- required: false
- default: ""
- descr: это для администратора
- man: это для пользователя
- is_modifiable: false
- - id: 3
- code: secret
- data_type: string
- required: false
- default: ""
- descr: это секрет
- man: значение параметра маскируется. Write Only
- is_modifiable: false
- is_sensitive: true
- - id: 322
- code: jsonExample
- data_type: json
- required: false
- descr: Для тестирования интерфейса
- man: Для тестирования интерфейса. Сюда можно писать корректный json
- is_modifiable: true
- - id: 396
- code: nestedRefExample
- required: false
- - id: 647
- code: mapFixed
- data_type: map-fixed
- required: false
- descr: Новый тип поля
- sub_params:
- - id: 10
- code: param1
- data_type: integer > 0
- required: true
- default: "1"
- descr: Integer, secret
- man: integer > 0, sensitive data (secret)
- is_modifiable: false
- is_sensitive: true
- - id: 11
- code: param2
- data_type: string
- required: true
- default: "1"
- value_list:
- - '["1"'
- - '"2"'
- - '"3"]'
- descr: Дескрипшен
- man: Выбор из списка 1,2,3
- is_modifiable: false
- - id: 12
- code: param3
- data_type: integer > 0
- required: true
- default: "1"
- descr: целое положительное
- man: int > 0, обязательный
- is_modifiable: false
- - id: 13
- code: bol1
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Булевский, обязательный
- man: Булевский, обязательный. Проверить, как воспринимается снятый флаг
- is_modifiable: false
- - id: 14
- code: minStr1
- data_type: string
- required: true
- default: abracadabra
- value_list:
- - abracadabra
- descr: не меньше 10 символов
- is_modifiable: false
- - id: 654
- code: arrayMapFixedExample
- data_type: array-map-fixed
- required: false
- descr: Array of map-fixed
- sub_params:
- - id: 18
- code: bol1
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- is_modifiable: false
- - id: 19
- code: minStr1
- data_type: string
- required: true
- default: ""
- value_list:
- - abracadabra
- descr: не меньше 10 символов
- is_modifiable: false
- - id: 15
- code: param1
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- is_sensitive: true
- - id: 16
- code: param2
- data_type: string
- required: true
- default: ""
- value_list:
- - '["1"'
- - '"2"'
- - '"3"]'
- is_modifiable: false
- - id: 17
- code: param3
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 863
- code: arr
- data_type: array
- required: true
- value_list:
- - test
- - "2"
- - val1
- - name: delete
- id: 71
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 92
- kind: instance
- action: modify
- params:
- - id: 287
- code: durationMs
- data_type: integer >= 0
- required: true
- default: "0"
- descr: перед завершением подождать (sleep) столько миллисекунд
- man: перед завершением подождать (sleep) столько миллисекунд
- sort: 10
- - id: 288
- code: failAtStart
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, завершить джоб, ничего не записывая в cmdb
- sort: 20
- - id: 289
- code: failInProgress
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdb
- sort: 30
- - id: 290
- code: whereFail
- data_type: integer > 0
- required: false
- value_list:
- - "1"
- - "2"
- - "3"
- descr: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- man: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- sort: 40
- - id: 291
- code: bodymessage
- required: false
- descr: Дата, уходящая в Vault
- man: Дата, уходящая в Vault
- sort: 50
- - id: 373
- code: mapExample
- data_type: map
- required: false
- default: '{}'
- sub_params:
- - id: 4
- code: secret
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- is_sensitive: true
- - id: 374
- code: jsonExample
- required: false
- - name: reconcile
- id: 257
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 240
- kind: action
- action: redeploy
- params: []
- - name: resume
- id: 94
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 93
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/21_vc_vdc.yaml b/dev/resources_yaml/21_vc_vdc.yaml
deleted file mode 100644
index 44c3cbb..0000000
--- a/dev/resources_yaml/21_vc_vdc.yaml
+++ /dev/null
@@ -1,169 +0,0 @@
-name: vc_vdc
-service_id: 21
-service_display_name: Виртуальный датацентр (vDC)
-service_short_name: vc_vdc
-service_man: '# Инструкция по развертыванию Виртуальный датацентр (vDC) через платформу
## 1. Общая информация
**Виртуальный датацентр (vDC)** — это логическая изолированная среда в VMware Cloud Director, предназначенная для размещения и управления виртуальными машинами, сетевой инфраструктурой и ресурсами хранения. Сервис обеспечивает выделение вычислительных ресурсов под конкретную организацию и предоставляет гибкие параметры масштабирования, контроля потребления и разделения ресурсов.
### Доступные операции
**create** — Создание виртуального датацентра (vDC) с заданными параметрами CPU, RAM, Storage и сетевой конфигурацией.
**delete** — Удаление vDC. Требуется предварительный перевод vDC в состояние *suspend*. Полное удаление возможно через 14 дней.
**modify** — Внесение изменений в параметры ресурсов (CPU/RAM/Storage), выделенных для vDC.
**suspend** — Заморозка vDC. Новые ресурсы или изменения внутри vDC становятся невозможными, работа ВМ не останавливается.
**resume** — Разморозка vDC. Восстановление возможности управления сущностями внутри vDC.
---
## 2. Параметры развертывания
Ниже перечислены входные параметры операции **create**.
### UUID Организации
Уникальный идентификатор организации в Cloud Director. Перед созданием vDC требуется предварительное создание услугу `Организация в Cloud Director`.
### Provider VDC в Cloud Director
Свойство ресурсной платформы, определяющее, какой пул физических ресурсов будет использоваться.
### Network Pool в Cloud Director
Определяет возможности сетевой конфигурации, включая создание Edge Gateway и выход во внешние сети.
### Гарантированная доля ЯДЕР
Гарантированный процент вычислительных ресурсов (CPU), закрепленный за vDC. Значение устанавливается разово при создании.
### Гарантированная доля ОЗУ
Гарантированный процент оперативной памяти, закрепленный за vDC. Также задаётся один раз при создании.
### Сколько аллоцировать на VDC ЯДЕР
Количество виртуальных ядер, выделяемых в рамках vDC.
### Сколько аллоцировать на VDC ОЗУ
Количество оперативной памяти в GB, выделяемой для vDC.
### Конфигурация Storage
Набор дисковых политик и их объёмов, выделяемых для vDC. Указывается имя политики и требуемый размер (GB).
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Количество ядер CPU: 10–20
- Аллоцируемая RAM: 16–64 GB
- Гарантированная доля CPU: 20%
- Гарантированная доля RAM: 20%
- Storage:
- Политика `SATA`
- Объём: 100–300 GB
### Промышленное окружение
- Количество ядер CPU: 16–128
- Аллоцируемая RAM: 64–512 GB
- Гарантированная доля CPU: 50%
- Гарантированная доля RAM: 50%
- Storage:
- Политики уровня `SSD`
- Объём: 1–10 TB, выбор несколько политик под разные нагрузки
---
## 4. Выходные параметры
Выходные параметры формируются операцией **create** (и используются другими операциями):
### Имя vDC
Уникальный идентификатор созданного виртуального датацентра. Используется в дальнейших операциях (modify, suspend, delete).
### Параметры выделенных ресурсов
Подтверждение итогового объёма CPU/RAM/Storage, выделенных vDC. Используются для учёта и контроля потребления.
---
## 5. Дополнительная информация
- Перед созданием vDC необходимо обеспечить наличие корректно созданной организации и доступных пула ресурсов ресурсной платформы.
- Гарантированная доля CPU и RAM задаётся **однократно при создании vDC**. После развертывания изменить эти значения невозможно; для изменения необходимо пересоздать vDC.
- Удаление vDC возможно только через **14 дней после перевода в состояние *suspend***. Удаление очищает все связанные сущности (ВМ, сети, каталоги), поэтому необходимо убедиться, что данные перенесены.
- Платформа Cloud Director использует концепцию изолированных организационных ресурсов, поэтому корректная настройка Provider VDC и Network Pool является обязательной при создании vDC.
- При изменении параметров (modify) изменяются только показатели CPU, RAM и Storage. Сетевые параметры и гарантированные доли остаются неизменными.
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 9
- kind: instance
- action: create
- params:
- - id: 30
- code: organizationUid
- data_type: uuid
- required: true
- ref_svc_id: 19
- man: Для создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director`
- sort: 10
- - id: 335
- code: providerVdc
- data_type: string
- required: true
- man: Приписка `2.8` - Скорость vCPU - 2800MHz
И так далее...
- sort: 30
- depends_on: organizationUid,networkProvider
- - id: 361
- code: storageConfig
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- man: Первая политика в списке указывается как "По умолчанию"
- sort: 100
- is_modifiable: true
- sub_params:
- - id: 41
- code: name
- data_type: string
- required: true
- default: ""
- descr: getKeyListFromStruct(getResourceRealmConfig(getStringFromStruct(getInstanceState(params.organizationUid), "params.resourceRealm")), concat("vcd.hardware.providerVdcs['",params.providerVdc,"'].storage"))
- is_modifiable: false
- - id: 42
- code: size
- data_type: integer > 0
- required: true
- default: "2000"
- is_modifiable: false
- - id: 397
- code: cpuGuaranteed
- data_type: integer > 0
- required: true
- default: "20"
- value_list:
- - "20"
- - "50"
- - "80"
- descr: '% резервирования'
- man: Свойство нельзя изменить после создания
- sort: 60
- - id: 557
- code: cpuAllocated
- data_type: integer > 0
- required: true
- default: "80"
- maxvalue: 1000
- minvalue: 1
- descr: шт
- sort: 80
- is_modifiable: true
- - id: 558
- code: memAllocated
- data_type: integer > 0
- required: true
- default: "200"
- maxvalue: 4096
- minvalue: 1
- descr: gb
- sort: 90
- is_modifiable: true
- - id: 746
- code: networkProvider
- data_type: string
- required: true
- sort: 20
- depends_on: organizationUid
- - name: delete
- id: 24
- kind: instance
- action: delete
- man: 'Удалить возможно только через 14 дней после выполнения операции `suspend`
**ОСТОРЖНО: Удаление приводит к полному удалению всех сущностей внутри этого VDC**
Если существуют инстансы Edge, vApp, Vm или Kubernetes-кластер Штурвал, которые были созданы, из ЛК удалены не будут. Необходимо обратиться к `технической поддержке` для удаления инстансов'
- params: []
- - name: modify
- id: 112
- kind: instance
- action: modify
- params:
- - id: 560
- code: cpuAllocated
- data_type: integer > 0
- required: true
- maxvalue: 999
- minvalue: 1
- descr: шт
- sort: 10
- - id: 561
- code: memAllocated
- data_type: integer > 0
- required: true
- maxvalue: 1024
- minvalue: 1
- descr: gb
- sort: 20
- - id: 562
- code: storageConfig
- data_type: array-map-fixed
- required: true
- man: Первая политика в списке указывается как "По умолчанию"
- sort: 30
- sub_params:
- - id: 43
- code: name
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 44
- code: size
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - name: reconcile
- id: 250
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 172
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 171
- kind: instance
- action: suspend
- man: Операция **не останавливает ВМки** в облаке, но не даёт редактировать все сущности внутри VDC
- params: []
diff --git a/dev/resources_yaml/22_vc_nsxt.yaml b/dev/resources_yaml/22_vc_nsxt.yaml
deleted file mode 100644
index 158f59e..0000000
--- a/dev/resources_yaml/22_vc_nsxt.yaml
+++ /dev/null
@@ -1,139 +0,0 @@
-name: vc_nsxt
-service_id: 22
-service_display_name: Сетевой шлюз периметра (Edge)
-service_short_name: vc_nsxt
-service_man: '# Инструкция по развертыванию Сетевой шлюз периметра (Edge) через платформу
## 1. Общая информация
Сервис **Сетевой шлюз периметра (Edge)** предназначен для создания периметрового сетевого шлюза в рамках одного виртуального датацентра (vDC) или группы виртуальных датацентров (groupvDC).
При создании автоматически разворачивается routed-сеть с адресным пространством `10.10.102.0/24`.
Сервис обеспечивает сетевую изоляцию, маршрутизацию, а также может включать функциональность балансировщика нагрузки AVI (ALB) для последующей интеграции, включая поддержку кластеров Штурвал.
### Доступные операции
**create** — Создание нового Edge с привязкой к vDC или groupvDC и развёртыванием routed-сети.
**delete** — Удаление ранее созданного Edge. Недоступно при наличии зависимых услуг (vApp, VM, Кластер Штурвал).
**modify** — Изменение параметров и сетевых настроек существующего Edge.
---
## 2. Параметры развертывания
Ниже приведены параметры операции **create**.
### Тип родительской услуги
Определяет контекст размещения Edge.
Допустимые значения: `vdc`, `groupvdc`.
Использование:
- При выборе `vdc` обязателен параметр **UUID VDC**.
- При выборе `groupvdc` обязателен параметр **UUID Группы VDC**.
### UUID VDC
Идентификатор виртуального датацентра.
Необходимо предварительно создать vDC через услугу «Виртуальный датацентр (vDC)».
Указывается только при выборе родительского типа `vdc`.
### UUID Группы VDC
Идентификатор группы виртуальных датацентров.
Создаётся через услугу «Группа виртуальных датацентров (groupvDC)».
Используется при выборе родительского типа `groupvdc`.
### Включить ALB
Флаг активации AVI Load Balancer в Cloud Director.
Пример значения: `true`/`false`.
Нужен для развёртывания кластера Штурвал и возможности создания Virtual Services.
### Наименование segroup
Имя сервиса групп (segroup) на уровне ресурсной платформы.
Обязательно при включённом ALB.
Определяет группу, в которой будут выделяться пулы AVI для Virtual Services.
### virtualServicesCount
Количество резервируемых виртуальных сервисов (Virtual Services) на AVI.
Типичное значение: 1–10 в зависимости от нагрузки.
---
## 3. Рекомендованные характеристики
### Тестовое окружение (Test)
- Тип родительской услуги: `vdc`
- virtualServicesCount: 1–2
- ALB: выключен по умолчанию (включать только при необходимости тестирования Штурвала)
- segroup: задаётся только при включённом ALB
- VDC гарантии CPU/RAM: минимальные (поскольку изменить их после создания нельзя)
### Промышленное окружение (Production)
- Тип родительской услуги: `groupvdc` при работе с распределёнными нагрузками или `vdc` для локализованных проектов
- virtualServicesCount: 3–10, исходя из предполагаемого количества публикаций
- ALB: включён, если требуется высокая доступность сервисов или используется кластер Штурвал
- segroup: рекомендуется использовать выделенную группу под проект
- VDC гарантии CPU/RAM: повышенные, с учётом того, что изменить их после создания невозможно без пересоздания vDC
---
## 4. Выходные параметры
### Имя Edge
Уникальное название созданного сетевого шлюза, используется для ссылок и дальнейших операций.
### Имя routed-сети
Автоматически созданная routed-сеть с подсетью `10.10.102.0/24`, используется для подключения ресурсов.
### Параметры Edge
Набор параметров, указанных пользователем при создании: тип услуги, ALB, segroup, virtualServicesCount и др.
Используются в операциях modify и для анализа состояния сервиса.
---
## 5. Дополнительная информация
- В рамках сервиса **один раз при создании задаётся гарантированная доля CPU/RAM vDC**. Изменить её невозможно — требуется пересоздание vDC.
- Удаление Edge недоступно при наличии зависимых ресурсов (vApp, VM, кластер Штурвал).
- При использовании ALB необходимо корректно указывать segroup, чтобы обеспечить корректное выделение пулов AVI.
- При выборе режима `groupvdc` следует учитывать распределение нагрузки между несколькими vDC.
- SNAT для всех ресурсов внутри Edge можно активировать через операцию modify (параметры выделения VIP и ipSpace).
'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 10
- kind: instance
- action: create
- params:
- - id: 8
- code: vdcUid
- data_type: string
- required: false
- ref_svc_id: 21
- descr: UUID Услуги `Виртуальный датацентр (vDC)`
- man: 'Необходимо, если выбран тип подключаемой VDC: `vdc`'
- sort: 10
- - id: 340
- code: needEnableAVI
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Включение Load Balancer
- man: Параметры `Наименование segroup`, `Кол-во VS на AVI` необходимо также указать
- sort: 30
- is_modifiable: true
- - id: 341
- code: virtualServicesCount
- data_type: integer > 0
- required: false
- default: "1"
- maxvalue: 4
- minvalue: 1
- descr: Кол-во виртуальных сервисов, которые **резервируются** на AVI
- man: Во избежании коллапса пока выделяется до 4
Необходимо указывать, если включён параметр `Включить ALB`
- sort: 50
- is_modifiable: true
- - id: 621
- code: vdcType
- data_type: string
- required: true
- default: vdc
- value_list:
- - vdc
- - vdcGroup
- descr: Тип родительской услуги
- man: При выборе vdc обеспечивает сетевую доступность только в рамках этого vdc
При выборе groupvdc обеспечивает сетевую доступность между всеми vdc, которые включены в groupvdc
- sort: 0
- - id: 622
- code: vdcGroupUid
- data_type: string
- required: false
- ref_svc_id: 29
- descr: UUID Услуги `Группа виртуальных датацентров (groupvDC)`
- man: 'Необходимо, если выбран тип подключаемой VDC: `groupvdc`'
- sort: 20
- - id: 825
- code: qosProfile
- required: false
- descr: Параметр пока не работает
Должен возвращать поле из ресурсной платформы типа vc из .vcd.hardware.gatewayQoSProfiles
Как по идее должен работать.
Нужно заполнить или CFS vdcUid, или vdcGroupUid
Идеально конечно проверять `if (params.vdcType == "vdc" && params.vdcUid != "")` или `if (params.vdcType == "vdcGroup" && params.vdcGroupUid != "")`
Далее надо пойти по стейту vdc -> org -> resPlatform, взять gatewayQoSProfiles
Или пойти по стейту vdcgroup -> vdc -> org -> resPlatform, взять gatewayQoSProfiles
Регулярку могу написать (Виталя)
- man: if (vdcUid != '") {
наборфункций1
}
elif (vdcGroupUid != "") {
наборфункций2
}
else {
return "Необходимо выбрать vdc или vdcgroup"
}
- sort: 60
- depends_on: vdcUid,vdcGroupUid
- is_modifiable: true
- - name: delete
- id: 25
- kind: instance
- action: delete
- man: Невозможно удалить если routed-сеть в Edge связана с:
- vApp
- VM
- Kubernetes-кластер Штурвал
Запустить операцию возможно, но будет ошибка
- params: []
- - name: modify
- id: 111
- kind: instance
- action: modify
- man: Для создания SNAT Правила убедитесь, что в организации есть свободные IP
Редактировать кол-во свободных IP можно в услуге `Организация в Cloud Director` -> `modify`
- params:
- - id: 368
- code: needEnableAVI
- data_type: boolean
- required: false
- value_list:
- - "false"
- - "true"
- descr: Включение Load Balancer
- man: Параметры `Наименование segroup`, `Кол-во VS на AVI` необходимо также указать
- sort: 10
- - id: 369
- code: virtualServicesCount
- data_type: integer > 0
- required: false
- maxvalue: 4
- minvalue: 1
- descr: Кол-во виртуальных сервисов, которые выделяются на AVI
- man: Во избежании коллапса пока выделяется до 4
Необходимо указывать, если включён параметр `Включить ALB`
- sort: 30
- - id: 372
- code: ipSpaceName
- data_type: string
- required: false
- descr: Имя ip Space для внешнего IP
- man: Необходимо указывать, если включён параметр `Выделить VIP для SNAT`
- sort: 50
- - id: 856
- code: qosProfile
- data_type: string
- required: false
- sort: 40
- - name: reconcile
- id: 252
- kind: action
- action: reconcile
- params: []
diff --git a/dev/resources_yaml/25_vcexternalip.yaml b/dev/resources_yaml/25_vcexternalip.yaml
deleted file mode 100644
index 3a91400..0000000
--- a/dev/resources_yaml/25_vcexternalip.yaml
+++ /dev/null
@@ -1,165 +0,0 @@
-name: vcexternalip
-service_id: 25
-service_display_name: Публичные IP адреса
-service_short_name: vcexternalip
-service_man: '**Обычно эта услуга разворачивается автоматически при развёртывании более сложных услуг**
Вручную создавать можно, однако услуга требует много параметров, о которых можно просто не знать
Резервировать публичные IP адреса можно только после создания NGcloud Organization, NGcloud Виртуальный датацентр, NGcloud Каталог, Сетевой шлюз периметра.
Вы можете назначить IP адрес для существующего экземпляра сервиса.'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 56
- kind: instance
- action: create
- params:
- - id: 140
- code: serviceUid
- data_type: string
- required: true
- sort: 20
- is_modifiable: true
- - id: 141
- code: dnatCreate
- data_type: boolean
- required: true
- default: "true"
- descr: Необходимо создать DNAT-правило.
- sort: 40
- is_modifiable: true
- - id: 142
- code: internalPortAccess
- data_type: string
- required: true
- default: "5432"
- descr: Порт для связки ната с адресом. Несколько значений можно передавать через пробел. Если передать all, то dnat будет на все порты. Требует dnatCreate=true
- sort: 60
- is_modifiable: true
- - id: 143
- code: snatCreate
- data_type: boolean
- required: false
- descr: Необходимо создать SNAT-правило.
- sort: 50
- is_modifiable: true
- - id: 144
- code: internalAddrAccess
- data_type: string
- required: true
- descr: Внутренний адрес для связки ната. Требует dnatCreate=true или snatCreate=true
- sort: 70
- is_modifiable: true
- - id: 324
- code: fromServiceNamespace
- data_type: string
- required: true
- descr: Namespace составной услуги (для отображения правил FW)
- sort: 80
- - id: 325
- code: fromServiceCloudEdgeName
- data_type: string
- required: false
- descr: Edge составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 90
- - id: 326
- code: fromServiceCloudVdcName
- required: false
- descr: Vdc составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 100
- - id: 327
- code: fromServiceCloudOrgName
- data_type: string
- required: false
- descr: Org составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 110
- - id: 328
- code: fromServiceCloudVmwareUrl
- data_type: string
- required: false
- descr: Api-Url составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 120
- - id: 336
- code: ipSpaceName
- data_type: string
- required: true
- descr: Тип ip Space (internet-ipv4-v1 / internet-antiddos-v1 / internet-no-antiddos-v1)
- sort: 30
- is_modifiable: true
- - id: 488
- code: resourceRealm
- data_type: string
- required: true
- default: sandbox.nubes.ru
- value_list:
- - sandbox.nubes.ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- sort: 200
- - id: 624
- code: fromServiceCloudEdgeScope
- data_type: string
- required: false
- sort: 130
- - id: 626
- code: fromServiceVdcGroupName
- data_type: string
- required: false
- sort: 140
- - name: delete
- id: 57
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 197
- kind: instance
- action: modify
- params:
- - id: 627
- code: serviceUid
- data_type: string
- required: true
- sort: 20
- - id: 628
- code: ipSpaceName
- data_type: string
- required: true
- sort: 30
- - id: 629
- code: dnatCreate
- data_type: boolean
- required: true
- sort: 40
- - id: 630
- code: snatCreate
- data_type: boolean
- required: true
- sort: 50
- - id: 631
- code: internalPortAccess
- data_type: string
- required: true
- sort: 60
- - id: 632
- code: internalAddrAccess
- data_type: string
- required: true
- sort: 70
diff --git a/dev/resources_yaml/26_vapp.yaml b/dev/resources_yaml/26_vapp.yaml
deleted file mode 100644
index f7f6e2e..0000000
--- a/dev/resources_yaml/26_vapp.yaml
+++ /dev/null
@@ -1,79 +0,0 @@
-name: vapp
-service_id: 26
-service_display_name: Виртуальный каталог ВМ (vApp)
-service_short_name: vapp
-service_man: '# Инструкция по развертыванию Виртуальный каталог ВМ (vApp) через платформу
## 1. Общая информация
**Виртуальный каталог ВМ (vApp)** — это логическая каталог, объединённая в единый управляемый объект. Сервис предназначен для совместного развертывания, управления жизненным циклом и сетевого взаимодействия набора связанных ВМ. Основные функции включают:
- централизованное управление включением, выключением и приостановкой группы ВМ;
- унифицированный сетевой доступ через привязанный Edge-шлюз;
### Доступные операции
**create** — Создание нового vApp с привязкой к заданным услугам VDC и Edge
**delete** — Удаление существующего vApp. Требуется предварительный перевод vApp в состояние *suspend*. Полное удаление возможно через 14 дней.
**suspend** — Остановка vApp (выключение всех ВМ внутри каталога)
**resume** — Запуск vApp (включение всех ВМ внутри каталога)
---
## 2. Параметры развертывания
Параметры берутся из операции **create**.
### UUID Услуги VDC
Уникальный идентификатор услуги «Виртуальный датацентр (vDC)».
Используется для определения вычислительной инфраструктуры, в которой будет развернут vApp.
### UUID Услуги Edge
Уникальный идентификатор услуги «Сетевой шлюз периметра (Edge)».
Обеспечивает маршрутизацию и сетевое подключение. Может быть привязан к группе VDC, поэтому выбирается отдельно.
### Имя vApp
Строгое имя, соответствующее маске формирования DNS-имени.
Используется как часть в DNS-имени при создании виртуальных машин.
---
## 3. Рекомендованные характеристики
Так как является промежуточным этапом для создания ВМ, все характеристики описываются в услуге `Виртуальная машина`
---
## 4. Выходные параметры
### Параметры vApp
Заданные при создании vApp
---
## 5. Дополнительная информация
- Привязка к VDC и Edge осуществляется раздельно, поскольку один Edge может обслуживать несколько VDC (через услугу `Группа виртуальных датацентров (groupvDC)`). Это гарантирует возможность развернуть ВМ в единой сети, но в разных виртуальных датацентрах.
- Перед удалением vApp необходимо вручную перевести его в состояние **suspend**. Удаление возможно только спустя 14 дней после этого шага.
- Операция delete удаляет весь vApp полностью, включая все виртуальные машины, связанные с ним.
- Рекомендуется заранее планировать сетевые связи и назначения DNS-имён для обеспечения корректной работы сервисов, развернутых внутри vApp.
- При проектировании инфраструктуры следует учитывать зависимости между Edge-шлюзом, VDC и размещаемыми ВМ, чтобы избежать ограничений при масштабировании и интеграции.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 69
- kind: instance
- action: create
- params:
- - id: 190
- code: nsxtUid
- data_type: uuid
- required: true
- ref_svc_id: 22
- descr: UUID Услуги `Сетевой шлюз периметра (Edge)`
- man: К какой сети может быть подключен виртуальный каталог
- sort: 20
- - id: 191
- code: vappName
- data_type: string
- required: true
- default: fgpdul5a
- regex: ^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$
- minlength: 3
- descr: Уникальное в рамках организации
- man: Имеет строгую маску `^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$`
Используется в формировании DNS-Имени (для виртуальных машин)
- sort: 30
- - id: 623
- code: vdcUid
- data_type: uuid
- required: true
- ref_svc_id: 21
- descr: UUID Услуги `Виртуальный датацентр (vDC)`
- man: В каких ресурсах будет создан виртуальный каталог
- sort: 10
- - name: delete
- id: 70
- kind: instance
- action: delete
- params: []
- - name: reconcile
- id: 285
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 209
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 208
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/27_vc_vm_v2.yaml b/dev/resources_yaml/27_vc_vm_v2.yaml
deleted file mode 100644
index 2b1d235..0000000
--- a/dev/resources_yaml/27_vc_vm_v2.yaml
+++ /dev/null
@@ -1,71 +0,0 @@
-name: vc_vm_v2
-service_id: 27
-service_display_name: VM в Cloud Director (vc_vmV2)
-service_short_name: vc_vm_v2
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 100
- kind: instance
- action: create
- params:
- - id: 301
- code: serverListJson
- data_type: json
- required: true
- default: '[{}]'
- maxlength: 65536
- minlength: 10
- descr: Необходимо изменить vappUid и ipSpaceName
Пример конфигурации взять по ссылке ниже
Объект серверов вида [{}] (Map(Object))
Более подробнее смотреть в README.md (https://gitea.mgmt.nubes.ru/cloudServices/vcVmV2)
- sort: 20
- is_modifiable: true
- - name: delete
- id: 101
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 104
- kind: instance
- action: modify
- params:
- - id: 302
- code: serverListJson
- data_type: json
- required: true
- default: '[{}]'
- maxlength: 65536
- minlength: 10
- descr: Объект серверов вида [{}] (Map(Object))
Более подробнее смотреть в README.md (https://gitea.mgmt.nubes.ru/cloudServices/vcVmV2)
- sort: 10
- - name: resume
- id: 102
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 103
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/28_vc_vm_v3.yaml b/dev/resources_yaml/28_vc_vm_v3.yaml
deleted file mode 100644
index f05d808..0000000
--- a/dev/resources_yaml/28_vc_vm_v3.yaml
+++ /dev/null
@@ -1,278 +0,0 @@
-name: vc_vm_v3
-service_id: 28
-service_display_name: Виртуальная машина
-service_short_name: vc_vm_v3
-service_man: '# Документация по разворачиванию ВМ в Личном кабинете
Данный сервис позволяет разворачивать виртуальные машины (ВМ) непосредственно из Личного кабинета (ЛК).
## Доступные операции
- **create** — Создание виртуальной машины
- **delete** — Удаление виртуальной машины
- **resume** — Запуск виртуальной машины
- **suspend** — Остановка виртуальной машины
---
## Параметры для развёртывания ВМ
### Обязательные параметры:
**vappUid**
UUID vApp, в которой будет создаваться виртуальная машина.
*Пример: WZ00400*
**vmName**
Уникальное имя виртуальной машины.
*Пример: test-vm*
**vmCpu**
Количество ядер процессора. Должно быть больше 0.
*Пример: 1*
**vmRam**
Объем оперативной памяти в гигабайтах. Должно быть больше 0.
*Пример: 1*
**accessPortList**
Белый список портов для доступа к виртуальной машине извне в формате JSON.
*Пример: ["22","10050]*
**imageVm**
Образ операционной системы для развёртывания.
*Доступные значения: RockyLinux_9-16G-cloudinit, Ubuntu_22-20G, Debian_13-20G*
**userLogin**
Логин пользователя для SSH-доступа.
*По умолчанию: myuser*
**userPublicKey**
Публичный SSH-ключ пользователя в формате OpenSSH.
*Пример: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...*
**needAddZabbixTemplate**
Значение истина\ложь, определяющее будет ли добавлен хост в zabbix.
*Пример: true*
### Опциональные параметры:
**accessIpList**
Белый список IP-адресов для доступа к виртуальной машине в формате JSON. Если оставить пустым, вм будет доступена со всех адресов.
*Пример: ["192.168.1.1", "10.0.0.5"]*
**vmDisk**
Размер дополнительного диска в гигабайтах. Должно быть больше 0.
*Пример: 50*
**ipSpaceName**
Внешний IP-адрес. Если не требуется — укажите значение "no-needed" (В нем не будет работать сбор метрик zabbix).
**cloudInit**
YAML-скрипт для кастомизации системы через cloud-init.
---
## Доступные образы операционных систем
### RockyLinux_9-16G-cloudinit
Базовый образ на основе Rocky Linux 9 (Rocky-9.6-x86_64-minimal) для серверных задач.
- Размер системного диска: 16 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Ubuntu_22-20G
Образ на основе Ubuntu Server 22.04 LTS для облачного окружения.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Debian_13-20G
Образ на основе Debian 13 (Trixie) для стабильной серверной работы.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
---
## Пример использования Cloud-init
```yaml
users:
- name: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...
packages:
- nginx
runcmd:
- systemctl enable --now nginx
- systemctl restart nginx
```
---
## Результат выполнения
После успешного развёртывания в Личном кабинете появится новая виртуальная машина с заданными характеристиками. SSH-доступ осуществляется с использованием указанных логина и публичного ключа.
---
## Важные примечания
### Особенности работы:
- Для отключения внешнего IP укажите значение "no-needed" в параметре ipSpaceName
- Параметр cloudInit является опциональным
### Ограничения:
- Не рекомендуется использовать продолжительные инструкции в cloud-init (таймаут 5 минут)
- Не поддерживается запись файлов через cloud-init
- Не реализовано создание резервных копий ВМ
---
## Диагностика проблем с cloud-init
### Основной лог-файл:
```bash
/var/log/cloud-init.log
```
### Пакет не устанавливается:
- Проверьте доступность пакета в репозитории
- Убедитесь в правильности написания имени пакета
- Попробуйте установить вручную: `apt install <имя_пакета>` (Debian/Ubuntu) или `dnf install <имя_пакета>` (Rocky Linux)
### Команда не выполняется:
- Проверьте наличие требуемой утилиты в системе
- Убедитесь в правильности синтаксиса команды
- Попробуйте выполнить команду вручную для диагностики'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 132
- kind: instance
- action: create
- man: '# Документация по использованию услуги развёртывания ВМ в Личном кабинете
Данный сервис позволяет разворачивать виртуальные машины (ВМ) непосредственно из Личного кабинета (ЛК).
## Доступные операции
- **create** — Создание виртуальной машины
- **delete** — Удаление виртуальной машины
- **resume** — Запуск виртуальной машины
- **suspend** — Остановка виртуальной машины
---
## Параметры для развёртывания ВМ
### Обязательные параметры:
**vappUid**
UUID vApp, в которой будет создаваться виртуальная машина.
*Пример: WZ00400*
**vmName**
Уникальное имя виртуальной машины.
*Пример: test-vm*
**vmCpu**
Количество ядер процессора. Должно быть больше 0.
*Пример: 1*
**vmRam**
Объем оперативной памяти в гигабайтах. Должно быть больше 0.
*Пример: 1*
**accessPortList**
Белый список портов для доступа к виртуальной машине извне в формате JSON.
*Пример: ["22","10050]*
**imageVm**
Образ операционной системы для развёртывания.
*Доступные значения: RockyLinux_9-16G-cloudinit, Ubuntu_22-20G, Debian_13-20G*
**userLogin**
Логин пользователя для SSH-доступа.
*По умолчанию: myuser*
**userPublicKey**
Публичный SSH-ключ пользователя в формате OpenSSH.
*Пример: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...*
**needAddZabbixTemplate**
Значение истина\лож определяющее будет ли добавлен хост в zabbix.
*Пример: true*
### Опциональные параметры:
**accessIpList**
Белый список IP-адресов для доступа к виртуальной машине в формате JSON. Если оставить пустым, вм будет доступена со всех адресов.
*Пример: ["192.168.1.1", "10.0.0.5"]*
**vmDisk**
Размер дополнительного диска в гигабайтах. Должно быть больше 0.
*Пример: 50*
**ipSpaceName**
Внешний IP-адрес. Если не требуется — укажите значение "no-needed".
**cloudInit**
YAML-скрипт для кастомизации системы через cloud-init.
---
## Доступные образы операционных систем
### RockyLinux_9-16G-cloudinit
Базовый образ на основе Rocky Linux 9 (Rocky-9.6-x86_64-minimal) для серверных задач.
- Размер системного диска: 16 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Ubuntu_22-20G
Образ на основе Ubuntu Server 22.04 LTS для облачного окружения.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Debian_13-20G
Образ на основе Debian 13 (Trixie) для стабильной серверной работы.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
---
## Пример использования Cloud-init
```yaml
users:
- name: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...
packages:
- nginx
runcmd:
- systemctl enable --now nginx
- systemctl restart nginx
```
---
## Результат выполнения
После успешного развёртывания в Личном кабинете появится новая виртуальная машина с заданными характеристиками. SSH-доступ осуществляется с использованием указанных логина и публичного ключа.
---
## Важные примечания
### Особенности работы:
- Для отключения внешнего IP укажите значение "no-needed" в параметре ipSpaceName
- Параметр cloudInit является опциональным
### Ограничения:
- Не рекомендуется использовать продолжительные инструкции в cloud-init (таймаут 5 минут)
- Не поддерживается запись файлов через cloud-init
- Не реализовано создание резервных копий ВМ
---
## Диагностика проблем с cloud-init
### Основной лог-файл:
```bash
/var/log/cloud-init.log
```
### Пакет не устанавливается:
- Проверьте доступность пакета в репозитории
- Убедитесь в правильности написания имени пакета
- Попробуйте установить вручную: `apt install <имя_пакета>` (Debian/Ubuntu) или `dnf install <имя_пакета>` (Rocky Linux)
### Команда не выполняется:
- Проверьте наличие требуемой утилиты в системе
- Убедитесь в правильности синтаксиса команды
- Попробуйте выполнить команду вручную для диагностики'
- params:
- - id: 407
- code: vappUid
- data_type: uuid
- required: true
- ref_svc_id: 26
- sort: 10
- - id: 408
- code: vmName
- data_type: string
- required: true
- default: web01
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- sort: 20
- - id: 409
- code: vmCpu
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 64
- minvalue: 1
- descr: шт
- sort: 30
- is_modifiable: true
- - id: 410
- code: vmRam
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 256
- minvalue: 1
- descr: Gb
- sort: 40
- is_modifiable: true
- - id: 411
- code: vmDisk
- data_type: integer > 0
- required: false
- regex: ^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
- descr: Основной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
- sort: 50
- is_modifiable: true
- - id: 412
- code: ipSpaceName
- data_type: string
- required: true
- sort: 60
- depends_on: vappUid
- is_modifiable: true
- - id: 413
- code: accessIpList
- data_type: json
- required: false
- regex: ^(?:$|\[\s*(?:"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?"(?:\s*,\s*"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?")*)\s*\])$
- descr: Формат массива
Каким адресам будет предоставлен доступ до вм
Требует выделенного внешнего IP
Если ничего не передано, то выставлено ["0.0.0.0/0"]
- sort: 70
- is_modifiable: true
- - id: 414
- code: imageVm
- data_type: string
- required: true
- sort: 90
- depends_on: vappUid
- - id: 415
- code: cloudInit
- data_type: yaml
- required: false
- descr: Можно передать создание дополнительных пользователей.
На текущий момент не реализовано выполнения в cloud-init, установки пакетов, выполнения команд и записи файлов.
- sort: 200
- - id: 416
- code: userLogin
- required: true
- default: myuser
- descr: Учётка SSH
- sort: 180
- - id: 417
- code: userPublicKey
- data_type: string
- required: true
- descr: Публичная часть SSH-Ключа для пользователя
- sort: 190
- - id: 448
- code: accessPortList
- data_type: string
- required: true
- default: '["22"]'
- descr: 'По каким портам открыть доступ к ВМ.
Порты 22, 10050 проставляются автоматически
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX'
- sort: 80
- is_modifiable: true
- - name: delete
- id: 133
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 159
- kind: instance
- action: modify
- params:
- - id: 493
- code: vmCpu
- data_type: integer > 0
- required: false
- maxvalue: 64
- minvalue: 1
- descr: шт
- sort: 20
- - id: 494
- code: vmRam
- data_type: integer > 0
- required: false
- maxvalue: 256
- minvalue: 1
- descr: Gb
- sort: 30
- - id: 495
- code: vmDisk
- data_type: integer > 0
- required: false
- regex: ^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
- descr: Основной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
- sort: 40
- - id: 496
- code: ipSpaceName
- data_type: string
- required: false
- value_list:
- - no-needed
- - internet-antiddos-v1
- - internet-no-antiddos-v1
- - internet-ipv4-v1
- descr: no-needed, без внешнего ip
internet-antiddos-v1, с функцией защиты от ddos атак
internet-no-antiddos-v1, с функцией защиты от ddos атак
internet-ipv4-v1 тестовое простанство dev
- sort: 50
- - id: 497
- code: accessIpList
- data_type: json
- required: false
- descr: Формат массива
Каким адресам будет предоставлен доступ до вм
Требует выделенного внешнего IP
Если ничего не передано, то выставлено ["0.0.0.0/0"]
- sort: 60
- - id: 498
- code: accessPortList
- data_type: json
- required: false
- descr: Формат массива
По каким портам открыть доступ к ВМ.
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX
- sort: 70
- - name: reconcile
- id: 286
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 164
- kind: action
- action: redeploy
- params:
- - id: 509
- code: vmName
- data_type: string
- required: true
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- sort: 10
- - id: 510
- code: vmCpu
- data_type: integer > 0
- required: true
- maxvalue: 64
- minvalue: 1
- descr: шт
- sort: 20
- - id: 511
- code: vmRam
- data_type: integer > 0
- required: true
- maxvalue: 256
- minvalue: 1
- descr: Gb
- sort: 30
- - id: 512
- code: vmDisk
- data_type: integer > 0
- required: false
- regex: ^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
- descr: Основной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
- sort: 40
- - id: 513
- code: ipSpaceName
- data_type: string
- required: false
- value_list:
- - no-needed
- - internet-antiddos-v1
- - internet-no-antiddos-v1
- - internet-ipv4-v1
- descr: no-needed, без внешнего ip
internet-antiddos-v1, с функцией защиты от ddos атак
internet-no-antiddos-v1, с функцией защиты от ddos атак
internet-ipv4-v1 тестовое простанство dev
- sort: 50
- - id: 514
- code: accessIpList
- data_type: json
- required: false
- regex: ^(?:$|\[\s*(?:"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?"(?:\s*,\s*"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?")*)\s*\])$
- descr: Формат массива
Каким адресам будет предоставлен доступ до вм
Требует выделенного внешнего IP
Если ничего не передано, то выставлено ["0.0.0.0/0"]
- sort: 60
- - id: 515
- code: imageVm
- data_type: string
- required: true
- value_list:
- - RockyLinux_9-16G-cloudinit
- - Ubuntu_22-20G
- - Debian_13-20G
- sort: 80
- - id: 516
- code: userLogin
- data_type: string
- required: true
- descr: Учётка SSH
- sort: 180
- - id: 517
- code: userPublicKey
- data_type: string
- required: true
- descr: Публичная часть SSH-Ключа для пользователя
- sort: 190
- - id: 518
- code: cloudInit
- data_type: yaml
- required: false
- descr: Можно передать создание дополнительных пользователей.
На текущий момент не реализовано выполнения в cloud-init, установки пакетов, выполнения команд и записи файлов.
- sort: 200
- - id: 520
- code: accessPortList
- data_type: json
- required: false
- descr: По каким портам открыть доступ к ВМ.
Порты 22, 10050 проставляются автоматически
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX
- sort: 70
- - name: resume
- id: 135
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 134
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/29_vc_vdc_group.yaml b/dev/resources_yaml/29_vc_vdc_group.yaml
deleted file mode 100644
index 21afd35..0000000
--- a/dev/resources_yaml/29_vc_vdc_group.yaml
+++ /dev/null
@@ -1,74 +0,0 @@
-name: vc_vdc_group
-service_id: 29
-service_display_name: Группа датацентров
-service_short_name: vcVdcGroup
-service_man: '# Инструкция по развертыванию Группа виртуальных датацентров (groupvDC) через платформу
## 1. Общая информация
Сервис **Группа виртуальных датацентров (groupvDC)** предназначен для логического объединения нескольких виртуальных датацентров (vDC) в единую группу. Это позволяет растягивать SDN между разными vDC и централизованно управлять сетевой связностью. Управление инфраструктурой осуществляется через Cloud Director.
Сервис применяется в случаях, когда требуется обеспечить единое сетевое пространство для распределенных виртуальных датацентров.
### Доступные операции
**create** — Создание новой группы виртуальных датацентров.
**delete** — Удаление существующей группы vDC.
**add_vdc** — Добавление дополнительного виртуального датацентра в группу.
**remove_vdc** — Удаление ранее добавленного виртуального датацентра из группы.
---
## 2. Параметры развертывания
Параметры операции **create**:
### UUID VDC
Идентификатор виртуального датацентра, который будет являться первичным в группе.
Описание: требуется предварительно создать виртуальный датацентр с помощью услуги `Виртуальный датацентр (vDC)`.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Для тестового окружения создавать группу VDC нет необходимости, так как это создаёт дополнительный слой абстракции в Cloud Director
### Промышленное окружение
- Для промышленного окружения, если в тенанте существуют разные VDC, создание groupvdc позволит снизить сетевые издержки (за счёт общей сети)
---
## 4. Выходные параметры
### Параметры groupvdc
Набор параметров, указанных пользователем при создании
---
## 5. Дополнительная информация
- Группа vDC используется для растягивания SDN между несколькими виртуальными датацентрами. Управление всеми сетевыми элементами внутри группы выполняется Cloud Director.
- Удалить первичный vDC (тот, что был указан при операции **create**) невозможно. Для его удаления необходимо удалить всю группу и создать новую.
- Перед добавлением любого vDC в группу он должен быть предварительно развернут через сервис `Виртуальный датацентр (vDC)`.
- Сети создаются не в этой услуге, а в услуге `Сетевой шлюз периметра (Edge)`. В ней необходимо будет выбрать тип `groupvdc`'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: add_vdc
- id: 192
- kind: subresource
- action: add
- subresource: vdc
- man: '**Не нужно** выбирать UUID VDC, который уже был добавлен в группу'
- params:
- - id: 619
- code: vdcUid
- data_type: uuid
- required: true
- ref_svc_id: 21
- sort: 10
- - name: create
- id: 191
- kind: instance
- action: create
- man: '**VDC Группа** нужна для объединения всех VDC в организации в одну логическую группу.
Это позволит, к примеру, создать **общую сеть** для всех VDC в организации
- Для создания группы VDC необходимо указать **инстанс** услуги VDC (`Виртуальный датацентр`)
- **Важный момент** - удалить эту VDC из группы нельзя. Если такая потребность появится, необходимо будет **ПОЛНОСТЬЮ** удалить группу VDC и уже потом создать новую'
- params:
- - id: 618
- code: vdcUid
- data_type: uuid
- required: true
- ref_svc_id: 21
- sort: 10
- - name: delete
- id: 195
- kind: instance
- action: delete
- params: []
- - name: reconcile
- id: 251
- kind: action
- action: reconcile
- params: []
- - name: remove_vdc
- id: 193
- kind: subresource
- action: remove
- subresource: vdc
- params:
- - id: 620
- code: vdcName
- data_type: string
- required: true
- sort: 10
diff --git a/dev/resources_yaml/2_template.yaml b/dev/resources_yaml/2_template.yaml
deleted file mode 100644
index 013b4a6..0000000
--- a/dev/resources_yaml/2_template.yaml
+++ /dev/null
@@ -1,222 +0,0 @@
-name: template
-service_id: 2
-service_display_name: Темплейт k8s
-service_short_name: template
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 74
- kind: instance
- action: create
- params:
- - id: 813
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 173
- code: memory
- data_type: integer > 0
- required: true
- default: "128"
- is_modifiable: false
- - id: 174
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 172
- code: cpu
- data_type: integer > 0
- required: true
- default: "100"
- is_modifiable: false
- - id: 175
- code: disk
- data_type: integer > 0
- required: true
- default: "5"
- is_modifiable: false
- - id: 814
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 176
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- is_modifiable: false
- - id: 815
- code: accessConfiguration
- data_type: map-fixed
- required: true
- is_modifiable: true
- sub_params:
- - id: 177
- code: type
- data_type: string
- required: true
- default: ingress
- value_list:
- - ingress
- - service
- is_modifiable: false
- - id: 178
- code: domain
- data_type: string
- required: true
- default: abracadabra-l9gtqv1m
- regex: (?=^.{1,63}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- is_modifiable: false
- - id: 179
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 180
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- is_modifiable: false
- - id: 181
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 182
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- is_modifiable: false
- - name: delete
- id: 75
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 76
- kind: instance
- action: modify
- params:
- - id: 816
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 184
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 186
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 183
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 185
- code: disk
- data_type: integer >= 0
- required: true
- default: ""
- is_modifiable: false
- - id: 817
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 190
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 192
- code: slaveAccessList
- data_type: json
- required: true
- default: ""
- is_modifiable: false
- - id: 187
- code: type
- data_type: string
- required: true
- default: ""
- value_list:
- - ingress
- - service
- is_modifiable: false
- - id: 188
- code: domain
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 189
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 191
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- is_modifiable: false
- - name: reconcile
- id: 298
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 98
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 97
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/50_nextcloud.yaml b/dev/resources_yaml/50_nextcloud.yaml
deleted file mode 100644
index 0934ef6..0000000
--- a/dev/resources_yaml/50_nextcloud.yaml
+++ /dev/null
@@ -1,485 +0,0 @@
-name: nextcloud
-service_id: 50
-service_display_name: Nextcloud
-service_short_name: nextcloud
-service_man: 'Ресурсная платформа: k8s. Автоматизация: helm chart'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 16
- kind: instance
- action: create
- man: Для установки необходимо:
- ресурсная платформа, где разворачивается Nextcloud, обязана совпадать с ресурсными платформами, где развёрнут Redis и PostgreSQL
- params:
- - id: 1055
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 494
- code: redisEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 495
- code: psqlUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить PostgreSQL из Личного кабинета`
- is_modifiable: false
- - id: 496
- code: redisUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить Redis из Личного кабинета`
- is_modifiable: false
- - id: 492
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 493
- code: psqlEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 1056
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 497
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- value_list:
- - "1000"
- - "2000"
- - "3000"
- - "4000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 498
- code: memory
- data_type: integer > 0
- required: true
- default: "1024"
- value_list:
- - "1024"
- - "2048"
- - "3072"
- - "4096"
- - "5120"
- - "6144"
- - "7168"
- - "8192"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 499
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "2"
- is_modifiable: false
- - id: 500
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
На данном диске хранятся данные Nextcloud
- is_modifiable: false
- - id: 1057
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 501
- code: domain
- data_type: string
- required: true
- default: nextcloud-vbxjicr2
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1058
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 502
- code: version
- data_type: string
- required: true
- default: 33.0.4
- value_list:
- - 33.0.4
- is_modifiable: false
- - id: 503
- code: documentServer
- data_type: string
- required: true
- default: collabora
- value_list:
- - collabora
- man: Выбор сервера документов (onlyoffice)/(collabora). onlyoffice пока не доступен
Размер пода collabora:
1.8 ядра. 2Gi ОЗУ
- is_modifiable: false
- - id: 549
- code: logLevel
- data_type: string
- required: true
- default: INFO
- value_list:
- - DEBUG
- - INFO
- - WARN
- - ERROR
- - FATAL
- - NONE
- man: Включает отображение логов самого nextcloud
Логи уходят в /dev/stdout контейнера
`NONE` отключает логирование
- is_modifiable: false
- - name: create_backup
- id: 404
- kind: subresource
- action: create
- subresource: backup
- man: Перед запуском обязательно надо перевести экземпляр Nextcloud в статус 'suspended'
- params:
- - id: 1077
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 578
- code: veleroUid
- data_type: string
- required: true
- default: ""
- man: Предварительно необходимо создать инстанс услуги `Velero`
Из этого инстанса будут взяты точки восстановления
Если восстановление производится на другую ресурсную платформу, важно чтобы предварительно все компоненты связующие были либо перенесены, либо были доступны снаружи
- is_modifiable: false
- - name: delete
- id: 17
- kind: instance
- action: delete
- man: DEV-Ветка удаления Nextcloud
- params: []
- - name: modify
- id: 67
- kind: instance
- action: modify
- params:
- - id: 1059
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 506
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "2"
- is_modifiable: false
- - id: 507
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
На данном диске хранятся данные Nextcloud
- is_modifiable: false
- - id: 504
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1000"
- - "2000"
- - "3000"
- - "4000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 505
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1024"
- - "2048"
- - "3072"
- - "4096"
- - "5120"
- - "6144"
- - "7168"
- - "8192"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 1060
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 508
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - 33.0.4
- is_modifiable: false
- - id: 509
- code: documentServer
- data_type: string
- required: true
- default: ""
- value_list:
- - collabora
- man: Выбор сервера документов (onlyoffice)/(collabora). onlyoffice пока не доступен
Размер пода collabora:
1.8 ядра. 2Gi ОЗУ
- is_modifiable: false
- - id: 550
- code: logLevel
- data_type: string
- required: true
- default: ""
- value_list:
- - DEBUG
- - INFO
- - WARN
- - ERROR
- - FATAL
- - NONE
- man: Включает отображение логов самого nextcloud
Логи уходят в /dev/stdout контейнера
`NONE` отключает логирование
- is_modifiable: false
- - name: reconcile
- id: 390
- kind: action
- action: reconcile
- params: []
- - name: recovery
- id: 406
- kind: action
- action: recovery
- params:
- - id: 1078
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 556
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 570
- code: veleroUid
- data_type: string
- required: true
- default: ""
- man: Из этого инстанса будут взяты точки восстановления
Если восстановление производится на другую ресурсную платформу, важно чтобы предварительно все компоненты связующие были либо перенесены, либо были доступны снаружи
- is_modifiable: false
- - id: 559
- code: recoveryPoint
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 557
- code: psqlEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 558
- code: redisEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 560
- code: psqlUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить PostgreSQL из Личного кабинета`
Если откат производится на ту же версию Nextcloud, в теории возможно развернуться в существующую базу
Предпочтительно создать отдельный инстанс PostgreSQL, который был восстановлен также через Recovery
- is_modifiable: false
- - id: 561
- code: redisUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить Redis из Личного кабинета`
- is_modifiable: false
- - id: 1079
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 564
- code: replicas
- data_type: integer > 0
- required: true
- default: 1,2
- is_modifiable: false
- - id: 565
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
На данном диске хранятся данные Nextcloud
- is_modifiable: false
- - id: 562
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1000"
- - "2000"
- - "3000"
- - "4000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 563
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1024"
- - "2048"
- - "3072"
- - "4096"
- - "5120"
- - "6144"
- - "7168"
- - "8192"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 1080
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 566
- code: domain
- data_type: string
- required: true
- default: nextcloud-bcdguda1
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1081
- code: appConfiguration
- data_type: map-fixed
- required: true
- man: Версия Nextcloud будет взята из бэкапа
- sort: 40
- sub_params:
- - id: 568
- code: logLevel
- data_type: string
- required: true
- default: NONE
- value_list:
- - DEBUG
- - INFO
- - WARN
- - ERROR
- - FATAL
- - NONE
- man: Включает отображение логов самого nextcloud
Логи уходят в /dev/stdout контейнера
`NONE` отключает логирование
- is_modifiable: false
- - id: 569
- code: version
- data_type: string
- required: false
- default: ""
- man: Версия Nextcloud будет исправлена на ту версию, которая указана в бэкапе
- is_modifiable: false
- - id: 567
- code: documentServer
- data_type: string
- required: true
- default: collabora
- value_list:
- - collabora
- man: Выбор сервера документов (onlyoffice)/(collabora). onlyoffice пока не доступен
Размер пода collabora:
1.8 ядра. 2Gi ОЗУ
- is_modifiable: false
- - name: restart
- id: 66
- kind: action
- action: restart
- params: []
- - name: resume
- id: 129
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 128
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/81_superset.yaml b/dev/resources_yaml/81_superset.yaml
deleted file mode 100644
index f5b8020..0000000
--- a/dev/resources_yaml/81_superset.yaml
+++ /dev/null
@@ -1,107 +0,0 @@
-name: superset
-service_id: 81
-service_display_name: Apache Superset
-service_short_name: superset
-service_man: 'Apache Superset как сервис.
Ресурсная платформа: k8s.
Автоматизация: k8s operator.
Авторизация: 2FA keycloak (для доменного логина @mgmt.nubes.ru)'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 12
- kind: instance
- action: create
- man: DEV-Ветка сборки Superset
- params:
- - id: 14
- code: domain
- data_type: string
- required: true
- default: superset-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - id: 20
- code: emails
- data_type: string
- required: true
- default: testuser1
- descr: Учётная запись, которой будут выданы админские права. В формате email [ну не совсем. Для доменных учетных записей - без доменного суффикса]. Обязана находиться в Keycloak. Можно передавать несколько через пробел
- man: Учётная запись, которой будут выданы админские права. В формате email [ну не совсем. Для доменных учетных записей - без доменного суффикса]. Обязана находиться в Keycloak. Можно передавать несколько через пробел
- sort: 70
- - id: 96
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 4000
- minvalue: 100
- descr: Квота ядра пода (Указывается в mili). 1000 Mili = 1 ядро
- man: Квота ядра пода (Указывается в mili). 1000 Mili = 1 ядро
- sort: 30
- - id: 97
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 128
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 40
- - id: 98
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 50
- - id: 109
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 20
- - id: 227
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- sort: 60
- - name: delete
- id: 13
- kind: instance
- action: delete
- man: DEV-Ветка удаления Superset
- params: []
diff --git a/dev/resources_yaml/82_harbor.yaml b/dev/resources_yaml/82_harbor.yaml
deleted file mode 100644
index 45e6d7d..0000000
--- a/dev/resources_yaml/82_harbor.yaml
+++ /dev/null
@@ -1,129 +0,0 @@
-name: harbor
-service_id: 82
-service_display_name: Container Registry
-service_short_name: harbor
-service_man: 'Расширенный реестр для управления Docker-образами с enterprise-функциями безопасности, репликации и контроля доступа.
Container Registry позволяет хранить, развертывать и управлять Docker-образами контейнеров в инфраструктуре NGcloud.
Сервис можно использовать в процессе разработки контейнеров. Например, вы можете настроить систему автоматизации на работу с реестром в Container Registry в рамках процесса непрерывной интеграции. Контейнеры идеально подходят для запуска небольших, независимых и легко изменяемых сервисов.
Чтобы начать работу, создайте реестр и загрузите в него Docker-образ
Авторизация: keycloak'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 14
- kind: instance
- action: create
- man: DEV-Ветка сборки Harbor
- params:
- - id: 16
- code: domain
- data_type: string
- required: true
- default: harbor-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 20
- - id: 110
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 30
- - id: 228
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "1000"
- maxvalue: 4000
- minvalue: 500
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- sort: 40
- is_modifiable: true
- - id: 229
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "1024"
- maxvalue: 8192
- minvalue: 512
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 50
- is_modifiable: true
- - id: 230
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество узлов в сети
- sort: 60
- is_modifiable: true
- - id: 231
- code: s3Uid
- data_type: uuid
- required: true
- ref_svc_id: 12
- descr: UUID экземпляра услуги S3
- man: UUID экземпляра услуги S3
- sort: 10
- - name: delete
- id: 15
- kind: instance
- action: delete
- man: DEV-Ветка удаления Harbor
- params: []
- - name: modify
- id: 270
- kind: instance
- action: modify
- params:
- - id: 822
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- - id: 823
- code: resourceCPU
- data_type: integer > 0
- required: false
- maxvalue: 4000
- minvalue: 500
- - id: 824
- code: resourceMemory
- data_type: integer > 0
- required: true
- maxvalue: 8192
- minvalue: 512
- - name: reconcile
- id: 405
- kind: action
- action: reconcile
- params: []
diff --git a/dev/resources_yaml/86_k8s_velero.yaml b/dev/resources_yaml/86_k8s_velero.yaml
deleted file mode 100644
index 4f81e50..0000000
--- a/dev/resources_yaml/86_k8s_velero.yaml
+++ /dev/null
@@ -1,197 +0,0 @@
-name: k8s_velero
-service_id: 86
-service_display_name: Velero
-service_short_name: k8sVelero
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 332
- kind: instance
- action: create
- params:
- - id: 962
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 334
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 336
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 337
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "2"
- - "3"
- is_modifiable: false
- - id: 963
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 338
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- is_modifiable: false
- - id: 964
- code: nodeAgentConfiguration
- data_type: map-fixed
- required: true
- man: Реплик выставляется автоматически столько, сколько Worker-узлов в кластере
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 551
- code: cpu
- data_type: integer > 0
- required: true
- default: "2000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 552
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 1076
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 555
- code: s3BucketUid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3-Бакета обязателен
Учётная запись будет создана автоматически, если её нету
- is_modifiable: false
- - name: delete
- id: 331
- kind: instance
- action: delete
- params:
- - id: 1082
- code: deleteS3Bucket
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- sort: 10
- - name: modify
- id: 334
- kind: instance
- action: modify
- params:
- - id: 965
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 347
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 348
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "2"
- - "3"
- is_modifiable: false
- - id: 345
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 966
- code: nodeAgentConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 553
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 554
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - name: reconcile
- id: 336
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 335
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 333
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/89_flask.yaml b/dev/resources_yaml/89_flask.yaml
deleted file mode 100644
index 7fbc4a7..0000000
--- a/dev/resources_yaml/89_flask.yaml
+++ /dev/null
@@ -1,240 +0,0 @@
-name: flask
-service_id: 89
-service_display_name: Web-сервер с фреймворком Flask
-service_short_name: flask
-service_man: '# Инструкция по развертыванию Web-сервер с фреймворком Flask через платформу
## 1. Общая информация
Сервис **Web-сервер с фреймворком Flask** предназначен для развертывания веб-приложений на базе Flask.
### Доступные операции
create — включить сервис, развернуть веб-приложение с указанными параметрами.
delete — удалить сервис, только после suspend.
modify — изменить настройки сервиса и переразвернуть.
suspend — выключить веб-приложение, остановить обслуживание.
resume — включить веб-приложение после suspend.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Имя домена
Описание: доменное имя для доступа к веб-приложению. Если указан FQDN, происходит проверка DNS на валидность А-записи. А-запись должна указывать на балансировщик ресурсной платформы. Если указано имя в рамках одного октета, оно будет добавлено в публичную DNS-зону.
Пример значения: строка, допустимые FQDN или имя в одном октете. Пример: example.com или myapp.
### Платформа для развертывания
Описание: кластер Kubernetes, в котором будет развернуто приложение.
Пример значения: идентификатор кластера Kubernetes.
### Квота ядра пода
Описание: количество CPU, выделяемое на под, в Milicores.
Пример значения: целое число, например 500 для 0.5 ядра.
### Квота памяти пода
Описание: количество памяти, выделяемое на под, в Megabytes.
Пример значения: целое число, например 512 для 512 MB.
### Кол-во реплик пода
Описание: количество инстансов пода для масштабирования.
Пример значения: целое число, шт, например 2.
### URL Проекта (gitpath)
Описание: полный HTTPS путь до проекта в Git-репозитории.
Пример значения: URL в формате https://github.com/myuser/myproject.git. Доступ к репозиторию должен быть публичным.
### URL HealthCheck
Описание: путь для проверки здоровья приложения внутри пода.
Пример значения: строка, путь, например /api/v1/health.
### Переменные окружения пода
Описание: структура данных, которая будет передана как переменные окружения в под.
Пример значения: ключ-значение, например {"ENV": "production"}.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Квота ядра пода: 300m (0.3 ядра)
- Квота памяти пода: 256 MB
- Кол-во реплик пода: 1
### Промышленное окружение
- Квота ядра пода: от 1000m (1 ядро) в зависимости от нагрузки
- Квота памяти пода: от 1024 MB (1 GB) с учетом потребностей приложения
- Кол-во реплик пода: от 2 для обеспечения отказоустойчивости
---
## 4. Выходные параметры
Операция create не возвращает явных выходных параметров. Успешное выполнение операции приводит к развертыванию сервиса, доступного по указанному домену.
---
## 5. Дополнительная информация
- В корне проекта должен находиться файл requirements.txt со списком зависимостей Python.
- Исходный код веб-приложения должен располагаться в директории site.
- Запуск веб-сервера осуществляется командой python app.py.
- Используется версия Python: python:3.12-slim.
- Git-репозиторий должен быть публично доступен для платформы.
- Операция delete возможна только после suspend.
- Операция modify приводит к переразвертыванию с новыми параметрами.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 376
- kind: instance
- action: create
- params:
- - id: 1037
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 460
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1038
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 461
- code: cpu
- data_type: integer > 0
- required: true
- default: "200"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 462
- code: memory
- data_type: integer > 0
- required: true
- default: "256"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 463
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1039
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 464
- code: domain
- data_type: string
- required: true
- default: flask-4brtjmwm
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1040
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 466
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 467
- code: version
- data_type: string
- required: true
- default: "3.12"
- value_list:
- - "3.12"
- is_modifiable: false
- - id: 465
- code: gitPath
- data_type: string
- required: true
- default: https://github.com/Foxyhhd/Baldurs-Gate-test.git
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 1041
- code: jsonEnv
- data_type: map
- required: false
- default: '{}'
- sort: 50
- is_modifiable: true
- - name: delete
- id: 379
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 375
- kind: instance
- action: modify
- params:
- - id: 1042
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 468
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 469
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 470
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1043
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 473
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "3.12"
- is_modifiable: false
- - id: 471
- code: gitPath
- data_type: string
- required: true
- default: ""
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 472
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1044
- code: jsonEnv
- data_type: map
- required: false
- sort: 30
- - name: reconcile
- id: 381
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 380
- kind: action
- action: redeploy
- params:
- - id: 1045
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 474
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - name: resume
- id: 378
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 377
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/90_postgres.yaml b/dev/resources_yaml/90_postgres.yaml
deleted file mode 100644
index eb25a33..0000000
--- a/dev/resources_yaml/90_postgres.yaml
+++ /dev/null
@@ -1,930 +0,0 @@
-name: postgres
-service_id: 90
-service_display_name: PostgreSQL
-service_short_name: postgres
-service_man: '# Инструкция по развертыванию PostgreSQL через платформу
---
## 1. Общая информация
PostgreSQL — это надёжная объектно-реляционная СУБД с открытым исходным кодом, поддерживающая расширенный набор функций, транзакции и хранение сложных типов данных. Развёртывание полностью автоматизировано платформой на базе Zalando Postgres Operator с использованием Kubernetes.
## Доступные операции
- **create** — Создание кластера
- **delete** — Удаление кластера
- **modify** — Модификация кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера
- **restart** — Перезапуск кластера
- **recovery** — Восстановление из резервной копии
- **create_user** — Создание пользователя
- **delete_user** — Удаление пользователя
- **create_database** — Создание базы данных
- **delete_database** — Удаление базы данных
---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса PostgreSQL:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество инстансов (реплик) в кластере PostgreSQL. Пример: `2` (master + slave).
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`
* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных в гигабайтах. Пример: `20`
* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master. Пример: `true` или `false`
* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
* **Выделяет внешний IP для доступа к slave:**
Флаг для выделения внешнего IP для slave (реплики чтения). Работает, если slave присутствует в кластере.
* **Имя ipSpace для публикации внешнего IP slave:**
Если включен параметр для slave, то поле необходимо заполнить.
* **UUID экземпляра услуги S3:**
UUID экземпляра S3 для хранения резервных копий.
* **Версия PostgreSQL:**
Версия PostgreSQL для развертывания. Пример: `16`
* **Расписание бэкапов (ext_BACKUP_SCHEDULE):**
Необязательный. Cron-выражение для времени запуска бэкапов. По умолчанию: `0 0 * * *` (ежедневно в полночь).
* **Количество сохраняемых бэкапов (ext_BACKUP_NUM_TO_RETAIN):**
Необязательный. Количество сохраняемых бэкапов. По умолчанию: `7`
* **PgPooler (master / slave):**
Флаги включения PgBouncer для подключений на запись и чтение. При включении создаётся отдельный под.
* **Разрешить подключение без SSL (allowNoSSL):**
По умолчанию подключение с sslmode=require. При `true` разрешается подключение без SSL.
* **Автоскейлинг PV (autoScale):**
Включает автоскейлинг тома. Требует настройки autoScalePercentage, autoScaleTechWindow, autoScaleQuotaGb.
* **Дополнительные параметры PostgreSQL (jsonParameters):**
JSON с переменными конфигурации PostgreSQL. Документация: https://www.postgresql.org/docs/current/runtime-config.html
---
## 3. Выходные параметры
После успешного развертывания ресурса PostgreSQL платформа возвращает ряд параметров.
#### externalConnect
Внешние эндпоинты для подключения к кластеру:
- **master** — для операций записи (host: `write.${namespace}`, port: 5432)
- **slave** — для операций чтения (host: `read.${namespace}`, port: 5432)
Пример ответа платформы:
```json
{
"slave": {
"ip": "",
"fqdn": "",
"uuid": "",
"isExternal": false
},
"master": {
"ip": "<ip>",
"fqdn": "write.<namespace>.<cluster-domain>",
"uuid": "<uuid>",
"isExternal": false
}
}
```
Поля: `ip` — внешний IP; `fqdn` — полное имя хоста; `uuid` — идентификатор; `isExternal` — признак внешнего доступа.
#### internalConnect
Внутренние эндпоинты (FQDN) для подключения из других сервисов внутри той же сети Kubernetes.
Пример ответа платформы:
```json
{
"slave": "",
"master": {
"slave": "",
"master": {
"slave": "",
"master": "postgresqlk8s-master.<namespace>.svc.cluster.local"
}
}
}
```
Для подключения используйте значение `master.master.master` (host для записи) или соответствующее значение slave (host для чтения).
Для подключения используется порт **5432**.
---
## 4. Управление пользователями
### create_user — Создание пользователя
* **Имя пользователя (username):**
Имя создаваемого пользователя. Используется для подключения к базе и настройки прав.
Пример: `myapp_user`
* **Роль (role):**
Тип роли пользователя. Допустимые значения:
- `app_user` — базовые права для DML-операций (SELECT, INSERT, UPDATE, DELETE)
- `ddl_user` — расширенные права: createdb, createrole (управление базами и ролями)
Защищённые имена, которые нельзя использовать: `admin`, `postgres`, `standby`.
### delete_user — Удаление пользователя
* **Имя пользователя (username):**
Имя удаляемого пользователя. Пример: `myapp_user`
Пользователя нельзя удалить, если он является владельцем базы данных. Сначала удалите или передайте владение базами данных другому пользователю.
---
## 5. Управление базами данных
### create_database — Создание базы данных
* **Имя базы данных (dbName):**
Название создаваемой базы данных. Пример: `myapp_db`
* **Владелец базы данных (dbOwner):**
Имя пользователя-владельца базы. Должен существовать в кластере (создан через create_user). Пример: `myapp_user`
### delete_database — Удаление базы данных
* **Имя базы данных (dbName):**
Название удаляемой базы данных. Пример: `myapp_db`
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 19
- kind: instance
- action: create
- man: руководство
- params:
- - id: 788
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 106
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 107
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 104
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 105
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 789
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 108
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 790
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 109
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 110
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 111
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 112
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 791
- code: postgresConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 113
- code: version
- data_type: string
- required: true
- default: "17"
- value_list:
- - "17"
- - "16"
- is_modifiable: false
- - id: 116
- code: sslRequired
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: По умолчанию подключение обязательное (sslmode=require)
- is_modifiable: false
- - id: 114
- code: poolerMaster
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на запись). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 115
- code: poolerSlave
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на чтение). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 792
- code: postgresConf
- data_type: array-map-fixed
- required: false
- sort: 50
- is_modifiable: true
- sub_params:
- - id: 118
- code: paramName
- data_type: string
- required: true
- default: ""
- value_list:
- - log_connections
- - log_disconnections
- is_modifiable: false
- - id: 117
- code: paramValue
- data_type: string
- required: true
- default: ""
- man: Как правильно вводить значения описано здесь (https://www.postgresql.org/docs/current/runtime-config.html)
- is_modifiable: false
- - id: 793
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- is_modifiable: true
- sub_params:
- - id: 119
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 120
- code: retain
- data_type: integer > 0
- required: true
- default: "7"
- is_modifiable: false
- - id: 121
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 794
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- is_modifiable: true
- sub_params:
- - id: 122
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 123
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 124
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 125
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 1094
- code: mtlsConfiguration
- data_type: map-fixed
- required: true
- default: '{}'
- sort: 80
- is_modifiable: true
- sub_params:
- - id: 609
- code: type
- data_type: string
- required: true
- default: "off"
- value_list:
- - "off"
- - manual
- - auto
- man: '`off` - Настройка MTLS производиться не будет
`manual` - После создания кластера в полях данных будет запрос на создание сертификата. **Вам необходимо будет выписать сертификат через вашу CA** и уже после включить через операцию **modify** режим MTLS
`auto` - Сертификаты будут созданы через Cert-Manager
Режимы **auto** и **manual** требует включить настройку `Включить sslMode` - **true**
MTLS в режиме **auto** будет работать сразу, в режиме **manual** только после того как будет предоставлен **CA** и **Сертификат сервера**'
- is_modifiable: false
- - id: 610
- code: durationCA
- data_type: integer > 0
- required: true
- default: "175200"
- man: Указывается в **часах**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - id: 611
- code: durationServer
- data_type: integer > 0
- required: true
- default: "87600"
- man: Указывается в **часах**
Не может быть больше чем время жизни СА
Обновляется **раз в год**, если выставлено значение **более 2 лет**
Обновляется **раз в пол года**, если выставлено значение **менее 2 лет**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - id: 612
- code: certCA
- data_type: string
- required: false
- default: ""
- is_modifiable: false
- - id: 613
- code: certServer
- data_type: string
- required: false
- default: ""
- is_modifiable: false
- - name: create_backup
- id: 264
- kind: subresource
- action: create
- subresource: backup
- params: []
- - name: create_database
- id: 245
- kind: subresource
- action: create
- subresource: database
- params:
- - id: 741
- code: dbName
- data_type: string
- required: true
- regex: ^[A-Za-z0-9]+$
- - id: 742
- code: dbOwner
- data_type: string
- required: true
- - name: create_user
- id: 241
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 733
- code: username
- data_type: string
- required: true
- regex: ^[A-Za-z0-9]+$
- maxlength: 62
- minlength: 2
- sort: 10
- - id: 740
- code: role
- data_type: string
- required: true
- value_list:
- - app_user
- - ddl_user
- descr: Выбрать роль из списка
- man: '`app_user` — стандартный пользователь с базовым набором прав
`ddl_user` — пользователь с расширенными правами, включая управление ролями и базами данных'
- sort: 20
- - id: 1096
- code: mtlsAccess
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Подключение пользователя без ввода паролей
Политика применяется **ко всем базам** внутри Postgresql
RBAC на базы настраивать вручную
- sort: 30
- - name: delete
- id: 20
- kind: instance
- action: delete
- params:
- - id: 457
- code: deleteS3Bucket
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- descr: Также удалить технический S3 Bucket с бэкапами?
- sort: 10
- - name: delete_database
- id: 246
- kind: subresource
- action: delete
- subresource: database
- params:
- - id: 743
- code: dbName
- data_type: string
- required: true
- - name: delete_user
- id: 244
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 739
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- - name: modify
- id: 48
- kind: instance
- action: modify
- params:
- - id: 795
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 126
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 127
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 128
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 129
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 796
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 130
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 131
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 132
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 133
- code: slaveAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 797
- code: postgresConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 134
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "17"
- - "16"
- is_modifiable: false
- - id: 135
- code: sslRequired
- data_type: boolean
- required: true
- default: false,true
- man: По умолчанию подключение обязательное (sslmode=require)
- is_modifiable: false
- - id: 136
- code: poolerMaster
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на запись). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 137
- code: poolerSlave
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на чтение). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 798
- code: postgresConf
- data_type: array-map-fixed
- required: false
- sort: 40
- sub_params:
- - id: 271
- code: paramName
- data_type: string
- required: true
- default: ""
- value_list:
- - log_connections
- - log_disconnections
- is_modifiable: false
- - id: 272
- code: paramValue
- data_type: string
- required: true
- default: ""
- man: Как правильно вводить значения описано здесь (https://www.postgresql.org/docs/current/runtime-config.html)
- is_modifiable: false
- - id: 799
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- sub_params:
- - id: 139
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 193
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 138
- code: retain
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 800
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- sub_params:
- - id: 140
- code: enabled
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 141
- code: schedule
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 142
- code: quota
- data_type: integer > 0
- required: true
- default: ""
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 143
- code: percent
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 1095
- code: mtlsConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- sub_params:
- - id: 617
- code: certCA
- data_type: string
- required: false
- default: ""
- man: Предварительно сертификат можно получить командой
`cat ca.crt | base64 -w0`
- is_modifiable: false
- - id: 618
- code: certServer
- data_type: string
- required: false
- default: ""
- man: Предварительно сертификат можно получить командой
`cat server.crt | base64 -w0`
- is_modifiable: false
- - id: 634
- code: refreshCert
- data_type: boolean
- required: false
- default: "false"
- value_list:
- - "false"
- - "true"
- man: На случай если его нужно обновить/заменить
- is_modifiable: false
- - id: 614
- code: type
- data_type: string
- required: true
- default: ""
- value_list:
- - "off"
- - manual
- - auto
- man: '`off` - Настройка MTLS производиться не будет
`manual` - После создания кластера в полях данных будет запрос на создание сертификата. **Вам необходимо будет выписать сертификат через вашу CA** и уже после включить через операцию **modify** режим MTLS
`auto` - Сертификаты будут созданы через Cert-Manager
Режимы **auto** и **manual** требует включить настройку `Включить sslMode` - **true**
MTLS в режиме **auto** будет работать сразу, в режиме **manual** только после того как будет предоставлен **CA** и **Сертификат сервера**'
- is_modifiable: false
- - id: 615
- code: durationCA
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в **часах**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - id: 616
- code: durationServer
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в **часах**
Не может быть больше чем время жизни СА
Обновляется **раз в год**, если выставлено значение **более 2 лет**
Обновляется **раз в пол года**, если выставлено значение **менее 2 лет**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - name: reconcile
- id: 263
- kind: action
- action: reconcile
- params: []
- - name: recovery
- id: 47
- kind: action
- action: recovery
- params:
- - id: 801
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 144
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 166
- code: recoveryPoint
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 802
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 148
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 145
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 146
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 147
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 803
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 149
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 150
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 151
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 152
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 804
- code: postgresConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 153
- code: version
- data_type: string
- required: true
- default: "17"
- value_list:
- - "17"
- - "16"
- is_modifiable: false
- - id: 154
- code: sslRequired
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: По умолчанию подключение обязательное (sslmode=require)
- is_modifiable: false
- - id: 155
- code: poolerMaster
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на запись). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 156
- code: poolerSlave
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на чтение). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 805
- code: postgresConf
- data_type: array-map-fixed
- required: false
- sort: 50
- sub_params:
- - id: 475
- code: paramName
- data_type: string
- required: true
- default: ""
- value_list:
- - log_connections
- - log_disconnections
- is_modifiable: false
- - id: 476
- code: paramValue
- data_type: string
- required: true
- default: ""
- man: Как правильно вводить значения описано здесь (https://www.postgresql.org/docs/current/runtime-config.html)
- is_modifiable: false
- - id: 806
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- sub_params:
- - id: 159
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 160
- code: retain
- data_type: integer > 0
- required: true
- default: "7"
- is_modifiable: false
- - id: 161
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 807
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- sub_params:
- - id: 163
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 164
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 165
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 162
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - name: restart
- id: 54
- kind: action
- action: restart
- man: ВНИМАНИЕ - Рестарт предполагает УДАЛЕНИЕ подов.
Может быть полная поломка. Крайне осторожно запускать при работе
- params: []
- - name: resume
- id: 114
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 115
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/91_redis.yaml b/dev/resources_yaml/91_redis.yaml
deleted file mode 100644
index 3927a34..0000000
--- a/dev/resources_yaml/91_redis.yaml
+++ /dev/null
@@ -1,220 +0,0 @@
-name: redis
-service_id: 91
-service_display_name: Redis
-service_short_name: redis
-service_man: 'Redis кластер. Под кеши.
Ресурсная платформа: k8s.
Автоматизация: k8s operator
port 6379'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 21
- kind: instance
- action: create
- params:
- - id: 1061
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 510
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1062
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 512
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 513
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 514
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 511
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 1063
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 515
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 516
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 517
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 518
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: delete
- id: 22
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 394
- kind: instance
- action: modify
- params:
- - id: 1064
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 519
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 520
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 521
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 522
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 1065
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 524
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 525
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 526
- code: slaveAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 523
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - name: reconcile
- id: 391
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 393
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 392
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/92_mongodb.yaml b/dev/resources_yaml/92_mongodb.yaml
deleted file mode 100644
index 1e887bf..0000000
--- a/dev/resources_yaml/92_mongodb.yaml
+++ /dev/null
@@ -1,239 +0,0 @@
-name: mongodb
-service_id: 92
-service_display_name: MongoDB
-service_short_name: mongodb
-service_man: '# Инструкция по развертыванию MongoDB через платформу
## 1. Общая информация
MongoDB — документоориентированная распределённая база данных, обеспечивающая высокую доступность, горизонтальное масштабирование и гибкую модель хранения.
### Доступные операции с кластером
* **create** — создание базы
* **delete** — удаление базы данных
* **suspend** — остановка базы данных
* **resume** — запуск базы данных
* **modify** — изменение базы данных
### Доступные операции с пользователями
* **create_user** — создание пользователя
* **modify_user** — модификация пользователя
* **delete_user** — удаление пользователя
---
## 2. Параметры развертывания базы данных
Эти параметры необходимо указать при создании базы данных.
### Платформа для развертывания
Среда, в которой будет развернут кластер. Выбирается из предложенного списка.
### Количество узлов
Количество реплик в кластере MongoDB.
Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.
> **Примечание:** уменьшение количества узлов после создания кластера не рекомендуется.
### Квота памяти пода (MB)
Объём памяти для одного пода в мегабайтах.
Пример: `2048`
### Квота CPU пода (mCPU)
CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: `1000`
### Размер диска для базы данных (GB)
Объём диска для хранения данных в гигабайтах.
Пример: `20`
### Имя ipSpace для публикации внешнего IP
Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите `no-needed`, если внешний адрес не требуется.
Пример: `internet-no-antiddos-v1`
### Список разрешённых IP-адресов
Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: `["10.0.0.0/24", "192.168.1.10/32"]`
---
## 3. Параметры модификации базы данных
Все параметры, которые вы указываете при модификации, являются необязательными — система автоматически подставит ранее сохранённые значения, и при необходимости вы можете изменить их на нужные.
### Количество узлов
Количество реплик в кластере MongoDB.
Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.
> **Примечание:** уменьшение количества узлов после создания кластера не рекомендуется.
### Квота памяти пода (MB)
Объём памяти для одного пода в мегабайтах.
Пример: `2048`
### Квота CPU пода (mCPU)
CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: `1000`
### Размер диска для базы данных (GB)
Объём диска для хранения данных указывается в гигабайтах. Его можно увеличить при необходимости, однако уменьшить уже выделенный размер невозможно.
Пример: `20`
### Имя ipSpace для публикации внешнего IP
Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите `no-needed`, если внешний адрес не требуется.
Пример: `internet-no-antiddos-v1`
### Список разрешённых IP-адресов
Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: `["10.0.0.0/24", "192.168.1.10/32"]`
---
## 3. Параметры создания пользователя
### Имя пользователя
Указывается имя пользователя (любой регистр).
Пример: `readApp`
### Имя базы данных
Название базы, в которой будет создан пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: `Apps_9392`
### Имя роли
* **read** — доступ только на чтение
* **readWrite** — чтение и изменение данных
* **dbOwner** — полный контроль над базой данных
---
## 4. Параметры модификации пользователя
### Имя пользователя
Необходимо выбрать существующего пользователя.
Если список пуст, требуется предварительно создать пользователя.
### Имя базы данных
База данных, к которой относится пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: `Apps_9392`
### Имя роли
* **read**
* **readWrite**
* **dbOwner**
---
## 5. Параметры удаления пользователя
### Имя пользователя
Выберите пользователя из списка для удаления.
---
## 6. Выходные параметры
После успешного развертывания базы данных платформа возвращает ключевые параметры.
### internalConnect
Внутренний эндпоинт для подключения к кластеру из сервисов, работающих в той же сети.
Используется для внутренних интеграций и системных сервисов.
### externalConnect
Внешний FQDN для подключения к кластеру извне.
Порт подключения — **27017**.
---
## 7. Пример подключения
Перед подключением необходимо установить **mongosh**.
Команда подключения к базе данных:
```
mongosh "mongodb://<username>:<password>@<endpoint_db>:27017/<dbName>"
```
Где:
* `<username>` — имя пользователя
* `<password>` — пароль
* `<endpoint_db>` — internalConnect или externalConnect
* `<dbName>` — имя базы данных
## 8. Дополнительная информация
Сейчас соединение с базой работает без шифрования, и доступ к кластеру осуществляется только по логину и паролю.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 37
- kind: instance
- action: create
- params:
- - id: 1089
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 594
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- descr: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1090
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 597
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 598
- code: disk
- data_type: integer > 0
- required: true
- default: "5"
- man: Указывается в Gb
- is_modifiable: false
- - id: 595
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- is_modifiable: false
- - id: 596
- code: memory
- data_type: integer > 0
- required: true
- default: "1024"
- is_modifiable: false
- - id: 1091
- code: accessConfiguration
- data_type: map-fixed
- required: true
- is_modifiable: true
- sub_params:
- - id: 600
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 599
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - name: create_user
- id: 198
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 635
- code: username
- data_type: string
- required: true
- - id: 636
- code: dbName
- data_type: string
- required: true
- - id: 643
- code: role
- data_type: string
- required: true
- value_list:
- - dbOwner
- - read
- - readWrite
- - name: delete
- id: 190
- kind: instance
- action: delete
- params: []
- - name: delete_user
- id: 199
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 644
- code: username
- data_type: string
- required: true
- - name: modify
- id: 201
- kind: instance
- action: modify
- params:
- - id: 1092
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 604
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Gb
- is_modifiable: false
- - id: 601
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 602
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 603
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1093
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 605
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 606
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: modify_user
- id: 200
- kind: subresource
- action: modify
- subresource: user
- params:
- - id: 640
- code: username
- data_type: string
- required: true
- - id: 641
- code: dbName
- data_type: string
- required: true
- - id: 642
- code: role
- data_type: string
- required: true
- value_list:
- - dbOwner
- - read
- - readWrite
- - name: reconcile
- id: 409
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 196
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 194
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/93_rabbitmq.yaml b/dev/resources_yaml/93_rabbitmq.yaml
deleted file mode 100644
index 19d5ed8..0000000
--- a/dev/resources_yaml/93_rabbitmq.yaml
+++ /dev/null
@@ -1,186 +0,0 @@
-name: rabbitmq
-service_id: 93
-service_display_name: RabbitMQ
-service_short_name: rabbitmq
-service_man: '# Инструкция по развертыванию RabbitMQ через платформу
---
## 1. Общая информация
RabbitMQ — это брокер сообщений с открытым исходным кодом, который обеспечивает надёжную доставку сообщений между приложениями.
Позволяет надёжно передавать сообщения между сервисами и системами, интегрироваться с внешними решениями и использовать как внутренние, так и защищённые TLS-подключения. Развёртывание полностью автоматизировано платформой.
## Доступные операции
- **create** — Создание кластера
- **modify** — Изменение параметров кластера
- **delete** — Удаление кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера
---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса RabbitMQ:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество реплик в кластере RabbitMQ. При значении больше 1 создаётся кластер с репликацией для обеспечения высокой доступности.
Пример: `1` (single node) или `3` (кластер с репликацией)
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`
* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных RabbitMQ в гигабайтах. Пример: `50`
* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master-узлу. При включении создаётся Service типа LoadBalancer и настраивается VIP на порту 5672.
Пример: `true` или `false`
* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
---
## 3. Модификация кластера
Операция **modify** позволяет изменить параметры существующего кластера RabbitMQ.
**Изменяемые параметры:**
* **Квота (megabyte) памяти пода** — можно увеличить или уменьшить
* **Квота (millicore) ядра пода** — можно увеличить или уменьшить
* **Размер (gigabyte) диска для базы данных** — можно только увеличить (уменьшение не поддерживается)
* **Количество узлов в сети** — можно только увеличить (уменьшение не поддерживается)
* **Выделяет внешний IP для доступа к master** — можно включить или выключить
* **Имя ipSpace для публикации внешнего IP master** — можно изменить при включенном внешнем IP
**Ограничения:**
* Уменьшение размера диска не поддерживается
* Уменьшение количества реплик не поддерживается
---
## 4. Выходные параметры
После успешного развертывания ресурса RabbitMQ платформа возвращает ряд параметров в разделе "Поля состояния (сгенерированные значения)":
**clusterDomain**
Домен кластера Kubernetes, в котором развернут RabbitMQ.
Пример: `cluster.local`
**inernalConnect**
Внутренние эндпоинты для подключения к кластеру RabbitMQ из других сервисов, развернутых внутри той же сети.
Содержит:
* **master** — FQDN для подключения к кластеру. Пример: `rabbitmqk8s.{namespace}.svc.{clusterDomain}`
**externalConnect**
Внешние эндпоинты для подключения к кластеру RabbitMQ извне.
Содержит объекты с полями:
* **admin** — доступ к веб-интерфейсу управления:
* `fqdn` — полное доменное имя для веб-интерфейса. Пример: `admin.{namespace}.{domain}`
* `ip` — IP-адрес
* **master** — доступ к AMQP протоколу (если включен внешний IP):
* `fqdn` — полное доменное имя для AMQP. Пример: `write.{namespace}.{domain}`
* `ip` — IP-адрес
**monitoring**
Информация о дашбордах мониторинга:
* **allDashboards** — URL для доступа ко всем дашбордам Grafana
Для подключения используются следующие порты:
* **5672** — AMQP протокол (внутренний и внешний доступ, если включен внешний IP)
* **15672** — веб-интерфейс управления (доступен через Ingress по HTTPS)
**Учётные данные**
Данные для подключения к RabbitMQ доступны в разделе "Учётные данные":
* **adminUser** — имя пользователя администратора
* **adminPass** — пароль администратора
---
## 5. Примеры подключения через консоль (rabbitmqadmin)
### Работа с очередями через rabbitmqadmin
Для работы с RabbitMQ через консоль используется утилита `rabbitmqadmin`. Установите её или используйте образ с предустановленной утилитой.
Задайте переменные окружения с учётными данными:
```bash
export RABBITMQ_USERNAME=<adminUser>
export RABBITMQ_PASSWORD=<adminPass>
export RABBIT_HOST=<host>
```
Где:
* `<adminUser>` и `<adminPass>` — учётные данные из раздела "Учётные данные"
* `<host>` — адрес для подключения:
* Для внешнего подключения: `externalConnect.admin.fqdn` или `externalConnect.master.fqdn`
**Создание очереди:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
declare queue name=healthcheck durable=false
```
**Листинг очередей:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
list queues
```
**Отправка сообщения:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
publish exchange=amq.default routing_key=healthcheck payload="ping-$(date +%s)"
```
**Чтение сообщения:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
get queue=healthcheck ackmode=ack_requeue_false
```
---
## 6. Дополнительная информация
Для подключения к кластеру RabbitMQ используйте полученные эндпоинты из раздела "Поля состояния (сгенерированные значения)" и учётные данные из раздела "Учётные данные".
Веб-интерфейс управления доступен по адресу, указанному в параметре `externalConnect.admin.fqdn` через HTTPS.
Для внутреннего подключения используйте адрес из `inernalConnect.master` на порту 5672.
---'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 38
- kind: instance
- action: create
- params:
- - id: 1097
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 619
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- is_modifiable: false
- - id: 1098
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 620
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- is_modifiable: false
- - id: 621
- code: memory
- data_type: integer > 0
- required: true
- default: "1024"
- is_modifiable: false
- - id: 622
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 623
- code: disk
- data_type: integer > 0
- required: true
- default: "5"
- is_modifiable: false
- - id: 1099
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 624
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 625
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: delete
- id: 39
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 106
- kind: instance
- action: modify
- params:
- - id: 1100
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 629
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 626
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 627
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 628
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1101
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 630
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 631
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: reconcile
- id: 410
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 117
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 116
- kind: instance
- action: suspend
- man: Пока не работает из за того что RabbitmqCluster нельзя занулить
- params: []
diff --git a/dev/resources_yaml/94_lucee.yaml b/dev/resources_yaml/94_lucee.yaml
deleted file mode 100644
index 0f111fd..0000000
--- a/dev/resources_yaml/94_lucee.yaml
+++ /dev/null
@@ -1,248 +0,0 @@
-name: lucee
-service_id: 94
-service_display_name: Lucee
-service_short_name: lucee
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 49
- kind: instance
- action: create
- params:
- - id: 1019
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 430
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1020
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 431
- code: cpu
- data_type: integer > 0
- required: true
- default: "200"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 432
- code: memory
- data_type: integer > 0
- required: true
- default: "256"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 433
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1021
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 434
- code: domain
- data_type: string
- required: true
- default: lucee-pzpvwkuk
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1022
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 437
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 435
- code: version
- data_type: string
- required: true
- default: "6.0"
- value_list:
- - "5.4"
- - "6.0"
- is_modifiable: false
- - id: 436
- code: gitPath
- data_type: string
- required: true
- default: https://github.com/xahys/testlucee
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 1023
- code: jsonEnv
- data_type: map
- required: false
- default: '{}'
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 50
- is_modifiable: true
- - name: delete
- id: 50
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 55
- kind: instance
- action: modify
- params:
- - id: 1024
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 438
- code: cpu
- data_type: string
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 439
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 440
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1025
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 442
- code: gitPath
- data_type: string
- required: true
- default: ""
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 443
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 441
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "6.0"
- - "5.4"
- is_modifiable: false
- - id: 1026
- code: jsonEnv
- data_type: map
- required: false
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 30
- - name: reconcile
- id: 373
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 53
- kind: action
- action: redeploy
- params:
- - id: 1027
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 444
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - name: restart
- id: 163
- kind: action
- action: restart
- params: []
- - name: resume
- id: 95
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 96
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/95_nodejs.yaml b/dev/resources_yaml/95_nodejs.yaml
deleted file mode 100644
index 7732c98..0000000
--- a/dev/resources_yaml/95_nodejs.yaml
+++ /dev/null
@@ -1,248 +0,0 @@
-name: nodejs
-service_id: 95
-service_display_name: NodeJS
-service_short_name: nodejs
-service_man: Развертывает контейнер в k8s кластере с node, который можно использовать для запуска своих приложений.
Приложение должно быть доступно по ссылки в git репозитории, которая является входным параметром.
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 58
- kind: instance
- action: create
- params:
- - id: 1028
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 445
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1029
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 446
- code: cpu
- data_type: integer > 0
- required: true
- default: "200"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 447
- code: memory
- data_type: integer > 0
- required: true
- default: "256"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 448
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1030
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 449
- code: domain
- data_type: string
- required: true
- default: node-ctkmt4iw
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1031
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 450
- code: version
- data_type: string
- required: true
- default: "23"
- value_list:
- - "18"
- - "20"
- - "22"
- - "23"
- is_modifiable: false
- - id: 451
- code: gitPath
- data_type: string
- required: true
- default: https://github.com/xahys/testnode.git
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 452
- code: healthPath
- data_type: string
- required: false
- default: "1"
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1032
- code: jsonEnv
- data_type: map
- required: false
- default: '{}'
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 50
- is_modifiable: true
- - name: delete
- id: 61
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 59
- kind: instance
- action: modify
- params:
- - id: 1033
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 453
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 454
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 455
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1034
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 456
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "18"
- - "20"
- - "22"
- - "23"
- is_modifiable: false
- - id: 457
- code: gitPath
- data_type: string
- required: true
- default: ""
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 458
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1035
- code: jsonEnv
- data_type: map
- required: false
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 30
- - name: reconcile
- id: 374
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 60
- kind: action
- action: redeploy
- params:
- - id: 1036
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 459
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - name: resume
- id: 121
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 120
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/96_pgadmin.yaml b/dev/resources_yaml/96_pgadmin.yaml
deleted file mode 100644
index c42a1d2..0000000
--- a/dev/resources_yaml/96_pgadmin.yaml
+++ /dev/null
@@ -1,164 +0,0 @@
-name: pgadmin
-service_id: 96
-service_display_name: pgAdmin
-service_short_name: pgadmin
-service_man: Инструмент с графическим интерфейсом для управления базами данных PostgreSQL
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 62
- kind: instance
- action: create
- params:
- - id: 164
- code: domain
- data_type: string
- required: true
- default: pgadmin-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - id: 165
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 4000
- minvalue: 500
- descr: Квота ядра пода (milicores). 1000Mili = 1 Ядро
- man: Квота ядра пода (milicores). 1000Mili = 1 Ядро
- sort: 30
- is_modifiable: true
- - id: 166
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 512
- descr: Квота памяти пода (MBytes)
- man: Квота памяти пода (MBytes)
- sort: 40
- is_modifiable: true
- - id: 167
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 50
- is_modifiable: true
- - id: 169
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 20
- - id: 170
- code: login
- data_type: string
- required: true
- regex: ^([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)$
- maxlength: 255
- minlength: 3
- descr: Логин для подключения к pgAdmin, в формате email (login@email.net)
- man: Логин для подключения к pgAdmin, в формате email (login@email.net)
- sort: 60
- - id: 171
- code: password
- data_type: string
- required: true
- descr: Пароль для подключения к pgAdmin
- man: Пароль для подключения к pgAdmin
- sort: 70
- is_sensitive: true
- - name: delete
- id: 63
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 64
- kind: instance
- action: modify
- params:
- - id: 172
- code: resourceCPU
- data_type: integer > 0
- required: false
- maxvalue: 4000
- minvalue: 100
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- - id: 173
- code: resourceMemory
- data_type: integer > 0
- required: false
- maxvalue: 8192
- minvalue: 128
- descr: Квота памяти пода (MBytes)
- man: Квота памяти пода (MBytes)
- - id: 174
- code: resourceDisk
- data_type: integer > 0
- required: false
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- - name: redeploy
- id: 65
- kind: action
- action: redeploy
- params:
- - id: 277
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- - name: resume
- id: 123
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 122
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/98_http.yaml b/dev/resources_yaml/98_http.yaml
deleted file mode 100644
index b9d945e..0000000
--- a/dev/resources_yaml/98_http.yaml
+++ /dev/null
@@ -1,166 +0,0 @@
-name: http
-service_id: 98
-service_display_name: Простой HTTP контейнер
-service_short_name: http
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 77
- kind: instance
- action: create
- params:
- - id: 212
- code: domain
- data_type: string
- required: true
- default: http-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - id: 213
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "100"
- maxvalue: 4000
- minvalue: 100
- descr: Квота ядра пода (Указывается в mili)
- man: Квота ядра пода (Указывается в mili)
- sort: 30
- is_modifiable: true
- - id: 214
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "200"
- maxvalue: 8192
- minvalue: 128
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 40
- is_modifiable: true
- - id: 215
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество реплик приложения. Трафик будет распределяться между подами в режиме Round-Robin
- sort: 50
- is_modifiable: true
- - id: 216
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 20
- - id: 217
- code: registryPath
- data_type: string
- required: true
- default: nexus-sa.tst.nubes.ru/docker-nubes/jolt
- descr: Путь до image, который будет установлен как deployment
- man: Путь до image, который будет установлен как deployment
- sort: 60
- - id: 241
- code: jsonEnv
- data_type: map
- required: false
- man: Массив переменных, будут переданы в env приложения
- sort: 70
- - id: 782
- code: ingressAnnotations
- data_type: map
- required: false
- default: '{}'
- man: Формат ключ/значение
Поддерживает пока простые аннотации
- sort: 80
- - name: delete
- id: 78
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 81
- kind: instance
- action: modify
- params:
- - id: 218
- code: resourceCPU
- data_type: integer > 0
- required: true
- maxvalue: 4000
- minvalue: 100
- - id: 219
- code: resourceMemory
- data_type: integer > 0
- required: true
- maxvalue: 8192
- minvalue: 128
- - id: 220
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- - name: reconcile
- id: 403
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 79
- kind: action
- action: redeploy
- params:
- - id: 272
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- sort: 10
- - name: resume
- id: 130
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 131
- kind: instance
- action: suspend
- params: []
diff --git a/dev/resources_yaml/99_gitea.yaml b/dev/resources_yaml/99_gitea.yaml
deleted file mode 100644
index 25b5b95..0000000
--- a/dev/resources_yaml/99_gitea.yaml
+++ /dev/null
@@ -1,169 +0,0 @@
-name: gitea
-service_id: 99
-service_display_name: Gitea
-service_short_name: gitea
-service_man: '# Инструкция по развертыванию Gitea через платформу
---
## 1. Общая информация
Gitea — это лёгкий, быстрый и самодостаточный сервис хостинга Git-репозиториев с веб-интерфейсом.
Позволяет создавать и управлять репозиториями, организациями, командами, а также настраивать CI/CD через интеграции.
Развёртывание полностью автоматизировано платформой.
## Доступные операции
- **create** — Создание сервиса Gitea
- **delete** — Удаление сервиса Gitea
- **modify** — Модификация сервиса Gitea
- **suspend** — Остановка сервиса Gitea
- **resume** — Запуск сервиса Gitea
---
## 2. Параметры развертывания
Ниже перечислены параметры, которые необходимо указать при создании ресурса Gitea:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развёрнут сервис). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество реплик подов Gitea. Пример: `1`
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `1024`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`
* **Размер (gigabyte) диска для базы данных:**
Размер PVC для хранения репозиториев и данных Gitea в гигабайтах. Пример: `10`
* **FQDN / Домен:**
Доменное имя, по которому будет доступен сервис. Пример: `git.example.com`
* **Инстанс услуги PostgreSQL:**
UUID услуги k8sPgsql, в которой будет создана база данных `gitea` и пользователь `techgitea`.
* **Дополнительные параметры сервера (iniServerParams):**
JSON-объект с дополнительными параметрами секции `[server]` в `app.ini`. Пример:
```json
{"MAX_CONTENT_LENGTH": "524288000"}
```
* **Дополнительные annotations для Ingress (ingressExtraAnnotations):**
JSON-объект с дополнительными annotations для Ingress-контроллера. Пример:
```json
{"nginx.ingress.kubernetes.io/proxy-body-size": "500m"}
```
---
## 3. Особенности подключения и работы с репозиториями
### 3.1. Доступ только по HTTPS
Сервис развёртывается с **rootless-образом** Gitea. SSH-сервер внутри и он **доступен только внутри кластера Kubernetes**.
**Внешний доступ к репозиториям осуществляется исключительно по HTTPS через Ingress.**
```bash
# Пример клонирования
https://<домен>/<пользователь>/<репозиторий>.git
```
### 3.2. Настройка git для передачи логина и пароля
Для работы с приватными репозиториями через HTTPS необходимо передать учётные данные. Рекомендуется использовать один из следующих способов:
**Встроить креды в URL remote**
```bash
git remote set-url origin https://<логин>:<пароль>@<домен>/<пользователь>/<репозиторий>.git
```
> **Важно:** Логин и пароль администратора создаются автоматически при развертывании и хранятся в Vault.
### 3.3. Работа с большими файлами
По умолчанию `MAX_CONTENT_LENGTH` установлен в **500 МБ**, а Ingress пропускает pack-файлы до **500 МБ**.
Если необходимо запушить файлы близкие к лимиту, увеличьте HTTP-буфер git на стороне клиента:
```bash
git config http.postBuffer 524288000
```
Для файлов **более 500 МБ** рекомендуется использовать **Git LFS**.
---
## 4. Выходные параметры
После успешного развертывания ресурса Gitea платформа возвращает ряд параметров.
Ключевым из них является:
**connectionUrl**
Это внешний URL для доступа к веб-интерфейсу и Git-репозиториям по HTTPS. Пример:
```
https://git.example.com
```
**internalConnect**
Внутренний эндпоинт для подключения к PostgreSQL из других сервисов внутри кластера.
---
## 5. Дополнительная информация
- База данных `gitea` и пользователь `techgitea` создаются автоматически в указанной услуге PostgreSQL.
- DNS-запись и TLS-сертификат (Let''s Encrypt) настраиваются автоматически на основе указанного домена.
- Для изменения параметров сервера Gitea (`app.ini`) используйте операцию **modify** с полем `iniServerParams`.
- Для добавления дополнительных Ingress-annotations используйте операцию **modify** с полем `ingressExtraAnnotations`.
---'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 82
- kind: instance
- action: create
- params:
- - id: 232
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 4000
- minvalue: 300
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- sort: 40
- is_modifiable: true
- - id: 233
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 256
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 50
- is_modifiable: true
- - id: 234
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 60
- is_modifiable: true
- - id: 235
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество узлов в сети
- sort: 70
- is_modifiable: true
- - id: 237
- code: domain
- data_type: string
- required: true
- default: gitea-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 20
- - id: 238
- code: psqlUid
- data_type: uuid
- required: true
- ref_svc_id: 90
- descr: UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически
- man: UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически
- sort: 10
- - id: 818
- code: ingressExtraAnnotations
- data_type: map
- required: false
- is_modifiable: true
- - id: 821
- code: iniServerParams
- data_type: map
- required: false
- is_modifiable: true
- - name: delete
- id: 83
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 91
- kind: instance
- action: modify
- params:
- - id: 259
- code: resourceCPU
- data_type: integer > 0
- required: true
- maxvalue: 4000
- minvalue: 500
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- sort: 10
- - id: 260
- code: resourceMemory
- data_type: integer > 0
- required: true
- maxvalue: 8192
- minvalue: 256
- descr: Квота памяти пода (Указывается в Megabytes)
- sort: 20
- - id: 261
- code: resourceDisk
- data_type: integer > 0
- required: true
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 30
- - id: 262
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество узлов в сети
- sort: 40
- - id: 819
- code: ingressExtraAnnotations
- data_type: map
- required: false
- man: 'Примеры:
- `nginx.ingress.kubernetes.io/proxy-body-size: 500m` (Размер пакета)
- `nginx.ingress.kubernetes.io/proxy-read-timeout: "600"` (Время ожидания при чтении)
- `nginx.ingress.kubernetes.io/proxy-send-timeout: "600"` (Время ожидания отправке)'
- - id: 820
- code: iniServerParams
- data_type: map
- required: false
- man: 'Примеры:
- `MAX_CONTENT_LENGTH: 524288000(~500мб)` (Размер пакета в байтах)'
- - name: resume
- id: 127
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 126
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/109_zones_v2.yaml b/test/resources_yaml/109_zones_v2.yaml
deleted file mode 100644
index 5bdd970..0000000
--- a/test/resources_yaml/109_zones_v2.yaml
+++ /dev/null
@@ -1,263 +0,0 @@
-name: zones_v2
-service_id: 109
-service_display_name: Управление DNS
-service_short_name: zonesV2
-service_man: '# Управление DNS
## Что делает сервис
Управляет DNS-зоной вашего домена в инфраструктуре `ngcloud.ru`.
Сервис помогает:
- создать DNS-зону;
- поддерживать записи в зоне (добавлять, удалять, массово менять);
- удалять зону;
- синхронизировать данные зоны с фактическим состоянием на DNS-серверах.
Сервис работает с авторитетными DNS-серверами зоны:
- `ns3.ngcloud.ru`
- `185.247.187.83`
- `2a10:aa80:0:5::3`
- `ns4.ngcloud.ru`
- `81.22.46.43`
- `2a10:aa80:0:6::3`
## Очень важно: что сделать у регистратора домена
Чтобы зона действительно начала обслуживаться, **нужно делегировать домен** у регистратора на авторитетные DNS-серверы:
- `ns3.ngcloud.ru`
- `ns4.ngcloud.ru`
В панели регистратора нужно заменить NS-серверы домена на значения выше.
Без этого записи в зоне могут быть созданы, но интернет не будет использовать их для вашего домена.
## Проверка после настройки
Проверить ответы от серверов зоны:
```bash
dig <ваш_домен> @ns3.ngcloud.ru
dig <ваш_домен> @ns4.ngcloud.ru
```
Проверить, что делегирование у регистратора применилось:
```bash
dig <ваш_домен> NS
```
В ответе должны быть `ns3.ngcloud.ru` и `ns4.ngcloud.ru`.
'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 254
- kind: instance
- action: create
- man: '# Операция `create` (создание DNS-зоны)
## Что делает операция
`create` создает новую DNS-зону на авторитетных серверах сервиса.
После создания зона закрепляется за пользователем, который запустил создание инстанса.
## Когда использовать
- подключаете домен к сервису впервые;
- нужна новая отдельная зона.
## Важное условие после создания
У регистратора домена нужно делегировать зону на:
- `ns3.ngcloud.ru`
- `185.247.187.83`
- `2a10:aa80:0:5::3`
- `ns4.ngcloud.ru`
- `81.22.46.43`
- `2a10:aa80:0:6::3`
Если этого не сделать, зона будет создана технически, но в интернете домен не начнет работать через эти DNS.
## Объяснение параметра `Типа зоны`
### `NATIVE`
Это основная (ведущая) зона в нашем сервисе.
Вы управляете записями здесь, и именно эта зона считается источником правды.
### `SLAVE`
Это копия зоны, которая подтягивает данные с внешнего DNS-сервера.
Такой режим нужен, когда истинный источник записей находится не в нашем сервисе, а на другом DNS.
## Что проверяет операция
- что такая зона еще не существует на целевых DNS;
- корректность входных параметров зоны;
- ограничения на служебные/запрещенные имена зон.'
- params:
- - id: 761
- code: zoneName
- data_type: string
- required: true
- regex: ^([a-z0-9-]+\.)+[a-z0-9-]+$
- maxlength: 64
- minlength: 1
- descr: Имя зоны
- sort: 20
- - id: 762
- code: zoneKind
- data_type: string
- required: true
- default: NATIVE
- value_list:
- - NATIVE
- - SLAVE
- descr: Тип зоны
- sort: 30
- - id: 763
- code: zoneMastersForSlave
- data_type: string
- required: false
- descr: Использовать если выбран тип SLAVE. IP адреса в формате через пробел для настройки Master-серверов
- man: Пример:
**8.8.8.8 8.8.4.4**
- sort: 40
- - id: 764
- code: zoneRefresh
- data_type: integer > 0
- required: true
- default: "86400"
- minvalue: 600
- descr: Время ожидания ответа вторичного DNS перед запросом SOA-записи с первичных серверов
- sort: 50
- - id: 765
- code: zoneRetry
- data_type: integer > 0
- required: true
- default: "7200"
- minvalue: 600
- descr: Время в течение которого сервер повторно попробует синхронизировать информацию с первичных DNS-серверов
- sort: 60
- - id: 766
- code: zoneExpire
- data_type: integer > 0
- required: true
- default: "3600000"
- minvalue: 3600
- descr: Время в течение которого вторичный DNS будет пытаться завершить синхронизацию зоны с первичным
- sort: 70
- - id: 767
- code: zoneTTL
- data_type: integer > 0
- required: true
- default: "86400"
- minvalue: 600
- descr: Время, в течение которого информация будет кешироваться другими DNS-серверами
- sort: 80
- - id: 768
- code: resourceRealm
- data_type: string
- required: true
- default: powerdns
- value_list:
- - powerdns
- func: getAvailableResourceRealms
- sort: 10
- - name: create_record
- id: 260
- kind: subresource
- action: create
- subresource: record
- man: '# Операция `create_record` (добавление одной записи)
## Что делает операция
`create_record` точечно добавляет одну DNS-запись в существующую зону.
Если аналогичная запись уже есть, итоговый набор дополняется в рамках логики типа/имени.
## Когда использовать
- нужно добавить одну новую запись без массовой переработки зоны;
- нужно быстро внести точечное изменение.
'
- params:
- - id: 777
- code: recordName
- data_type: string
- required: true
- regex: ^([a-zA-Z0-9\-_]+\.)*[a-zA-Z0-9\-_]+$|^(\d{1,3}\.){3}\d{1,3}$|^.+$
- unique_scope: parent
- maxlength: 64
- minlength: 1
- man: Имя зоны в конце проставляется автоматически
- sort: 10
- - id: 778
- code: recordTTL
- data_type: integer > 0
- required: true
- default: "3600"
- maxvalue: 84000
- minvalue: 30
- man: Time-to-Leave записи. Раз в какое время запись будет обновлена
- sort: 20
- - id: 779
- code: recordType
- data_type: string
- required: true
- default: A
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- sort: 30
- - id: 780
- code: recordInput
- data_type: string
- required: true
- man: Валидация производится только после запуска операции. Если при указанном типе будет указано некорректно значение, это будет описано в логе ошибки операции
- sort: 40
- - name: delete
- id: 255
- kind: instance
- action: delete
- man: '# Операция `delete` (удаление зоны)
## Что делает операция
`delete` удаляет DNS-зону целиком вместе со всеми записями.
## Когда использовать
- зона больше не нужна;
- домен выводится из эксплуатации в рамках сервиса.
## Важная логика
- удаляется вся зона, а не отдельные записи;
- перед удалением стоит проверить, что домен действительно не используется.
'
- params: []
- - name: delete_record
- id: 261
- kind: subresource
- action: delete
- subresource: record
- man: '# Операция `delete_record` (удаление записей по имени)
## Что делает операция
`delete_record` удаляет все записи с указанным именем (`recordName`), независимо от типа (`A`, `TXT`, `CNAME` и т.д.).
## Когда использовать
- нужно полностью убрать конкретное имя из зоны;
- требуется быстро очистить все варианты записи для одного имени.
## Важная логика
- удаляются все типы записей для выбранного имени;
- если нужно удалить только один тип записи, лучше использовать `modify_record` с нужным целевым состоянием.
'
- params:
- - id: 781
- code: recordName
- data_type: string
- required: true
- - name: modify
- id: 256
- kind: instance
- action: modify
- man: '# Операция `modify` (массовое изменение записей зоны)
## Что делает операция
`modify` обновляет записи зоны целиком на основе переданного массива `records`.
Это операция "приведения к целевому состоянию": система берет входной набор и применяет его на DNS-серверах.
## Когда использовать
- нужно массово обновить зону;
- нужно заменить сразу несколько записей одним запуском;
- нужно синхронно привести зону к заранее подготовленному списку записей.
## Важная логика
- запись группируется по `(имя, тип, TTL)`;
- операция ориентирована на полное обновление набора, а не на "точечную мелкую правку".
Для точечных изменений одной записи обычно удобнее `create_record` или `modify_record`.
'
- params:
- - id: 769
- code: records
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 86
- code: recordName
- data_type: string
- required: true
- default: ""
- regex: ^([a-zA-Z0-9\-_]+\.)*[a-zA-Z0-9\-_]+$|^(\d{1,3}\.){3}\d{1,3}$|^.+$
- man: Имя зоны в конце проставляется автоматически
- is_modifiable: false
- - id: 88
- code: recordTTL
- data_type: integer > 0
- required: true
- default: "3600"
- man: Time-to-Leave записи. Раз в какое время запись будет обновлена
- is_modifiable: false
- - id: 85
- code: recordType
- data_type: string
- required: true
- default: A
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- is_modifiable: false
- - id: 87
- code: recordInput
- data_type: string
- required: true
- default: ""
- man: Валидация производится только после запуска операции. Если при указанном типе будет указано некорректно значение, это будет описано в логе ошибки операции
- is_modifiable: false
- - name: modify_record
- id: 262
- kind: subresource
- action: modify
- subresource: record
- man: '# Операция `modify_record` (изменение конкретной записи)
## Что делает операция
`modify_record` заменяет записи с указанным именем одной новой записью заданного типа и значения.
## Когда использовать
- нужно исправить одну конкретную запись;
- нужно заменить старые значения записи на новое целевое значение.
## Важная логика
- существующие записи выбранного имени очищаются;
- затем добавляется одна новая запись с переданными параметрами.
'
- params:
- - id: 783
- code: recordName
- data_type: string
- required: true
- sort: 10
- - id: 784
- code: recordTTL
- data_type: integer > 0
- required: true
- maxvalue: 84000
- minvalue: 30
- man: Time-to-Leave записи. Раз в какое время запись будет обновлена
- sort: 20
- - id: 785
- code: recordType
- data_type: string
- required: true
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- sort: 30
- - id: 786
- code: recordInput
- data_type: string
- required: true
- man: Валидация производится только после запуска операции. Если при указанном типе будет указано некорректно значение, это будет описано в логе ошибки операции
- sort: 40
- - name: reconcile
- id: 259
- kind: action
- action: reconcile
- man: '# Операция `reconcile` (актуализация состояния зоны)
## Что делает операция
`reconcile` подтягивает актуальное фактическое состояние DNS-зоны и синхронизирует его с данными инстанса.
Операция техническая: она нужна для выравнивания состояния, а не для бизнес-изменений записей.
## Когда использовать
- записи менялись вручную на DNS-серверах;
- нужно обновить схему/состояние инстанса в личном кабинете;
- нужно импортировать текущие записи в управляемое состояние.
## Важная логика
- актуализируется список записей в данных инстанса;
- стандартно ничего "нового" для клиента не добавляет и не удаляет само по себе, а приводит данные к реальности.
'
- params: []
diff --git a/test/resources_yaml/111_dnsrecord.yaml b/test/resources_yaml/111_dnsrecord.yaml
deleted file mode 100644
index d87a3c1..0000000
--- a/test/resources_yaml/111_dnsrecord.yaml
+++ /dev/null
@@ -1,105 +0,0 @@
-name: dnsrecord
-service_id: 111
-service_display_name: DNS запись
-service_short_name: dnsrecord
-service_man: Необходима DNS зона, в которой будет создана DNS запись.
Выберите
* Зону в которой будет создана запись
* Тип записи
* Имя записи
* Значение записи
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 45
- kind: instance
- action: create
- params:
- - id: 75
- code: zoneUid
- data_type: uuid
- required: true
- ref_svc_id: 109
- descr: UUID экземпляра услуги DNS-зоны
- man: UUID экземпляра услуги DNS-зоны
- sort: 10
- - id: 76
- code: recordType
- data_type: string
- required: true
- value_list:
- - A
- - AAAA
- - CNAME
- - MX
- - PTR
- - SOA
- - SRV
- - TXT
- - LUA
- - NS
- - SSHFP
- descr: Тип DNS-записи
- man: Тип DNS-записи
- sort: 20
- - id: 77
- code: recordName
- data_type: string
- required: true
- unique_scope: parent
- descr: Имя записи. Имя зоны в конце проставляется автоматически
- man: Имя записи. Имя зоны в конце проставляется автоматически
- sort: 30
- - id: 78
- code: recordInput
- data_type: string
- required: true
- descr: Значение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
- man: Значение. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
- sort: 40
- is_modifiable: true
- - id: 450
- code: recordTTL
- data_type: integer > 0
- required: true
- default: "3600"
- maxvalue: 604800
- minvalue: 30
- descr: Time-to-Leave записи. Раз в какое время запись будет обновлена
- sort: 50
- - name: delete
- id: 46
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 90
- kind: instance
- action: modify
- params:
- - id: 256
- code: recordInput
- data_type: string
- required: true
- descr: Запись. Необходима валидация, в зависимости от типа записи. Должно быть заменено на UUID-внешнийIP
- - name: reconcile
- id: 408
- kind: action
- action: reconcile
- params: []
diff --git a/test/resources_yaml/115_mariadb.yaml b/test/resources_yaml/115_mariadb.yaml
deleted file mode 100644
index 6c8c80d..0000000
--- a/test/resources_yaml/115_mariadb.yaml
+++ /dev/null
@@ -1,460 +0,0 @@
-name: mariadb
-service_id: 115
-service_display_name: Mariadb
-service_short_name: mariadb
-service_man: 'Mariadb кластер. Ресурсная платформа: k8s. Автоматизация: k8s operator.
Автоматическое резервное копирование, ручное восстановление.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 138
- kind: instance
- action: create
- params:
- - id: 877
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 242
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 878
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 246
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 243
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 244
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 245
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- man: Пока `Galera` выключена
Как будет запрос на включение и тестирование, реплики можно будет увеличивать
- is_modifiable: false
- - id: 879
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 247
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 248
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 880
- code: mariadbConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 249
- code: version
- data_type: string
- required: true
- default: 9.4.0
- value_list:
- - 8.4.0
- - 9.4.0
- is_modifiable: false
- - id: 881
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- is_modifiable: true
- sub_params:
- - id: 250
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 251
- code: retain
- data_type: integer > 0
- required: true
- default: "720"
- is_modifiable: false
- - id: 252
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 882
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- is_modifiable: true
- sub_params:
- - id: 253
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 254
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 255
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 256
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - name: create_database
- id: 242
- kind: subresource
- action: create
- subresource: database
- params:
- - id: 734
- code: dbName
- data_type: string
- required: true
- default: db-aah92zcm
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- descr: 'Пример: `db01`'
- - name: create_user
- id: 243
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 735
- code: username
- data_type: string
- required: true
- default: usero6y8ruyp
- regex: ^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$
- maxlength: 62
- minlength: 2
- descr: 'Пример: `myusername`'
- sort: 10
- - id: 736
- code: password
- data_type: string
- required: true
- default: kgocowba
- maxlength: 62
- minlength: 8
- descr: Секрет будет записан в хранилище секретов и не будет отображаться публично
- sort: 20
- is_sensitive: true
- - id: 737
- code: dbName
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- descr: Необходимо указать массив существующих баз
- man: Если базы не существует - при выполнении операции вернётся ошибка
- sort: 30
- sub_params:
- - id: 54
- code: dbname
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 738
- code: accessHosts
- data_type: string
- required: true
- default: '%'
- descr: 'Пример: `%`'
- sort: 40
- - name: delete
- id: 139
- kind: instance
- action: delete
- params:
- - id: 456
- code: deleteS3Bucket
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- descr: Также удалить технический S3 Bucket с бэкапами?
- sort: 10
- - name: delete_database
- id: 248
- kind: subresource
- action: delete
- subresource: database
- params:
- - id: 745
- code: dbName
- data_type: string
- required: true
- descr: ВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ
- - name: delete_user
- id: 247
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 744
- code: username
- data_type: string
- required: true
- descr: Имя пользователя, созданное через операцию `create_user`
- - name: modify
- id: 142
- kind: instance
- action: modify
- params:
- - id: 883
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 257
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 258
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 259
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- man: Пока `Galera` выключена
Как будет запрос на включение и тестирование, реплики можно будет увеличивать
- is_modifiable: false
- - id: 260
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 884
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 261
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 262
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 885
- code: mariadbConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 263
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - 8.4.0
- - 9.4.0
- is_modifiable: false
- - id: 886
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 265
- code: retain
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 266
- code: schedule
- data_type: string
- required: true
- default: ""
- 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))+)$
- is_modifiable: false
- - id: 264
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 887
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- sub_params:
- - id: 267
- code: enabled
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 268
- code: schedule
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 269
- code: quota
- data_type: integer > 0
- required: true
- default: ""
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 270
- code: percent
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - name: reconcile
- id: 287
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 141
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 140
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/116_kafka.yaml b/test/resources_yaml/116_kafka.yaml
deleted file mode 100644
index f22db62..0000000
--- a/test/resources_yaml/116_kafka.yaml
+++ /dev/null
@@ -1,337 +0,0 @@
-name: kafka
-service_id: 116
-service_display_name: ApacheKafka
-service_short_name: kafka
-service_man: '# Инструкция по развертыванию Организация в Cloud Director через платформу
## 1. Общая информация
Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.
### Доступные операции
**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.
### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.
### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).
---
## 4. Выходные параметры
Услуга предоставляет следующие выходные параметры (формируются в процессе операций):
### Идентификатор организации
Уникальный идентификатор созданной организации. Используется для всех дальнейших API-операций.
### Статус организации
Отражает текущее состояние: active, suspended, modifying, deleting.
### Параметры сети
Выходные данные при наличии ipSpaces: список выделенных внешних IP, имя ip_space, количество IP.
---
## 5. Дополнительная информация
- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)**;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к этой организации.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak.
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 148
- kind: instance
- action: create
- params:
- - id: 1084
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 579
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1085
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 580
- code: cpu
- data_type: integer > 0
- required: true
- default: "2000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 581
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- is_modifiable: false
- - id: 582
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 583
- code: disk
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 1086
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 584
- code: allocationExternal
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- is_modifiable: false
- - id: 585
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: create_topic
- id: 165
- kind: subresource
- action: create
- subresource: topic
- man: '# Инструкция по управлению топиками Apache Kafka через платформу
## 1. Общая информация
---
Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам.
Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API.
---
## Доступные операции
- **create_topic** — Создание топика
- **modify_topic** — Модификация топика
- **delete_topic** — Удаление топика
---
## 2. Параметры создания топика
Ниже перечислены параметры, которые необходимо указать при создании нового топика:
* **Имя топика**
Название топика.
Должно быть уникальным в пределах кластера.
Пример: `orders-events`.
* **Партиции**
Количество партиций топика.
Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки.
Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества
Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
* **Реплики**
Количество реплик для каждой партиции.
Обычно равно количеству доступных брокеров или меньше.
Пример: `3`.
---
## 4. Параметры модификации топика
Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными:
* **Имя топика**
Название топика.
Пример: `orders-events`.
* **Партиции**
Новое количество партиций.
Пример: `12`.
* **Реплики**
Новое количество реплик.
Пример: `2`.
---
## 5. Рекомендации
* Планируйте количество партиций с запасом — уменьшение их числа невозможно.
* Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров.
* Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки.
---'
- params:
- - id: 523
- code: nameTopic
- data_type: string
- required: true
- descr: 'Пример: `orders-events`'
- sort: 10
- - id: 524
- code: partitions
- data_type: integer > 0
- required: true
- descr: Число партиций можно увеличить, но уменьшить их нельзя.
- - id: 525
- code: replicas
- data_type: integer > 0
- required: true
- descr: Количество реплик не может привышать количество реплик брокера
- sort: 20
- - name: create_user
- id: 168
- kind: subresource
- action: create
- subresource: user
- man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
- params:
- - id: 530
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- - id: 531
- code: nameTopic
- data_type: string
- required: true
- descr: 'Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`'
- - id: 532
- code: operations
- data_type: array
- required: true
- value_list:
- - Create
- - Describe
- - Read
- - Write
- descr: 'Пример: `Create, Describe, Read, Write`'
- - id: 533
- code: group
- data_type: string
- required: true
- default: '*'
- descr: 'Пример: `order-consumers` или `*`'
- - id: 534
- code: accessHosts
- data_type: string
- required: true
- default: '*'
- descr: 'Пример: `192.168.1.0/24` или `*`'
- - name: delete
- id: 149
- kind: instance
- action: delete
- params: []
- - name: delete_topic
- id: 167
- kind: subresource
- action: delete
- subresource: topic
- params:
- - id: 529
- code: nameTopic
- data_type: string
- required: true
- descr: Необходимо выбрать топик, который необходимо удалить
- - name: delete_user
- id: 170
- kind: subresource
- action: delete
- subresource: user
- man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
- params:
- - id: 540
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- - name: modify
- id: 162
- kind: instance
- action: modify
- params:
- - id: 1087
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 586
- code: cpu
- data_type: integer > 0
- required: true
- default: "2000"
- is_modifiable: false
- - id: 587
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- is_modifiable: false
- - id: 588
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 589
- code: disk
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 1088
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 590
- code: allocationExternal
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- is_modifiable: false
- - id: 591
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- is_modifiable: false
- - name: modify_topic
- id: 166
- kind: subresource
- action: modify
- subresource: topic
- man: '# Инструкция по управлению топиками Apache Kafka через платформу
## 1. Общая информация
---
Топик — это основная сущность в Apache Kafka, предназначенная для приёма сообщений от продюсеров и передачи их консюмерам.
Платформа позволяет создавать, удалять и изменять параметры топиков без прямого доступа к брокерам, обеспечивая удобное управление через интерфейс или API.
---
## Доступные операции
- **create_topic** — Создание топика
- **modify_topic** — Модификация топика
- **delete_topic** — Удаление топика
---
## 2. Параметры создания топика
Ниже перечислены параметры, которые необходимо указать при создании нового топика:
* **Имя топика**
Название топика.
Должно быть уникальным в пределах кластера.
Пример: `orders-events`.
* **Партиции**
Количество партиций топика.
Рекомендуется выбирать с учётом уровня параллелизма потребителей и предполагаемой нагрузки.
Пример: `6`. Здесь важно рассказать о том как происходит расчет оптимального количества
Обратите внимание: уменьшить количество партиций после создания невозможно, поэтому лучше закладывать небольшой запас на будущий рост нагрузки.
* **Реплики**
Количество реплик для каждой партиции.
Обычно равно количеству доступных брокеров или меньше.
Пример: `3`.
---
## 4. Параметры модификации топика
Для уже существующих топиков можно изменять параметры. Все параметры являются опциональными:
* **Имя топика**
Название топика.
Пример: `orders-events`.
* **Партиции**
Новое количество партиций.
Пример: `12`.
* **Реплики**
Новое количество реплик.
Пример: `2`.
---
## 5. Рекомендации
* Планируйте количество партиций с запасом — уменьшение их числа невозможно.
* Количество реплик должно соответствовать требуемому уровню отказоустойчивости, но не превышать количество брокеров.
* Изменение параметров топика в рабочем окружении может временно влиять на производительность. Рекомендуется проводить крупные изменения в периоды минимальной нагрузки.
---'
- params:
- - id: 526
- code: nameTopic
- data_type: string
- required: true
- descr: 'Пример: `orders-events`'
- sort: 10
- - id: 527
- code: partitions
- required: false
- descr: Число партиций на кластер ≤ 100 × (число брокеров) × (фактор репликации). Пример `50`
- sort: 30
- - id: 528
- code: replicas
- required: false
- descr: Количество партиций ≤ (число брокеров). Пример `2`
- sort: 20
- - name: modify_user
- id: 169
- kind: subresource
- action: modify
- subresource: user
- man: '# Инструкция по управлению пользователями Apache Kafka.
---
## 1. Общая информация
Пользователи в Apache Kafka используются для аутентификации и авторизации при подключении к кластеру.
Платформа позволяет создавать, удалять и изменять пользователей без прямого доступа к брокерам, а также настраивать права доступа к топикам и группам.
Это обеспечивает централизованное и безопасное управление доступом к ресурсам Kafka.
---
## Доступные операции
- **create_user** — Создание пользователя
- **modify_user** — Модификация пользователя
- **delete_user** — Удаление пользователя
---
## 2. Параметры создания пользователя
Ниже перечислены параметры, которые необходимо указать при создании нового пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 3. Параметры модификации пользователя
Ниже перечислены параметры, которые необходимо указать при модификации пользователя:
* **Имя пользователя**
Имя создаваемого пользователя. Используется для подключения к Kafka и настройки прав.
Пример: `username-admin`
* **Топик**
Название топика, к которому будут назначены права для данного пользователя.
Пример: `orders-events`.
Использовать маску нельзя (`orders*`), только полное название или `*`.
* **Операции**
Список разрешённых операций на указанном топике.
Пример: `Describe, Read, Write`
* **Группа**
Имя группы, которой разрешён доступ. Используется при настройке консюмер-групп.
Пример: `order-consumers`.
* **Разрешённые хосты**
Список хостов или подсетей, с которых разрешено подключение пользователя.
Пример: `192.168.1.0/24` или `*`.
---
## 4. Параметры удалении пользователя
Ниже перечислены параметры, которые необходимо указать при удалении пользователя:
* **Имя пользователя**
Имя удаляемого пользователя.
Пример: `username-admin`
## 5. Выходные параметры
После успешного создания пользователя платформа возвращает параметры, необходимые для подключения:
* **ca.crt**
Корневой сертификат (Certificate Authority), используемый для проверки подлинности сервера при TLS-подключении.
Файл содержит публичный ключ удостоверяющего центра, которому доверяют брокеры и клиенты. Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **ca.p12**
PKCS#12-хранилище с корневым сертификатом (Certificate Authority), используемое для проверки подлинности сервера при TLS-подключении.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.p12
```
* **ca.password**
Пароль для доступа к хранилищу `ca.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
* **user.crt**
Клиентский сертификат, подтверждающий личность пользователя при подключении к Kafka.
Используется совместно с приватным ключом `user.key` для аутентификации.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.crt
```
* **user.key**
Приватный ключ пользователя, применяемый для установления защищённого TLS-соединения и подтверждения подлинности.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo ''<содержание поля>'' | base64 -d > <название>.key
```
* **user.p12**
PKCS#12-хранилище с клиентским сертификатом и приватным ключом, предназначенное для аутентификации пользователя в Kafka.
Выдаеться в формате base64 для получения файла сертификата использовать команду
```bash
echo "<содержание поля>" | base64 -d > <название>.p12
```
* **user.password**
Пароль для доступа к хранилищу `user.p12`. Выдаеться в чистом виде. Раскодировать не нужно.
Эти параметры используются для настройки TLS-подключения.
---
## 6. Пример конфигурации клиента внутри кластера
Пример пода:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: kafka-4
spec:
volumes:
- name: work
emptyDir: {}
containers:
- name: kcat
image: quay.io/strimzi/kafka:latest-kafka-4.0.0
command: ["sleep", "5600"]
volumeMounts:
- name: work
mountPath: /work
restartPolicy: Never
```
Создаём под и сохраняем сертификаты:
```bash
kubectl cp user.p12 kafka-4:/work/
kubectl cp ca.p12 kafka-4:/work/
```
Создаём файлы конфигурации:
```bash
cat > /work/user-read.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
```bash
cat > /work/user-write.properties <<''EOF''
security.protocol=SSL
ssl.keystore.type=PKCS12
ssl.keystore.location=/work/user-write.p12
ssl.keystore.password=<user.password>
ssl.truststore.type=PKCS12
ssl.truststore.location=/work/ca.p12
ssl.truststore.password=<ca.password>
EOF
```
Листинг доступных топиков:
```bash
/opt/kafka/bin/kafka-topics.sh \
--bootstrap-server kafkak8s-bootstrap-external:9093 \
--command-config /work/user-read.properties \
--list
```
Запись сообщений:
```bash
/opt/kafka/bin/kafka-console-producer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--producer.config /work/user-write.properties
```
Чтение сообщений:
```bash
/opt/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server <адрес сервис брокера>:9093 \
--topic <topic> \
--from-beginning \
--group <group> \
--consumer.config /work/user-read.properties \
--max-messages 50
```
---
## 7. Пример внешнего подключения с использованием **kcat**
**Листинг топиков**
```bash
kcat -b <externalConnect.bootstrap.fqdn>:9093 \
-L \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
**Запись сообщения**
```bash
echo "hello from kcat" | kcat -P \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-write.crt \
-X ssl.key.location=./user-write.key \
-X ssl.endpoint.identification.algorithm=none
```
**Чтение сообщений**
```bash
kcat -C \
-b <externalConnect.bootstrap.fqdn>:9093 \
-t write-test \
-o beginning \
-q \
-X security.protocol=SSL \
-X ssl.ca.location=./ca.crt \
-X ssl.certificate.location=./user-read.crt \
-X ssl.key.location=./user-read.key \
-X ssl.endpoint.identification.algorithm=none
```
---
## 9. Рекомендации
* Минимизируйте набор разрешённых операций для повышения безопасности.
* Используйте отдельные учётные записи для продюсеров, консюмеров и системных сервисов.
* Ограничивайте доступ по IP или подсетям с помощью параметра **Разрешённые хосты**.
* После изменения прав или групп пользователя рекомендуется проверить подключение и доступ к топикам.
---'
- params:
- - id: 535
- code: nameTopic
- data_type: string
- required: false
- default: '*'
- descr: 'Пример: `orders-events`. Использовать маску нельзя(`orders*`), только полное название или `*`'
- - id: 536
- code: operations
- data_type: array
- required: false
- value_list:
- - Create
- - Describe
- - Read
- - Write
- descr: 'Пример: `Create, Describe, Read, Write`'
- - id: 537
- code: group
- data_type: string
- required: false
- default: '*'
- descr: 'Пример: `order-consumers` или `*`'
- - id: 538
- code: accessHosts
- data_type: string
- required: false
- default: '*'
- descr: 'Пример: `192.168.1.0/24` или `*`'
- - id: 539
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- sort: 10
- - name: resume
- id: 161
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 160
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/119_akhq.yaml b/test/resources_yaml/119_akhq.yaml
deleted file mode 100644
index a12f8a1..0000000
--- a/test/resources_yaml/119_akhq.yaml
+++ /dev/null
@@ -1,109 +0,0 @@
-name: akhq
-service_id: 119
-service_display_name: Akhq
-service_short_name: Akhq
-service_man: '# Инструкция по развертыванию Apache Kafka через платформу
---
## 1. Общая информация
AKHQ — это веб-интерфейс для работы с кластерами Apache Kafka.
Позволяет просматривать топики, consumer group''ы, сообщения, ACL, схему безопасности, состояние брокеров и метаданные.
Поддерживает работу с несколькими кластерами Kafka одновременно, включая внутренние и внешние (TLS) подключения.
## Доступные операции
- **create** — Создание ресурса AKHQ
- **suspend** — Остановка ресурса
- **resume** — Возобновление работы ресурса
- **modify** — Модификация настроек
- **delete** — Удаление ресурса
---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса Kafka:
* **Кластер Kafka к которому нужно настроить подключение**
Для использования AKHQ необходимо предварительно развернуть сервис Kafka. Пример: `kafka-external`.
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество узлов для работы Akhq. Пример `2`
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `512`
* **Квота (millicore ) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`
* **Имя домена:**
Dns Имя по которому будет происходить обращение к сервису. Указать необходимо уникальное имя до . ( то есть если необходимо получить dns ui) Пример: `kafka-external`
---
## 4. Выходные параметры
После успешного развертывания ресурса Kafka платформа возвращает ряд параметров.
Ключевым из них является:
**connectionUrl**
Это полное доменное имя (FQDN), по которому будет доступен интерфейс AKHQ. После развёртывания подождите несколько минут — UI станет доступен по HTTPS, как только все сервисы полностью запустятся.
**Учетные данные**
Здесь представлены поля для ввода логина и пароля, с помощью которых вы сможете авторизоваться в сервисе.
---
## 5. Дополнительная информация
Учётные записи, созданные для работы с AKHQ, предоставляют доступ только для просмотра данных. Для управления Kafka, пожалуйста, используйте возможности личного кабинета.
---'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 175
- kind: instance
- action: create
- params:
- - id: 550
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Выбрать платформу из списка
- sort: 10
- - id: 551
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- minvalue: 512
- descr: 'Пример: `1024`'
- sort: 20
- - id: 552
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- minvalue: 500
- descr: 'Пример: `1000`'
- sort: 30
- - id: 553
- code: domain
- data_type: string
- required: true
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 40
- - id: 554
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- minvalue: 1
- sort: 11
- - id: 555
- code: kafkaUid
- data_type: uuid
- required: true
- ref_svc_id: 116
- descr: Выбрать кластер из списка
- sort: 5
- is_modifiable: true
- - name: delete
- id: 176
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 180
- kind: instance
- action: modify
- params:
- - id: 565
- code: kafkaUid
- data_type: uuid
- required: true
- ref_svc_id: 116
- descr: Выбрать кластер из списка
- - name: resume
- id: 178
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 177
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/120_clickhouse.yaml b/test/resources_yaml/120_clickhouse.yaml
deleted file mode 100644
index 583537a..0000000
--- a/test/resources_yaml/120_clickhouse.yaml
+++ /dev/null
@@ -1,572 +0,0 @@
-name: clickhouse
-service_id: 120
-service_display_name: ClickHouse
-service_short_name: clickhouse
-service_man: '# Инструкция по управлению кластерами и пользователями ClickHouse
---
## Общая информация
ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.
Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`
Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.
Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.
---
## Доступные операции
* **create** — Создание кластера
* **delete** — Удаление кластера
* **suspend** — Приостановка работы кластера
* **resume** — Возобновление работы кластера
* **create_database** — Создание базы данных
* **delete_database** — Удаление базы данных
* **create_user** — Создание пользователя и настройка прав доступа к базе данных
* **delete_user** — Удаление пользователя
## Процесс создания и первого подключения
1. Выполнить операцию `create` - будет создан кластер
2. Выполнить операцию `create_database` - будет создана база данных
3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)
## Примеры подключения
### Подключение через HTTP-интерфейс
```bash
# Проверка доступности кластера
curl "http://<username>:<password>@<host>:8123/" -d "SELECT 1"
# Выполнение запроса
curl "http://<username>:<password>@<host>:8123/" -d "SHOW DATABASES"
```
## Простые кейсы
*Создать БД и обычной таблицы*
```clickhouse
CREATE TABLE database.table
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;
INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);
SELECT count() FROM database.table;
```
Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER ''clickhousek8s''`)
В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах
*Создание БД и шардированной таблицы*
```clickhouse
CREATE TABLE database.localUsers
(
id UInt64,
value String
)
ENGINE = MergeTree()
ORDER BY id;
CREATE TABLE database.shardedTable
AS localUsers
ENGINE = Distributed(''clickhousek8s'', ''database'', ''localUsers'', id);
INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);
SELECT count() FROM shardedTable;
```
Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse
*Создание реплицируемой и шардированной таблицы*
```clickhouse
CREATE TABLE IF NOT EXISTS database.localUsers ON cluster ''clickhousek8s''
(
user_id UInt64,
name String,
email String
)
ENGINE = ReplicatedMergeTree(
''/clickhouse/tables/{shard}/localUsers'',
''{replica}''
)
ORDER BY user_id;
CREATE TABLE IF NOT EXISTS database.users ON cluster ''clickhousek8s''
AS database.localUsers
ENGINE = Distributed(''clickhousek8s'', ''database'', ''localUsers'', rand());
INSERT INTO database.users VALUES (1, ''Alice'', ''alice@example.com'');
INSERT INTO database.users VALUES (2, ''Bob'', ''bob@example.com'');
INSERT INTO database.users VALUES (3, ''Charlie'', ''charlie@example.com'');
INSERT INTO database.users VALUES (4, ''David'', ''david@example.com'');
INSERT INTO database.users VALUES (5, ''Gosha'', ''gosha@example.com'');
INSERT INTO database.users VALUES (6, ''Eve'', ''eve@example.com'');
INSERT INTO database.users VALUES (7, ''Frank'', ''frank@example.com'');
INSERT INTO database.users VALUES (8, ''Grace'', ''grace@example.com'');
INSERT INTO database.users VALUES (9, ''Hannah'', ''hannah@example.com'');
INSERT INTO database.users VALUES (10, ''Ivan'', ''ivan@example.com'');
SELECT * FROM database.localUsers;
SELECT * FROM database.users;
SELECT COUNT(*) AS total_users FROM database.users;
SELECT COUNT(*) AS total_users_local FROM database.localUsers;
```'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 181
- kind: instance
- action: create
- man: Операция создания кластера ClickHouse
Для подключения к кластеру также необходимо создать базу данных через операцию `create_database` и создание пользователя через операцию `create_user`
- params:
- - id: 837
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 194
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 838
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 195
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 196
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 197
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 199
- code: shards
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "2"
- - "3"
- man: '**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации.
**Реплика** - это точная копия данных внутри одного шарда'
- is_modifiable: false
- - id: 198
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 839
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 200
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 201
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 840
- code: clickhouseKeeperConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 202
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 203
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 204
- code: replicas
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "1"
- - "3"
- man: Если указан 0, то инстансы ClickHouse Keeper развёрнуты не будут
- is_modifiable: false
- - id: 841
- code: clickhouseConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- is_modifiable: true
- sub_params:
- - id: 205
- code: version
- data_type: string
- required: true
- default: "25.10"
- value_list:
- - "25.10"
- is_modifiable: false
- - id: 842
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- is_modifiable: true
- sub_params:
- - id: 206
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 207
- code: retain
- data_type: integer > 0
- required: true
- default: "7"
- is_modifiable: false
- - id: 208
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 843
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 80
- is_modifiable: true
- sub_params:
- - id: 211
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 212
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 209
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 210
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 851
- code: clickhouseFilesConfiguration
- data_type: array-map-fixed
- required: false
- man: 'Формат:
- path: somethings3.xml
xmlConfig: ''<clickhouse>......</clickhouse>'''
- sort: 60
- is_modifiable: true
- sub_params:
- - id: 234
- code: path
- data_type: string
- required: true
- default: something.xml
- regex: ^[a-zA-Z0-9]+\.xml$
- is_modifiable: false
- - id: 235
- code: xmlConfig
- data_type: string
- required: true
- default: '<clickhouse></clickhouse>'
- man: Предварительно xml необходимо отформатировать через
```
$ tr -d '\n \t' < input.xml > output.xml
```
Позже будет исправлено
- is_modifiable: false
- is_sensitive: true
- - name: create_database
- id: 186
- kind: subresource
- action: create
- subresource: database
- man: База данных создаётся на всех репликах кластера ClickHouse
- params:
- - id: 600
- code: dbName
- data_type: string
- required: true
- default: db01
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- descr: 'Пример: `db01`'
- sort: 10
- - name: create_user
- id: 185
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 596
- code: username
- data_type: string
- required: true
- default: myusername
- regex: ^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$
- maxlength: 62
- minlength: 2
- descr: 'Пример: `myusername`'
- sort: 10
- - id: 598
- code: dbName
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 30
- sub_params:
- - id: 233
- code: dbName
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 599
- code: accessHosts
- data_type: string
- required: true
- default: ::/0
- descr: 'Пример: `::/0`'
- sort: 40
- - name: delete
- id: 184
- kind: instance
- action: delete
- man: Удаление возможно только после остановки сервиса через операцию `suspend`
После выполнения операции необходимо выждать определенное кол-во времени
- params: []
- - name: delete_database
- id: 188
- kind: subresource
- action: delete
- subresource: database
- man: Необратимое действие!!!
Трижды подумай, заблокируй телефон тимлида и не выполняй это действие
- params:
- - id: 602
- code: dbName
- data_type: string
- required: true
- descr: ВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ
- - name: delete_user
- id: 187
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 601
- code: username
- required: true
- descr: Имя пользователя, созданное через операцию `create_user`
- - name: modify
- id: 189
- kind: instance
- action: modify
- params:
- - id: 844
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 213
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 214
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 215
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 216
- code: shards
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "2"
- - "3"
- man: '**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации.
**Реплика** - это точная копия данных внутри одного шарда'
- is_modifiable: false
- - id: 217
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 845
- code: clickhouseKeeperConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 218
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 219
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 220
- code: replicas
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "1"
- - "3"
- man: Если указан 0, то инстансы ClickHouse Keeper развёрнуты не будут
- is_modifiable: false
- - id: 846
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 221
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 222
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 847
- code: clickhouseConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 223
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "25.10"
- is_modifiable: false
- - id: 848
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- sub_params:
- - id: 224
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 225
- code: retain
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 226
- code: schedule
- data_type: string
- required: true
- default: ""
- 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))+)$
- is_modifiable: false
- - id: 849
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- sub_params:
- - id: 230
- code: percent
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 227
- code: enabled
- data_type: boolean
- required: true
- default: false,true
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 228
- code: schedule
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 229
- code: quota
- data_type: integer > 0
- required: true
- default: ""
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 850
- code: clickhouseFilesConfiguration
- data_type: array-map-fixed
- required: false
- man: 'Формат:
- path: somethings3.xml
xmlConfig: ''<clickhouse>......</clickhouse>'''
- sort: 50
- sub_params:
- - id: 231
- code: path
- data_type: string
- required: true
- default: something.xml
- regex: ^[a-zA-Z0-9]+\.xml$
- is_modifiable: false
- - id: 232
- code: xmlConfig
- data_type: string
- required: true
- default: '<clickhouse></clickhouse>'
- man: Предварительно xml необходимо отформатировать через
```
$ tr -d '\n \t' < input.xml > output.xml
```
Позже будет исправлено
- is_modifiable: false
- is_sensitive: true
- - name: reconcile
- id: 276
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 183
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 182
- kind: instance
- action: suspend
- man: Операция приводит к удалению всех подов
Persistent Volume остаются нетронутыми
- params: []
diff --git a/test/resources_yaml/12_s3.yaml b/test/resources_yaml/12_s3.yaml
deleted file mode 100644
index ef3345a..0000000
--- a/test/resources_yaml/12_s3.yaml
+++ /dev/null
@@ -1,130 +0,0 @@
-name: s3
-service_id: 12
-service_display_name: S3 Object Storage
-service_short_name: s3
-service_man: Руководство доступно по ссылке:
https://docs.s3.msk-1.ngcloud.ru/s3/s3.description.html
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 1
- kind: instance
- action: create
- params:
- - id: 163
- code: resourceRealm
- required: true
- default: ceph.tst.nubes.ru
- value_list:
- - ceph.tst.nubes.ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: кластер S3 для подключения
- sort: 20
- - id: 320
- code: displayName
- data_type: string
- required: true
- regex: ^[a-zA-Z0-9_]{1,61}[a-zA-Z0-9]$
- descr: Человеко-читаемое имя (транслит из Elma) - передаётся имя клиента
- sort: 10
- - name: create_sub_user
- id: 6
- kind: subresource
- action: create
- subresource: sub_user
- params:
- - id: 60
- code: subUserName
- data_type: string
- required: true
- - id: 61
- code: subUserAccess
- data_type: string
- required: true
- value_list:
- - read
- - write
- - readwrite
- - full
- - name: delete
- id: 5
- kind: instance
- action: delete
- params: []
- - name: delete_sub_user
- id: 7
- kind: subresource
- action: delete
- subresource: sub_user
- params:
- - id: 63
- code: subUserName
- data_type: string
- required: true
- descr: subUserName. По идее услуга уже создана - должен передаваться из ЛК
- - name: modify
- id: 4
- kind: instance
- action: modify
- man: При первичном вызове операции услуга Trial прекращает действие
- params:
- - id: 50
- code: maxSizeGbPerUser
- data_type: integer > 0
- required: false
- maxvalue: 50000
- minvalue: 1
- descr: maxSizeGb. Передаём руками
- man: maxSizeGb. Передаём руками
- - id: 51
- code: maxObjectsPerBucket
- data_type: integer > 0
- required: false
- maxvalue: 1e+07
- minvalue: 1
- descr: Квота на бакет. Кол-во объектов. Передаём руками
- man: Квота на бакет. Кол-во объектов. Передаём руками
- - id: 52
- code: maxBucketsPerUser
- data_type: integer > 0
- required: false
- maxvalue: 1000
- minvalue: 1
- descr: Квота на пользователя. Количество бакетов пользователя. Передаём руками
- man: Квота на пользователя. Количество бакетов пользователя. Передаём руками
- - name: reconcile
- id: 407
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 3
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 2
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/13_s3bucket.yaml b/test/resources_yaml/13_s3bucket.yaml
deleted file mode 100644
index 68e506c..0000000
--- a/test/resources_yaml/13_s3bucket.yaml
+++ /dev/null
@@ -1,90 +0,0 @@
-name: s3bucket
-service_id: 13
-service_display_name: S3 бакет
-service_short_name: s3bucket
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 51
- kind: instance
- action: create
- params:
- - id: 124
- code: s3UserUid
- data_type: uuid
- required: true
- ref_svc_id: 12
- descr: UID Корневой услуги S3. На основе него будет создан бакет.
- - id: 125
- code: bucketName
- data_type: string
- required: true
- descr: Имя бакета s3
- - id: 126
- code: maxSize
- required: true
- default: "-1"
- descr: Максимальный размер бакета s3. Если поставить -1, будет безлимит. Размер указывается в Bytes
- man: Максимальный размер бакета s3. Если поставить 0, будет безлимит. Размер указывается в Bytes
- - id: 127
- code: readAll
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Публичный доступ на чтение позволяет любому пользователю интернета скачивать объекты из бакета.
- - id: 128
- code: listAll
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Публичный доступ к листингу позволяет любому пользователю интернета получить список объектов в бакете.
- - id: 129
- code: corsAll
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Публичный доступ к чтению настроек позволяет любому пользователю интернета читать конфигурации CORS
- - id: 130
- code: placement
- data_type: string
- required: true
- default: HOT
- value_list:
- - HOT
- - COLD
- descr: Класс хранилища, который используется по умолчанию при загрузке объектов. Чем холоднее, тем дешевле место, но дороже обращения
- - name: delete
- id: 52
- kind: instance
- action: delete
- params: []
diff --git a/test/resources_yaml/148_vc_mgmt_sthutrval_cluster.yaml b/test/resources_yaml/148_vc_mgmt_sthutrval_cluster.yaml
deleted file mode 100644
index 4fedcb3..0000000
--- a/test/resources_yaml/148_vc_mgmt_sthutrval_cluster.yaml
+++ /dev/null
@@ -1,176 +0,0 @@
-name: vc_mgmt_sthutrval_cluster
-service_id: 148
-service_display_name: Менеджмент Kubernetes кластер Штурвал
-service_short_name: vcMgmtSthutrvalCluster
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 258
- kind: instance
- action: create
- params:
- - id: 771
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 91
- code: resourceRealm
- data_type: string
- required: true
- default: sandbox.nubes.ru
- value_list:
- - sandbox.nubes.ru
- descr: Облако в котором будет развёрнут тенант
- man: Выбрать платформу из списка
**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
- is_modifiable: false
- - id: 89
- code: clusterName
- data_type: string
- required: true
- default: example-ywasgmh6
- regex: (?=^.{1,63}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- is_modifiable: false
- - id: 772
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 90
- code: appVersion
- data_type: string
- required: true
- default: 2.13.1
- value_list:
- - 2.13.1
- - 2.12.1
- - 2.11.0
- is_modifiable: false
- - id: 773
- code: controlPlaneConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 92
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy представлены исходя из ресурсной платформы, которая была выбрана
- is_modifiable: false
- - id: 93
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- is_modifiable: false
- - id: 94
- code: count
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- is_modifiable: false
- - id: 774
- code: workerConfiguration
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 40
- sub_params:
- - id: 97
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- is_modifiable: false
- - id: 98
- code: count
- data_type: integer > 0
- required: true
- default: "2"
- is_modifiable: false
- - id: 95
- code: groupName
- data_type: string
- required: true
- default: workers-gj7zkkhv
- regex: (?=^.{3,40}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- man: Имена групп воркеров в рамках кластера должно быть уникальным
- is_modifiable: false
- - id: 96
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy представлены исходя из ресурсной платформы, которая была выбрана
- is_modifiable: false
- - id: 775
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- sub_params:
- - id: 101
- code: needExternalAddressIngress
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к Ingress
- is_modifiable: false
- - id: 102
- code: accessIpListIngress
- data_type: json
- required: true
- default: '[]'
- man: 'Access IP List для подключения к Ingress. Указывается массив. Если передан пустой массив, доступ выделяется всем
Пример: **["0.0.0.0/0"]** или **[]** или **["178.4.13.2", "178.4.14.0/24"]**'
- is_modifiable: false
- - id: 99
- code: needExternalAddressAPI
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к kubernetes API. Пока нельзя выставить false
- is_modifiable: false
- - id: 100
- code: accessIpListAPI
- data_type: json
- required: true
- default: '[]'
- man: 'Access IP List для подключения к Kubernetes API. Указывается массив. Если передан пустой массив, доступ выделяется всем
Пример: **["0.0.0.0/0"]** или **[]** или **["178.4.13.2", "178.4.14.0/24"]**'
- is_modifiable: false
diff --git a/test/resources_yaml/149_valo_tenant.yaml b/test/resources_yaml/149_valo_tenant.yaml
deleted file mode 100644
index 0e23f17..0000000
--- a/test/resources_yaml/149_valo_tenant.yaml
+++ /dev/null
@@ -1,249 +0,0 @@
-name: valo_tenant
-service_id: 149
-service_display_name: VALO Cloud
-service_short_name: valoTenant
-service_man: '# Инструкция по развертыванию Тенант Valo через платформу
## 1. Общая информация
Тенант Valo — логический изолированный экземпляр сервиса VALO Cloud, предоставляющий защищённое облачное хранилище, синхронизацию данных и доступ к документам с различных устройств. При создании тенант автоматически разворачивается в тестовом режиме сроком на 2 месяца. Перевод в промышленную эксплуатацию выполняется отдельной операцией.
### Доступные операции
* **create** — создание нового тенанта в тестовом режиме сроком на 2 месяца.
* **modify** — изменение настроек тенанта, включая перевод из ТЕСТ в ПРОД.
* **suspend** — выключение (приостановка работы) тенанта.
* **resume** — включение ранее приостановленного тенанта.
* **delete** — удаление тенанта; доступно только после выполнения операции suspend.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: платформа, на которой будет создан тенант.
Пример значения: `valo.ngcloud.ru`.
### DNS-Префикс
Описание: Будет добавлено в зону valo.ngcloud.ru
Пример значения: `mysimpledomain`.
### Параметры хранилища
Описание: Сколько места будет выделено под использование в тенанте. Данные хранятся в S3. Размер указывается в Gigabytes
Пример значения: `10`.
### Настройки тенанта
Описание: Ряд конфигурации Valo-тенанта, такие как настройки пользователя и доступного функционала
Пример значения: `опционально в рамках настройки`.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
Достаточно развернуть тенант в ТЕСТ. Срок предоставляется в 2 месяца. По истечению срока тенант автоматически переводится в `suspend` на стороне ресурсной платформы
### Промышленное окружение
Для разблокировки используйте операцию `modify`
---
## 4. Выходные параметры
Услуга предоставляет следующие выходные параметры (формируются в процессе операций):
### Статус тенанта
Отражает текущее состояние и параметры.
---
## 5. Дополнительная информация
Тенант всегда создаётся в режиме ТЕСТ и не может быть сразу переведён в ПРОД без операции modify.
Удаление тенанта возможно только после его выключения с помощью операции suspend.
Срок тестового режима составляет 2 месяца с момента создания.
Операции suspend и resume используются для временного управления доступностью сервиса без потери конфигурации.
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 202
- kind: instance
- action: create
- params:
- - id: 655
- code: resourceRealm
- data_type: string
- required: true
- default: valo.ngcloud.ru
- value_list:
- - valo.ngcloud.ru
- func: getAvailableResourceRealms
- sort: 10
- - id: 656
- code: domain
- data_type: string
- required: true
- regex: ^[a-z0-9](?:[a-z0-9-]{3,61}[a-z0-9])?$
- maxlength: 61
- minlength: 3
- descr: Будет добавлено в зону valo.ngcloud.ru
- sort: 20
- - id: 657
- code: valoOptions
- data_type: map-fixed
- required: true
- default: '{}'
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 26
- code: ffLogging
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 28
- code: userCount
- data_type: integer > 0
- required: true
- default: "10"
- is_modifiable: false
- - id: 20
- code: requestApproveMaxPeriod
- data_type: integer > 0
- required: true
- default: "2"
- descr: Максимальное значение периода согласования (в днях)
- is_modifiable: false
- - id: 21
- code: ffOnlineEditor
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 22
- code: ffWatermark
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 23
- code: ffUserImport
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 24
- code: ffThemes
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 25
- code: ffPublicLink
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 658
- code: s3Storage
- data_type: integer > 0
- required: true
- default: "10"
- maxvalue: 999
- minvalue: 1
- descr: Параметр указывается в `Gb`
- man: Данные хранятся в отдельном экземпляре S3
- sort: 30
- is_modifiable: true
- - name: delete
- id: 206
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 203
- kind: instance
- action: modify
- params:
- - id: 659
- code: valoOptions
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 30
- code: requestApproveMaxPeriod
- data_type: integer > 0
- required: true
- default: ""
- descr: Максимальное значение периода согласования (в днях)
- is_modifiable: false
- - id: 31
- code: ffOnlineEditor
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 32
- code: ffWatermark
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 33
- code: ffUserImport
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 34
- code: ffThemes
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 35
- code: ffPublicLink
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 36
- code: ffLogging
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: Тарифная опция
- is_modifiable: false
- - id: 29
- code: userCount
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 660
- code: s3Storage
- data_type: integer > 0
- required: true
- descr: Параметр указывается в `Gb`
- man: Данные хранятся в отдельном экземпляре S3
- sort: 20
- - name: resume
- id: 205
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 204
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/150_k8s_sthutrval_cluster.yaml b/test/resources_yaml/150_k8s_sthutrval_cluster.yaml
deleted file mode 100644
index 52f6564..0000000
--- a/test/resources_yaml/150_k8s_sthutrval_cluster.yaml
+++ /dev/null
@@ -1,371 +0,0 @@
-name: k8s_sthutrval_cluster
-service_id: 150
-service_display_name: Kubernetes кластер Штурвал
-service_short_name: k8sSthutrvalCluster
-service_man: Перед разворачиванием убедиться, что в облаке есть 2 свободных невыделенных IP в пуле
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 108
- kind: instance
- action: create
- params:
- - id: 750
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 58
- code: nsxtUid
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 59
- code: clusterName
- data_type: string
- required: true
- default: example-kcrwfrbd
- regex: (?=^.{1,63}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- is_modifiable: false
- - id: 57
- code: vdcUid
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 751
- code: controlPlaneConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 62
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 63
- code: count
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- is_modifiable: false
- - id: 61
- code: sizingPolicy
- data_type: string
- required: true
- default: '[]'
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 752
- code: workerConfiguration
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 64
- code: groupName
- data_type: string
- required: true
- default: workers-rbrr6za5
- regex: (?=^.{3,40}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- man: Имена групп воркеров в рамках кластера должно быть уникальным
- is_modifiable: false
- - id: 65
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 66
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: "50"
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 67
- code: count
- data_type: integer > 0
- required: true
- default: "2"
- is_modifiable: false
- - id: 753
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- is_modifiable: true
- sub_params:
- - id: 68
- code: needExternalAddressAPI
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к kubernetes API. Пока нельзя выставить false
- is_modifiable: false
- - id: 69
- code: accessIpListAPI
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Kubernetes API. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 70
- code: needExternalAddressIngress
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к Ingress
- is_modifiable: false
- - id: 71
- code: accessIpListIngress
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Ingress. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 755
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 72
- code: appVersion
- data_type: string
- required: true
- default: 2.13.1
- value_list:
- - 2.13.1
- - 2.12.1
- - 2.11.0
- is_modifiable: false
- - name: create_user
- id: 281
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 869
- code: admins
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 10
- sub_params:
- - id: 236
- code: email
- data_type: string
- required: true
- default: ""
- man: Пользователи будут добавлены, только если они зарегистрированы в личном кабинете
- is_modifiable: false
- - name: delete
- id: 109
- kind: instance
- action: delete
- params: []
- - name: delete_user
- id: 282
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 870
- code: admins
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 237
- code: email
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: modify
- id: 110
- kind: instance
- action: modify
- man: При изменении кол-ва узлов, удаления группы, если в этой группе есть поды на которых есть PV с named-дисками, удаляться ноды сами НЕ БУДУТ.
Убедитесь, что они будут смигрированы на другие ноды в процессе прежде чем группа узлов/узлы будут удалены
- params:
- - id: 756
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 73
- code: appVersion
- data_type: string
- required: true
- default: ""
- value_list:
- - 2.13.1
- - 2.12.1
- - 2.11.0
- is_modifiable: false
- - id: 757
- code: controlPlaneConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 74
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 75
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: ""
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 76
- code: count
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- is_modifiable: false
- - id: 758
- code: workerConfiguration
- data_type: array-map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 77
- code: groupName
- data_type: string
- required: true
- default: workers-kk0fpv6w
- regex: (?=^.{3,40}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- man: Имена групп воркеров в рамках кластера должно быть уникальным
- is_modifiable: false
- - id: 78
- code: sizingPolicy
- data_type: string
- required: true
- default: ""
- value_list:
- - '{}'
- man: Доступные sizing Policy можно обновлять через услугу `Виртуальный датацентр`
- is_modifiable: false
- - id: 79
- code: sizingDisk
- data_type: integer > 0
- required: true
- default: ""
- man: Дисковая политика берётся из услуги VDC, первый в списке
- is_modifiable: false
- - id: 80
- code: count
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 759
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 81
- code: needExternalAddressAPI
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к kubernetes API. Пока нельзя выставить false
- is_modifiable: false
- - id: 82
- code: accessIpListAPI
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Kubernetes API. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 83
- code: needExternalAddressIngress
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Выделяет внешний IP для доступа к Ingress
- is_modifiable: false
- - id: 84
- code: accessIpListIngress
- data_type: json
- required: true
- default: '[]'
- man: Access IP List для подключения к Ingress. Указывается массив. Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: reconcile
- id: 253
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 174
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 173
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/151_k8s_openbao.yaml b/test/resources_yaml/151_k8s_openbao.yaml
deleted file mode 100644
index 33f4a21..0000000
--- a/test/resources_yaml/151_k8s_openbao.yaml
+++ /dev/null
@@ -1,391 +0,0 @@
-name: k8s_openbao
-service_id: 151
-service_display_name: Vault
-service_short_name: k8sOpenbao
-service_man: '# Инструкция по развертыванию Хранилища секретов через платформу
## 1. Общая информация
Хранилище секретов — сервис централизованного и защищённого хранения чувствительных данных (секретов, ключей, конфигураций). Предназначен для использования приложениями и сервисами в Kubernetes с управлением доступом на основе ролей.
В качестве приложения используется открытый проект OpenBao с поддержкой кластерного режима RAFT.
### Доступные операции
**create** — Создание хранилища секретов и инициализация кластера.
**delete** — Удаление хранилища секретов с полной очисткой всех связанных сущностей.
**modify** — Изменение параметров развернутого хранилища секретов.
**suspend** — Приостановка работы кластера без удаления Persistent Volume.
**resume** — Возобновление работы кластера с автоматическим unseal всех нод.
**restart** — Поочередный перезапуск нод с последующим подключением в кластер.
**create_kv** — Создание Key/Value хранилища версии V2.
**delete_kv** — Удаление Key/Value хранилища со всеми содержащимися секретами.
**create_secrets** — Создание секрета внутри Key/Value хранилища.
**delete_secrets** — Удаление секрета из Key/Value хранилища.
**update_secrets** — Обновление значения секрета.
**recovery_secrets** — Откат секрета к указанной версии.
**create_role** — Создание роли для управления Key/Value хранилищем или секретами.
**update_role** — Обновление параметров роли.
**delete_role** — Удаление роли доступа.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: Кластер Kubernetes, в котором будет развернуто приложение.
Формат значения: имя Kubernetes-кластера.
### Имя домена
Описание: Доменное имя сервиса. При указании полного FQDN выполняется проверка DNS A-записи или добавляется А-запись в техническую зону.
Формат значения: secrets.domain.com / mysecretdomain.
### Кол-во реплик
Описание: Количество узлов в кластере.
Формат значения: целое число.
### Квота ядра пода
Описание: Лимит CPU для одного узла. Указывается в milicores (1000 milicores = 1 CPU).
Формат значения: целое число.
### Квота памяти пода
Описание: Лимит оперативной памяти для одного узла. Указывается в megabytes.
Формат значения: целое число.
### Размер диска под хранение секретов
Описание: Объем диска для хранения данных. Фактический объем равен значению, умноженному на количество реплик. Указывается в Gigabytes
Формат значения: целое число.
### Версия OpenBao
Описание: Версия OpenBao для развертывания сервиса.
Формат значения: выбор из предоставленного списка версий.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
Кол-во реплик: 2.
Квота ядра пода: 200.
Квота памяти пода: 256.
Размер диска под хранение секретов: 1.
Версия OpenBao: актуальная стабильная версия.
### Промышленное окружение
Кол-во реплик: от 3.
Квота ядра пода: от 1000.
Квота памяти пода: от 1024.
Размер диска под хранение секретов: от 10.
Версия OpenBao: актуальная стабильная версия.
---
## 4. Выходные параметры
Настройки внутри хранилища (kv/secrets/roles) — конфигурации Key/Value, секретов и ролей, созданные соответствующими операциями.
Настройки самого хранилище (сайзинг, объемы) — параметры ресурсов и хранилища данных, примененные к сервису.
Статус кластера (running / suspended) — текущее состояние работы кластера.
url для подключения к веб — адрес веб-интерфейса сервиса.
---
## 5. Дополнительная информация
При удалении хранилища все данные и настройки безвозвратно удаляются.
При использовании доменного имени требуется корректная настройка DNS.
Операции управления секретами и ролями выполняются только после успешного создания хранилища.
Удаление кластера производится через операцию `suspend`, а удаление становится доступно через 14 дней после остановки кластера
Правило выше не относится к операции `delete_kv` / `delete_secrets` / `delete_role`'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 210
- kind: instance
- action: create
- params:
- - id: 663
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Кластер Kubernetes в котором будет развёрнуто приложение
- man: Выбрать платформу из списка
**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
- sort: 0
- - id: 664
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 8000
- minvalue: 250
- descr: 'Пример: `500`'
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- sort: 30
- is_modifiable: true
- - id: 665
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "3"
- maxvalue: 7
- minvalue: 1
- descr: 'Пример: `3`'
- sort: 20
- is_modifiable: true
- - id: 666
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 256
- descr: 'Пример: `2048`'
- man: Указывается в Megabytes
- sort: 40
- is_modifiable: true
- - id: 667
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "10"
- maxvalue: 999
- minvalue: 1
- descr: 'Пример: `10`'
- man: Указывается в Gigabytes
- sort: 50
- is_modifiable: true
- - id: 668
- code: appVersion
- data_type: string
- required: true
- default: 2.5.2
- value_list:
- - 2.5.2
- descr: Выбрать из списка
- sort: 60
- is_modifiable: true
- - id: 669
- code: domain
- data_type: string
- required: true
- default: bao-ovkw1qbi
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - name: create_kv
- id: 212
- kind: subresource
- action: create
- subresource: kv
- params:
- - id: 675
- code: kvName
- data_type: string
- required: true
- default: kvname-bbycmhbz
- regex: ^[a-zA-Z0-9-]{1,24}$
- man: Будет создан `v2 тип движка`
Уникальное в рамках услуги
- sort: 10
- - name: create_policy
- id: 237
- kind: subresource
- action: create
- subresource: policy
- params:
- - id: 728
- code: policySettings
- data_type: array-map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 50
- code: capabilities
- data_type: json
- required: true
- default: '["read", "list"]'
- man: 'Пример: `["create", "read", "update", "delete", "list", "sudo"]`
Только чтение: `["list", "read"]`
Изменение: `["read", "list", "create", "update", "delete"]`'
- is_modifiable: false
- - id: 49
- code: path
- data_type: string
- required: true
- default: ""
- man: 'Пример 1: `mykv/*`
Пример 2: `mykv/path/*`
Пример 3: `mykv/path/to/secret`
'
- is_modifiable: false
- - id: 729
- code: policyName
- required: true
- default: policy-xqjoiy6t
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- man: Сделано для дальнейшего удобного использования
- sort: 10
- - name: create_secrets
- id: 214
- kind: subresource
- action: create
- subresource: secrets
- params:
- - id: 677
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- man: Если список пустой, создайте kv через операцию `create_kv`
- sort: 10
- - id: 678
- code: secretPath
- data_type: string
- required: true
- default: path/to/mysecret
- regex: ^[a-zA-Z0-9_-]+(?:\/[a-zA-Z0-9_-]+)*$
- descr: 'Пример: `path` или `road/to/path`'
- sort: 20
- - id: 679
- code: secretData
- data_type: map
- required: true
- descr: Хотя бы один секрет необходимо добавить
- man: Данные не сохраняются в ЛК, в дальнейшем при обновлении секретов это необходимо учитывать
- sort: 30
- - name: delete
- id: 231
- kind: instance
- action: delete
- params: []
- - name: delete_kv
- id: 213
- kind: subresource
- action: delete
- subresource: kv
- man: '**ОСТОРОЖНО**
Удаление KV подразумевает удаление ВСЕХ secrets внутри этой KV'
- params:
- - id: 676
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - name: delete_policy
- id: 239
- kind: subresource
- action: delete
- subresource: policy
- params:
- - id: 732
- code: policyName
- data_type: string
- required: true
- - name: delete_secrets
- id: 233
- kind: subresource
- action: delete
- subresource: secrets
- params:
- - id: 726
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - id: 727
- code: secretPath
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 20
- depends_on: kvName
- - name: modify
- id: 211
- kind: instance
- action: modify
- params:
- - id: 670
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- descr: 'Пример: `3`'
- sort: 10
- - id: 671
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 8000
- minvalue: 250
- descr: 'Пример: `500`'
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- sort: 20
- - id: 672
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 256
- descr: 'Пример: `2048`'
- man: Указывается в Megabytes
- sort: 30
- - id: 673
- code: resourceDisk
- data_type: integer > 0
- required: true
- maxvalue: 999
- minvalue: 1
- descr: 'Пример: `10`'
- man: Указывается в Gigabytes
- sort: 40
- - id: 674
- code: appVersion
- data_type: string
- required: true
- value_list:
- - 2.5.2
- descr: Выбрать из списка
- sort: 50
- - name: reconcile
- id: 236
- kind: action
- action: reconcile
- params: []
- - name: recovery_secrets
- id: 232
- kind: subresource
- action: recovery
- subresource: secrets
- man: Данная операция подразумевает откат на конкретную версию в секрете.
**Это не восстановление удалённого секрета**
- params:
- - id: 723
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - id: 724
- code: secretPath
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 20
- depends_on: kvName
- - id: 725
- code: secretVersion
- data_type: string
- required: true
- depends_on: kvName,secretPath
- - name: restart
- id: 234
- kind: action
- action: restart
- params: []
- - name: resume
- id: 216
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 215
- kind: instance
- action: suspend
- params: []
- - name: update_policy
- id: 238
- kind: subresource
- action: update
- subresource: policy
- params:
- - id: 730
- code: policyName
- data_type: string
- required: true
- sort: 10
- - id: 731
- code: policySettings
- data_type: array-map-fixed
- required: true
- descr: Производится полная перезапись политики!
- sort: 20
- sub_params:
- - id: 52
- code: capabilities
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 51
- code: path
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: update_secrets
- id: 230
- kind: subresource
- action: update
- subresource: secrets
- params:
- - id: 719
- code: kvName
- data_type: string
- required: true
- descr: Выберите из списка
- sort: 10
- - id: 720
- code: secretPath
- data_type: string
- required: true
- descr: Выберите из списка
- man: Предварительно необходимо выбрать параметр `Имя Key/Value хранилища`
- sort: 20
- depends_on: kvName
- - id: 721
- code: needFullUpdateSecret
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Если выбрать `true`, будет создана новая версия секрета `с нуля`
Если выбрать `false`, будет создана новая версия секрета с данными прошлой ревизии, а переданные данные в операции либо будут модифицированы, либо будут добавлены
- sort: 30
- - id: 722
- code: secretData
- data_type: map
- required: true
- descr: Хотя бы один секрет необходимо добавить
- sort: 40
diff --git a/test/resources_yaml/163_llm_ai.yaml b/test/resources_yaml/163_llm_ai.yaml
deleted file mode 100644
index d749f60..0000000
--- a/test/resources_yaml/163_llm_ai.yaml
+++ /dev/null
@@ -1,189 +0,0 @@
-name: llm_ai
-service_id: 163
-service_display_name: LLM
-service_short_name: llmAi
-service_man: '## 1. Общая информация
LLMaaS (Large Language Model as a Service) — это сервис для доступа к языковым моделям через OpenAI-совместимое API.
Платформа позволяет создавать организации (тенанты), команды, выпускать и управлять API-ключами, устанавливать лимиты на использование.
---
## Доступные операции
- **create** — Создание организации в LLMaaS
- **delete** — Удаление организации
- **create_team** — Создание команды внутри организации
- **modify_team** — Редактирование команды (модели, RPM, TPM)
- **delete_team** — Удаление команды
- **create_secrets** — Создание API-ключа
- **update_secrets** — Обновление параметров API-ключа
- **delete_secrets** — Удаление API-ключа
---
## 2. Параметры создания организации
Ниже перечислены параметры, которые необходимо указать при создании организации:
* **Платформа для развертывания**
Выбирается автоматически, изменять не нужно.
* **Период бюджета**
Срок жизни организации в днях.
Пример: `30`
---
## 3. Параметры создания команды
* **Имя команды**
Уникальное имя команды в рамках организации.
Пример: `production`
* **Модель**
Название модели, доступной для команды.
Пример: `gpt-oss-120b`
* **Лимит запросов в минуту (RPM)**
Максимальное количество запросов к API в минуту.
Пример: `60`
* **Лимит токенов в минуту (TPM)**
Максимальное количество токенов (входящих + исходящих) в минуту.
Пример: `100000`
---
## 4. Параметры редактирования команды
Для существующей команды можно изменить:
* **Модель**
Новая модель для команды.
Пример: `gpt-oss-20b`
* **Лимит запросов в минуту (RPM)**
Новое значение RPM.
Пример: `120`
* **Лимит токенов в минуту (TPM)**
Новое значение TPM.
Пример: `200000`
---
## 5. Параметры создания API-ключа
Ниже перечислены параметры, которые необходимо указать при создании API-ключа:
* **Имя ключа**
Уникальное имя ключа в рамках организации.
Пример: `prod-key`
* **Команда**
Имя команды для привязки ключа. Если не указано — ключ привязывается к команде `main`.
Пример: `production`
* **Модель**
Название модели, доступной для данного ключа.
Пример: `gpt-oss-120b`
* **Лимит запросов в минуту (RPM)**
Максимальное количество запросов к API в минуту.
Пример: `60`
* **Лимит токенов в минуту (TPM)**
Максимальное количество токенов (входящих + исходящих) в минуту.
Пример: `100000`
**Важно:** Лимиты API-ключа не могут превышать лимиты команды, к которой он привязан.
При превышении операция будет отклонена с ошибкой.
Перед созданием ключа убедитесь, что `RPM <= team.RPM` и `TPM <= team.TPM`.
---
## 6. Параметры обновления API-ключа
Для уже существующего ключа можно изменить параметры. Все параметры являются опциональными:
* **Имя ключа**
Имя обновляемого ключа.
Пример: `prod-key`
* **Модель**
Новое название модели.
Пример: `gpt-oss-20b`
* **Лимит запросов в минуту (RPM)**
Новое значение RPM.
Пример: `120`
* **Лимит токенов в минуту (TPM)**
Новое значение TPM.
Пример: `200000`
**Важно:** При обновлении лимитов API-ключа новые значения не могут превышать лимиты команды.
Если указать значения выше командных, операция завершится ошибкой.
Указывайте `RPM <= team.RPM` и `TPM <= team.TPM`.
Команда определяется автоматически по стейту услуги — изменить привязку к другой команде через эту операцию нельзя.
---
## 7. Параметры удаления API-ключа
* **Команда**
Имя команды, к которой привязан ключ.
Пример: `production`
* **Имя ключа**
Имя удаляемого ключа.
Пример: `prod-key`
---
## 8. Параметры удаления команды
* **Имя команды**
Имя удаляемой команды.
Пример: `production`
---
## 9. Параметры удаления организации
Удаление организации не требует дополнительных параметров — удаляется вся организация со всеми командами и ключами.
---
## 10. Выходные параметры
После успешного создания организации платформа возвращает:
* **connectionUrl**
URL для доступа к inference API (OpenAI-совместимый).
Пример: `https://api.aillm.ru`
---
## 12. Пример использования API
После получения API-ключа клиент может обращаться к LLMaaS напрямую:
**Запрос к chat completions:**
```bash
curl https://api.aillm.ru/v1/chat/completions \
-H "Authorization: Bearer sk-..." \
-H "Content-Type: application/json" \
-d ''{
"model": "gpt-oss-120b",
"messages": [
{"role": "user", "content": "Привет!"}
]
}''
```
**Получение списка доступных моделей:**
```bash
curl https://api.aillm.ru/v1/models \
-H "Authorization: Bearer sk-..."
```
'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 271
- kind: instance
- action: create
- params:
- - id: 826
- code: resourceRealm
- data_type: string
- required: true
- default: llmAi.aillm.ru
- value_list:
- - llmAi.aillm.ru
- func: getAvailableResourceRealms
- - name: create_secrets
- id: 274
- kind: subresource
- action: create
- subresource: secrets
- params:
- - id: 833
- code: models
- data_type: array
- required: true
- sort: 20
- depends_on: teamName
- - id: 834
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- minvalue: 1
- - id: 835
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- minvalue: 1
- - id: 857
- code: keyName
- data_type: string
- required: true
- sort: 10
- - id: 859
- code: teamName
- data_type: string
- required: true
- sort: 15
- - name: create_team
- id: 278
- kind: subresource
- action: create
- subresource: team
- params:
- - id: 858
- code: teamName
- data_type: string
- required: true
- - id: 860
- code: models
- data_type: array
- required: true
- - id: 861
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- - id: 862
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- - name: delete
- id: 273
- kind: instance
- action: delete
- params: []
- - name: delete_secrets
- id: 275
- kind: subresource
- action: delete
- subresource: secrets
- params:
- - id: 836
- code: keyName
- data_type: string
- required: true
- depends_on: teamName
- - id: 876
- code: teamName
- data_type: string
- required: true
- sort: 10
- - name: delete_team
- id: 280
- kind: subresource
- action: delete
- subresource: team
- params:
- - id: 868
- code: teamName
- data_type: string
- required: true
- - name: modify_team
- id: 279
- kind: subresource
- action: modify
- subresource: team
- params:
- - id: 864
- code: teamName
- data_type: string
- required: true
- - id: 865
- code: models
- data_type: array
- required: true
- depends_on: teamName
- - id: 873
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- minvalue: 1
- - id: 874
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- minvalue: 1
- - name: update_secrets
- id: 277
- kind: subresource
- action: update
- subresource: secrets
- man: Данная операция предназначена для управления лимитами и моделями
- params:
- - id: 852
- code: keyName
- data_type: string
- required: true
- depends_on: teamName
- - id: 853
- code: models
- data_type: array
- required: true
- depends_on: teamName
- - id: 854
- code: rpmLimit
- data_type: integer > 0
- required: true
- default: "60"
- - id: 855
- code: tpmLimit
- data_type: integer > 0
- required: true
- default: "100000"
- - id: 875
- code: teamName
- data_type: string
- required: true
- sort: 5
diff --git a/test/resources_yaml/19_vc_org.yaml b/test/resources_yaml/19_vc_org.yaml
deleted file mode 100644
index 001435f..0000000
--- a/test/resources_yaml/19_vc_org.yaml
+++ /dev/null
@@ -1,140 +0,0 @@
-name: vc_org
-service_id: 19
-service_display_name: Организация в Cloud Director
-service_short_name: vcOrg
-service_man: '# Инструкция по развертыванию Организация в Cloud Director через платформу
## 1. Общая информация
Сервис **Организация в Cloud Director** предназначен для управления изолированными организационными единицами (тенантами) внутри инфраструктуры Cloud Director. Он обеспечивает создание, модификацию и администрирование организаций, предоставление им облачных ресурсов, а также контроль уровня доступа. Сервис используется для организации рабочих окружений потребителей, управления жизненным циклом организаций и их сетевой инфраструктурой.
### Доступные операции
**create** — Создание новой организации с заданными характеристиками и типом доступа.
**delete** — Удаление организации после перехода в состояние suspend; приводит к удалению всех связанных сущностей.
**modify** — Изменение параметров внутри организации (на текущий момент поддерживается изменение ipSpaces).
**suspend** — Заморозка организации, ограничение возможности изменения и добавления сущностей.
**resume** — Разморозка организации, восстановление функций управления.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Платформа для развертывания
Описание: платформа, на которой будет создана организация.
Пример значения: `ngcloud.ru`.
### Тип организации
Описание: тип создаваемой организации.
Варианты:
- `iaas` — организация с прямым доступом к облаку и авторизацией через Keycloak.
- `saas` — организация под управлением Nubes, без прямого доступа к облаку.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Тип организации: `iaas` для обеспечения полного доступа к облачным ресурсам и самостоятельного управления.
### Промышленное окружение
- Тип организации: `saas` (упрощённая модель использования).
---
## 4. Выходные параметры
Услуга предоставляет следующие выходные параметры (формируются в процессе операций):
### Url организации
Для быстрого доступа в тенант
### Статус организации
Отражает текущее состояние и параметры.
---
## 5. Дополнительная информация
- Для конфигурации внешних IP внутри организации необходимо предварительно создать:
-- хотя бы один **Виртуальный датацентр (VDC)** привязанный к этой организации;
-- хотя бы один **Сетевой шлюз периметра (Edge Gateway)**, привязанный к vdc выше.
- Удаление организации возможно только через 14 дней после перевода в состояние suspend.
- Удаление организации приводит к удалению всех связанных сущностей: VDC, Edge Gateway, пулов IP, сетей, ВМок и иных объектов.
- Операция suspend не останавливает виртуальные машины, но блокирует любые изменения инфраструктуры внутри организации.
- Для iaas-организаций доступ осуществляется через Keycloak.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 136
- kind: instance
- action: create
- man: '`IaaS` - Доступ в Keycloak предоставляется пользователю, который создаёт услугу
`SaaS` - Без доступа к Keycloak'
- params:
- - id: 418
- code: resourceRealm
- data_type: string
- required: true
- default: sandbox.nubes.ru
- value_list:
- - sandbox.nubes.ru
- func: getAvailableResourceRealms
- descr: Облако в котором будет развёрнут тенант
- man: Выбрать платформу из списка
**Если список не отображается**
обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
- sort: 10
- - id: 556
- code: organizationType
- data_type: string
- required: true
- default: iaas
- value_list:
- - iaas
- - saas
- man: Доступ к организации предоставляется только при выборе `iaas`
- sort: 20
- - name: create_user
- id: 283
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 871
- code: admins
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- sort: 10
- sub_params:
- - id: 238
- code: email
- data_type: string
- required: true
- default: ""
- man: Пользователи будут добавлены, только если они зарегистрированы в личном кабинете
- is_modifiable: false
- - name: delete
- id: 137
- kind: instance
- action: delete
- man: 'Удалить возможно только через 14 дней после выполнения операции `suspend`
**ОСТОРЖНО: Удаление приводит к полному удалению всех сущностей внутри этого тенанта**
Если существуют инстансы VDC, Edge, vApp, Vm или Kubernetes-кластер Штурвал, которые были созданы, из ЛК удалены не будут. Необходимо обратиться к `технической поддержке` для удаления инстансов'
- params: []
- - name: delete_user
- id: 284
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 872
- code: admins
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 239
- code: email
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: modify
- id: 207
- kind: instance
- action: modify
- man: Для возможности изменения параметров предварительно необходимо создать **Виртуальный датацентр (VDC)**, потом **Сетевой шлюз периметра (Edge Gateway)**
Также при удалении ipSpaces убедитесь, что все внешние IP удалены. В случае если хоть одна привязка vIP есть, данный ipSpace удалён **не будет**
- params:
- - id: 662
- code: vIPConfigure
- data_type: array-map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 39
- code: name
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 40
- code: count
- data_type: integer > 0
- required: true
- default: ""
- descr: 'Пример: `1`'
- is_modifiable: false
- - name: reconcile
- id: 249
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 144
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 143
- kind: instance
- action: suspend
- man: Операция **не останавливает ВМки** в облаке, но не даёт редактировать все сущности внутри тенанта
- params: []
diff --git a/test/resources_yaml/1_dummy.yaml b/test/resources_yaml/1_dummy.yaml
deleted file mode 100644
index 3292ca5..0000000
--- a/test/resources_yaml/1_dummy.yaml
+++ /dev/null
@@ -1,339 +0,0 @@
-name: dummy
-service_id: 1
-service_display_name: Болванка
-service_short_name: dummy
-service_man: '## Болванка для тестов.
А это просто много букв, чтобы посмотреть, как ведет себя текст при переполнении контейнера.
``` json
{
"iamServiceUrl": "https://auth-api-test.ngcloud.ru/api/v1/user",
"idpResponse": {
"prefix": {
"charset": "",
"status_text": "Request Time-out",
"text": true,
"errordetail": "",
"filecontent": "Connection Timeout",
"responseheader": {},
"header": "",
"statuscode": "408 Request Time-out",
"status_code": 408,
"mimetype": "Unable to determine MIME type of file."
}
}
}
```'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 18
- kind: instance
- action: create
- man: Это мануал к операции CREATE сервиса Болванка
- params:
- - id: 198
- code: durationMs
- data_type: integer >= 0
- required: true
- default: "0"
- descr: перед завершением подождать (sleep) столько миллисекунд
- man: перед завершением подождать (sleep) столько миллисекунд
- sort: 20
- is_modifiable: true
- - id: 199
- code: failAtStart
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, завершить джоб, ничего не записывая в cmdb
- man: '**Операция не будет завершена**
Она будет в постоянном статусе PENDING, однако в Jenkins Job завершится с ошибкой'
- sort: 30
- is_modifiable: true
- - id: 200
- code: failInProgress
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdb
- man: если true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdb
- sort: 40
- is_modifiable: true
- - id: 201
- code: whereFail
- data_type: integer > 0
- required: false
- default: "1"
- value_list:
- - "1"
- - "2"
- - "3"
- descr: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- man: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- sort: 50
- is_modifiable: true
- - id: 242
- code: resourceRealm
- data_type: string
- required: true
- default: dummy
- value_list:
- - dummy
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование ресурсной платформы для подключения
- sort: 10
- - id: 286
- code: bodymessage
- data_type: string
- required: false
- descr: Дата, уходящая в Vault
- man: Дата, уходящая в Vault
- sort: 60
- is_modifiable: true
- - id: 321
- code: mapExample
- data_type: map
- required: false
- is_modifiable: true
- sub_params:
- - id: 1
- code: subparam1
- data_type: string
- required: false
- default: ""
- descr: это для администратора
- man: это для пользователя
- is_modifiable: false
- - id: 3
- code: secret
- data_type: string
- required: false
- default: ""
- descr: это секрет
- man: значение параметра маскируется. Write Only
- is_modifiable: false
- is_sensitive: true
- - id: 2
- code: subparam2
- data_type: string
- required: false
- default: ""
- is_modifiable: false
- - id: 322
- code: jsonExample
- data_type: json
- required: false
- descr: Для тестирования интерфейса
- man: Для тестирования интерфейса. Сюда можно писать корректный json
- is_modifiable: true
- - id: 396
- code: nestedRefExample
- required: false
- - id: 647
- code: mapFixed
- data_type: map-fixed
- required: false
- descr: Новый тип поля
- sub_params:
- - id: 13
- code: bol1
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Булевский, обязательный
- man: Булевский, обязательный. Проверить, как воспринимается снятый флаг
- is_modifiable: false
- - id: 14
- code: minStr1
- data_type: string
- required: true
- default: abracadabra
- value_list:
- - abracadabra
- descr: не меньше 10 символов
- is_modifiable: false
- - id: 10
- code: param1
- data_type: integer > 0
- required: true
- default: "1"
- descr: Integer, secret
- man: integer > 0, sensitive data (secret)
- is_modifiable: false
- is_sensitive: true
- - id: 11
- code: param2
- data_type: string
- required: true
- default: "1"
- value_list:
- - '["1"'
- - '"2"'
- - '"3"]'
- descr: Дескрипшен
- man: Выбор из списка 1,2,3
- is_modifiable: false
- - id: 12
- code: param3
- data_type: integer > 0
- required: true
- default: "1"
- descr: целое положительное
- man: int > 0, обязательный
- is_modifiable: false
- - id: 654
- code: arrayMapFixedExample
- data_type: array-map-fixed
- required: false
- descr: Array of map-fixed
- sub_params:
- - id: 18
- code: bol1
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- is_modifiable: false
- - id: 19
- code: minStr1
- data_type: string
- required: true
- default: ""
- value_list:
- - abracadabra
- descr: не меньше 10 символов
- is_modifiable: false
- - id: 15
- code: param1
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- is_sensitive: true
- - id: 16
- code: param2
- data_type: string
- required: true
- default: ""
- value_list:
- - '["1"'
- - '"2"'
- - '"3"]'
- is_modifiable: false
- - id: 17
- code: param3
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 863
- code: arr
- data_type: array
- required: true
- value_list:
- - test
- - "2"
- - val1
- - name: delete
- id: 71
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 92
- kind: instance
- action: modify
- params:
- - id: 287
- code: durationMs
- data_type: integer >= 0
- required: true
- default: "0"
- descr: перед завершением подождать (sleep) столько миллисекунд
- man: перед завершением подождать (sleep) столько миллисекунд
- sort: 10
- - id: 288
- code: failAtStart
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, завершить джоб, ничего не записывая в cmdb
- sort: 20
- - id: 289
- code: failInProgress
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: если true, корректно начать выполнение джоба, но в процессе завершить аварийно, ничего не записывая в cmdb
- sort: 30
- - id: 290
- code: whereFail
- data_type: integer > 0
- required: false
- value_list:
- - "1"
- - "2"
- - "3"
- descr: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- man: принимает 1,2,3. Работает с failInProgress. 1 - упасть в prepare. 2 - упасть внутри блока Data fill. 3 - упасть после vault write
- sort: 40
- - id: 291
- code: bodymessage
- required: false
- descr: Дата, уходящая в Vault
- man: Дата, уходящая в Vault
- sort: 50
- - id: 373
- code: mapExample
- data_type: map
- required: false
- default: '{}'
- sub_params:
- - id: 4
- code: secret
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- is_sensitive: true
- - id: 374
- code: jsonExample
- required: false
- - name: reconcile
- id: 257
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 240
- kind: action
- action: redeploy
- params: []
- - name: resume
- id: 94
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 93
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/21_vc_vdc.yaml b/test/resources_yaml/21_vc_vdc.yaml
deleted file mode 100644
index 44c3cbb..0000000
--- a/test/resources_yaml/21_vc_vdc.yaml
+++ /dev/null
@@ -1,169 +0,0 @@
-name: vc_vdc
-service_id: 21
-service_display_name: Виртуальный датацентр (vDC)
-service_short_name: vc_vdc
-service_man: '# Инструкция по развертыванию Виртуальный датацентр (vDC) через платформу
## 1. Общая информация
**Виртуальный датацентр (vDC)** — это логическая изолированная среда в VMware Cloud Director, предназначенная для размещения и управления виртуальными машинами, сетевой инфраструктурой и ресурсами хранения. Сервис обеспечивает выделение вычислительных ресурсов под конкретную организацию и предоставляет гибкие параметры масштабирования, контроля потребления и разделения ресурсов.
### Доступные операции
**create** — Создание виртуального датацентра (vDC) с заданными параметрами CPU, RAM, Storage и сетевой конфигурацией.
**delete** — Удаление vDC. Требуется предварительный перевод vDC в состояние *suspend*. Полное удаление возможно через 14 дней.
**modify** — Внесение изменений в параметры ресурсов (CPU/RAM/Storage), выделенных для vDC.
**suspend** — Заморозка vDC. Новые ресурсы или изменения внутри vDC становятся невозможными, работа ВМ не останавливается.
**resume** — Разморозка vDC. Восстановление возможности управления сущностями внутри vDC.
---
## 2. Параметры развертывания
Ниже перечислены входные параметры операции **create**.
### UUID Организации
Уникальный идентификатор организации в Cloud Director. Перед созданием vDC требуется предварительное создание услугу `Организация в Cloud Director`.
### Provider VDC в Cloud Director
Свойство ресурсной платформы, определяющее, какой пул физических ресурсов будет использоваться.
### Network Pool в Cloud Director
Определяет возможности сетевой конфигурации, включая создание Edge Gateway и выход во внешние сети.
### Гарантированная доля ЯДЕР
Гарантированный процент вычислительных ресурсов (CPU), закрепленный за vDC. Значение устанавливается разово при создании.
### Гарантированная доля ОЗУ
Гарантированный процент оперативной памяти, закрепленный за vDC. Также задаётся один раз при создании.
### Сколько аллоцировать на VDC ЯДЕР
Количество виртуальных ядер, выделяемых в рамках vDC.
### Сколько аллоцировать на VDC ОЗУ
Количество оперативной памяти в GB, выделяемой для vDC.
### Конфигурация Storage
Набор дисковых политик и их объёмов, выделяемых для vDC. Указывается имя политики и требуемый размер (GB).
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Количество ядер CPU: 10–20
- Аллоцируемая RAM: 16–64 GB
- Гарантированная доля CPU: 20%
- Гарантированная доля RAM: 20%
- Storage:
- Политика `SATA`
- Объём: 100–300 GB
### Промышленное окружение
- Количество ядер CPU: 16–128
- Аллоцируемая RAM: 64–512 GB
- Гарантированная доля CPU: 50%
- Гарантированная доля RAM: 50%
- Storage:
- Политики уровня `SSD`
- Объём: 1–10 TB, выбор несколько политик под разные нагрузки
---
## 4. Выходные параметры
Выходные параметры формируются операцией **create** (и используются другими операциями):
### Имя vDC
Уникальный идентификатор созданного виртуального датацентра. Используется в дальнейших операциях (modify, suspend, delete).
### Параметры выделенных ресурсов
Подтверждение итогового объёма CPU/RAM/Storage, выделенных vDC. Используются для учёта и контроля потребления.
---
## 5. Дополнительная информация
- Перед созданием vDC необходимо обеспечить наличие корректно созданной организации и доступных пула ресурсов ресурсной платформы.
- Гарантированная доля CPU и RAM задаётся **однократно при создании vDC**. После развертывания изменить эти значения невозможно; для изменения необходимо пересоздать vDC.
- Удаление vDC возможно только через **14 дней после перевода в состояние *suspend***. Удаление очищает все связанные сущности (ВМ, сети, каталоги), поэтому необходимо убедиться, что данные перенесены.
- Платформа Cloud Director использует концепцию изолированных организационных ресурсов, поэтому корректная настройка Provider VDC и Network Pool является обязательной при создании vDC.
- При изменении параметров (modify) изменяются только показатели CPU, RAM и Storage. Сетевые параметры и гарантированные доли остаются неизменными.
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 9
- kind: instance
- action: create
- params:
- - id: 30
- code: organizationUid
- data_type: uuid
- required: true
- ref_svc_id: 19
- man: Для создания VDC предварительно необходимо создать организацию через услугу `Организация в Cloud Director`
- sort: 10
- - id: 335
- code: providerVdc
- data_type: string
- required: true
- man: Приписка `2.8` - Скорость vCPU - 2800MHz
И так далее...
- sort: 30
- depends_on: organizationUid,networkProvider
- - id: 361
- code: storageConfig
- data_type: array-map-fixed
- required: true
- default: '[{}]'
- man: Первая политика в списке указывается как "По умолчанию"
- sort: 100
- is_modifiable: true
- sub_params:
- - id: 41
- code: name
- data_type: string
- required: true
- default: ""
- descr: getKeyListFromStruct(getResourceRealmConfig(getStringFromStruct(getInstanceState(params.organizationUid), "params.resourceRealm")), concat("vcd.hardware.providerVdcs['",params.providerVdc,"'].storage"))
- is_modifiable: false
- - id: 42
- code: size
- data_type: integer > 0
- required: true
- default: "2000"
- is_modifiable: false
- - id: 397
- code: cpuGuaranteed
- data_type: integer > 0
- required: true
- default: "20"
- value_list:
- - "20"
- - "50"
- - "80"
- descr: '% резервирования'
- man: Свойство нельзя изменить после создания
- sort: 60
- - id: 557
- code: cpuAllocated
- data_type: integer > 0
- required: true
- default: "80"
- maxvalue: 1000
- minvalue: 1
- descr: шт
- sort: 80
- is_modifiable: true
- - id: 558
- code: memAllocated
- data_type: integer > 0
- required: true
- default: "200"
- maxvalue: 4096
- minvalue: 1
- descr: gb
- sort: 90
- is_modifiable: true
- - id: 746
- code: networkProvider
- data_type: string
- required: true
- sort: 20
- depends_on: organizationUid
- - name: delete
- id: 24
- kind: instance
- action: delete
- man: 'Удалить возможно только через 14 дней после выполнения операции `suspend`
**ОСТОРЖНО: Удаление приводит к полному удалению всех сущностей внутри этого VDC**
Если существуют инстансы Edge, vApp, Vm или Kubernetes-кластер Штурвал, которые были созданы, из ЛК удалены не будут. Необходимо обратиться к `технической поддержке` для удаления инстансов'
- params: []
- - name: modify
- id: 112
- kind: instance
- action: modify
- params:
- - id: 560
- code: cpuAllocated
- data_type: integer > 0
- required: true
- maxvalue: 999
- minvalue: 1
- descr: шт
- sort: 10
- - id: 561
- code: memAllocated
- data_type: integer > 0
- required: true
- maxvalue: 1024
- minvalue: 1
- descr: gb
- sort: 20
- - id: 562
- code: storageConfig
- data_type: array-map-fixed
- required: true
- man: Первая политика в списке указывается как "По умолчанию"
- sort: 30
- sub_params:
- - id: 43
- code: name
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 44
- code: size
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - name: reconcile
- id: 250
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 172
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 171
- kind: instance
- action: suspend
- man: Операция **не останавливает ВМки** в облаке, но не даёт редактировать все сущности внутри VDC
- params: []
diff --git a/test/resources_yaml/22_vc_nsxt.yaml b/test/resources_yaml/22_vc_nsxt.yaml
deleted file mode 100644
index 158f59e..0000000
--- a/test/resources_yaml/22_vc_nsxt.yaml
+++ /dev/null
@@ -1,139 +0,0 @@
-name: vc_nsxt
-service_id: 22
-service_display_name: Сетевой шлюз периметра (Edge)
-service_short_name: vc_nsxt
-service_man: '# Инструкция по развертыванию Сетевой шлюз периметра (Edge) через платформу
## 1. Общая информация
Сервис **Сетевой шлюз периметра (Edge)** предназначен для создания периметрового сетевого шлюза в рамках одного виртуального датацентра (vDC) или группы виртуальных датацентров (groupvDC).
При создании автоматически разворачивается routed-сеть с адресным пространством `10.10.102.0/24`.
Сервис обеспечивает сетевую изоляцию, маршрутизацию, а также может включать функциональность балансировщика нагрузки AVI (ALB) для последующей интеграции, включая поддержку кластеров Штурвал.
### Доступные операции
**create** — Создание нового Edge с привязкой к vDC или groupvDC и развёртыванием routed-сети.
**delete** — Удаление ранее созданного Edge. Недоступно при наличии зависимых услуг (vApp, VM, Кластер Штурвал).
**modify** — Изменение параметров и сетевых настроек существующего Edge.
---
## 2. Параметры развертывания
Ниже приведены параметры операции **create**.
### Тип родительской услуги
Определяет контекст размещения Edge.
Допустимые значения: `vdc`, `groupvdc`.
Использование:
- При выборе `vdc` обязателен параметр **UUID VDC**.
- При выборе `groupvdc` обязателен параметр **UUID Группы VDC**.
### UUID VDC
Идентификатор виртуального датацентра.
Необходимо предварительно создать vDC через услугу «Виртуальный датацентр (vDC)».
Указывается только при выборе родительского типа `vdc`.
### UUID Группы VDC
Идентификатор группы виртуальных датацентров.
Создаётся через услугу «Группа виртуальных датацентров (groupvDC)».
Используется при выборе родительского типа `groupvdc`.
### Включить ALB
Флаг активации AVI Load Balancer в Cloud Director.
Пример значения: `true`/`false`.
Нужен для развёртывания кластера Штурвал и возможности создания Virtual Services.
### Наименование segroup
Имя сервиса групп (segroup) на уровне ресурсной платформы.
Обязательно при включённом ALB.
Определяет группу, в которой будут выделяться пулы AVI для Virtual Services.
### virtualServicesCount
Количество резервируемых виртуальных сервисов (Virtual Services) на AVI.
Типичное значение: 1–10 в зависимости от нагрузки.
---
## 3. Рекомендованные характеристики
### Тестовое окружение (Test)
- Тип родительской услуги: `vdc`
- virtualServicesCount: 1–2
- ALB: выключен по умолчанию (включать только при необходимости тестирования Штурвала)
- segroup: задаётся только при включённом ALB
- VDC гарантии CPU/RAM: минимальные (поскольку изменить их после создания нельзя)
### Промышленное окружение (Production)
- Тип родительской услуги: `groupvdc` при работе с распределёнными нагрузками или `vdc` для локализованных проектов
- virtualServicesCount: 3–10, исходя из предполагаемого количества публикаций
- ALB: включён, если требуется высокая доступность сервисов или используется кластер Штурвал
- segroup: рекомендуется использовать выделенную группу под проект
- VDC гарантии CPU/RAM: повышенные, с учётом того, что изменить их после создания невозможно без пересоздания vDC
---
## 4. Выходные параметры
### Имя Edge
Уникальное название созданного сетевого шлюза, используется для ссылок и дальнейших операций.
### Имя routed-сети
Автоматически созданная routed-сеть с подсетью `10.10.102.0/24`, используется для подключения ресурсов.
### Параметры Edge
Набор параметров, указанных пользователем при создании: тип услуги, ALB, segroup, virtualServicesCount и др.
Используются в операциях modify и для анализа состояния сервиса.
---
## 5. Дополнительная информация
- В рамках сервиса **один раз при создании задаётся гарантированная доля CPU/RAM vDC**. Изменить её невозможно — требуется пересоздание vDC.
- Удаление Edge недоступно при наличии зависимых ресурсов (vApp, VM, кластер Штурвал).
- При использовании ALB необходимо корректно указывать segroup, чтобы обеспечить корректное выделение пулов AVI.
- При выборе режима `groupvdc` следует учитывать распределение нагрузки между несколькими vDC.
- SNAT для всех ресурсов внутри Edge можно активировать через операцию modify (параметры выделения VIP и ipSpace).
'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 10
- kind: instance
- action: create
- params:
- - id: 8
- code: vdcUid
- data_type: string
- required: false
- ref_svc_id: 21
- descr: UUID Услуги `Виртуальный датацентр (vDC)`
- man: 'Необходимо, если выбран тип подключаемой VDC: `vdc`'
- sort: 10
- - id: 340
- code: needEnableAVI
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- descr: Включение Load Balancer
- man: Параметры `Наименование segroup`, `Кол-во VS на AVI` необходимо также указать
- sort: 30
- is_modifiable: true
- - id: 341
- code: virtualServicesCount
- data_type: integer > 0
- required: false
- default: "1"
- maxvalue: 4
- minvalue: 1
- descr: Кол-во виртуальных сервисов, которые **резервируются** на AVI
- man: Во избежании коллапса пока выделяется до 4
Необходимо указывать, если включён параметр `Включить ALB`
- sort: 50
- is_modifiable: true
- - id: 621
- code: vdcType
- data_type: string
- required: true
- default: vdc
- value_list:
- - vdc
- - vdcGroup
- descr: Тип родительской услуги
- man: При выборе vdc обеспечивает сетевую доступность только в рамках этого vdc
При выборе groupvdc обеспечивает сетевую доступность между всеми vdc, которые включены в groupvdc
- sort: 0
- - id: 622
- code: vdcGroupUid
- data_type: string
- required: false
- ref_svc_id: 29
- descr: UUID Услуги `Группа виртуальных датацентров (groupvDC)`
- man: 'Необходимо, если выбран тип подключаемой VDC: `groupvdc`'
- sort: 20
- - id: 825
- code: qosProfile
- required: false
- descr: Параметр пока не работает
Должен возвращать поле из ресурсной платформы типа vc из .vcd.hardware.gatewayQoSProfiles
Как по идее должен работать.
Нужно заполнить или CFS vdcUid, или vdcGroupUid
Идеально конечно проверять `if (params.vdcType == "vdc" && params.vdcUid != "")` или `if (params.vdcType == "vdcGroup" && params.vdcGroupUid != "")`
Далее надо пойти по стейту vdc -> org -> resPlatform, взять gatewayQoSProfiles
Или пойти по стейту vdcgroup -> vdc -> org -> resPlatform, взять gatewayQoSProfiles
Регулярку могу написать (Виталя)
- man: if (vdcUid != '") {
наборфункций1
}
elif (vdcGroupUid != "") {
наборфункций2
}
else {
return "Необходимо выбрать vdc или vdcgroup"
}
- sort: 60
- depends_on: vdcUid,vdcGroupUid
- is_modifiable: true
- - name: delete
- id: 25
- kind: instance
- action: delete
- man: Невозможно удалить если routed-сеть в Edge связана с:
- vApp
- VM
- Kubernetes-кластер Штурвал
Запустить операцию возможно, но будет ошибка
- params: []
- - name: modify
- id: 111
- kind: instance
- action: modify
- man: Для создания SNAT Правила убедитесь, что в организации есть свободные IP
Редактировать кол-во свободных IP можно в услуге `Организация в Cloud Director` -> `modify`
- params:
- - id: 368
- code: needEnableAVI
- data_type: boolean
- required: false
- value_list:
- - "false"
- - "true"
- descr: Включение Load Balancer
- man: Параметры `Наименование segroup`, `Кол-во VS на AVI` необходимо также указать
- sort: 10
- - id: 369
- code: virtualServicesCount
- data_type: integer > 0
- required: false
- maxvalue: 4
- minvalue: 1
- descr: Кол-во виртуальных сервисов, которые выделяются на AVI
- man: Во избежании коллапса пока выделяется до 4
Необходимо указывать, если включён параметр `Включить ALB`
- sort: 30
- - id: 372
- code: ipSpaceName
- data_type: string
- required: false
- descr: Имя ip Space для внешнего IP
- man: Необходимо указывать, если включён параметр `Выделить VIP для SNAT`
- sort: 50
- - id: 856
- code: qosProfile
- data_type: string
- required: false
- sort: 40
- - name: reconcile
- id: 252
- kind: action
- action: reconcile
- params: []
diff --git a/test/resources_yaml/25_vcexternalip.yaml b/test/resources_yaml/25_vcexternalip.yaml
deleted file mode 100644
index 3a91400..0000000
--- a/test/resources_yaml/25_vcexternalip.yaml
+++ /dev/null
@@ -1,165 +0,0 @@
-name: vcexternalip
-service_id: 25
-service_display_name: Публичные IP адреса
-service_short_name: vcexternalip
-service_man: '**Обычно эта услуга разворачивается автоматически при развёртывании более сложных услуг**
Вручную создавать можно, однако услуга требует много параметров, о которых можно просто не знать
Резервировать публичные IP адреса можно только после создания NGcloud Organization, NGcloud Виртуальный датацентр, NGcloud Каталог, Сетевой шлюз периметра.
Вы можете назначить IP адрес для существующего экземпляра сервиса.'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 56
- kind: instance
- action: create
- params:
- - id: 140
- code: serviceUid
- data_type: string
- required: true
- sort: 20
- is_modifiable: true
- - id: 141
- code: dnatCreate
- data_type: boolean
- required: true
- default: "true"
- descr: Необходимо создать DNAT-правило.
- sort: 40
- is_modifiable: true
- - id: 142
- code: internalPortAccess
- data_type: string
- required: true
- default: "5432"
- descr: Порт для связки ната с адресом. Несколько значений можно передавать через пробел. Если передать all, то dnat будет на все порты. Требует dnatCreate=true
- sort: 60
- is_modifiable: true
- - id: 143
- code: snatCreate
- data_type: boolean
- required: false
- descr: Необходимо создать SNAT-правило.
- sort: 50
- is_modifiable: true
- - id: 144
- code: internalAddrAccess
- data_type: string
- required: true
- descr: Внутренний адрес для связки ната. Требует dnatCreate=true или snatCreate=true
- sort: 70
- is_modifiable: true
- - id: 324
- code: fromServiceNamespace
- data_type: string
- required: true
- descr: Namespace составной услуги (для отображения правил FW)
- sort: 80
- - id: 325
- code: fromServiceCloudEdgeName
- data_type: string
- required: false
- descr: Edge составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 90
- - id: 326
- code: fromServiceCloudVdcName
- required: false
- descr: Vdc составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 100
- - id: 327
- code: fromServiceCloudOrgName
- data_type: string
- required: false
- descr: Org составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 110
- - id: 328
- code: fromServiceCloudVmwareUrl
- data_type: string
- required: false
- descr: Api-Url составной услуги (указывать, если resourceRealm связан с CloudDirector)
- sort: 120
- - id: 336
- code: ipSpaceName
- data_type: string
- required: true
- descr: Тип ip Space (internet-ipv4-v1 / internet-antiddos-v1 / internet-no-antiddos-v1)
- sort: 30
- is_modifiable: true
- - id: 488
- code: resourceRealm
- data_type: string
- required: true
- default: sandbox.nubes.ru
- value_list:
- - sandbox.nubes.ru
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- sort: 200
- - id: 624
- code: fromServiceCloudEdgeScope
- data_type: string
- required: false
- sort: 130
- - id: 626
- code: fromServiceVdcGroupName
- data_type: string
- required: false
- sort: 140
- - name: delete
- id: 57
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 197
- kind: instance
- action: modify
- params:
- - id: 627
- code: serviceUid
- data_type: string
- required: true
- sort: 20
- - id: 628
- code: ipSpaceName
- data_type: string
- required: true
- sort: 30
- - id: 629
- code: dnatCreate
- data_type: boolean
- required: true
- sort: 40
- - id: 630
- code: snatCreate
- data_type: boolean
- required: true
- sort: 50
- - id: 631
- code: internalPortAccess
- data_type: string
- required: true
- sort: 60
- - id: 632
- code: internalAddrAccess
- data_type: string
- required: true
- sort: 70
diff --git a/test/resources_yaml/26_vapp.yaml b/test/resources_yaml/26_vapp.yaml
deleted file mode 100644
index 6ac66a7..0000000
--- a/test/resources_yaml/26_vapp.yaml
+++ /dev/null
@@ -1,79 +0,0 @@
-name: vapp
-service_id: 26
-service_display_name: Виртуальный каталог ВМ (vApp)
-service_short_name: vapp
-service_man: '# Инструкция по развертыванию Виртуальный каталог ВМ (vApp) через платформу
## 1. Общая информация
**Виртуальный каталог ВМ (vApp)** — это логическая каталог, объединённая в единый управляемый объект. Сервис предназначен для совместного развертывания, управления жизненным циклом и сетевого взаимодействия набора связанных ВМ. Основные функции включают:
- централизованное управление включением, выключением и приостановкой группы ВМ;
- унифицированный сетевой доступ через привязанный Edge-шлюз;
### Доступные операции
**create** — Создание нового vApp с привязкой к заданным услугам VDC и Edge
**delete** — Удаление существующего vApp. Требуется предварительный перевод vApp в состояние *suspend*. Полное удаление возможно через 14 дней.
**suspend** — Остановка vApp (выключение всех ВМ внутри каталога)
**resume** — Запуск vApp (включение всех ВМ внутри каталога)
---
## 2. Параметры развертывания
Параметры берутся из операции **create**.
### UUID Услуги VDC
Уникальный идентификатор услуги «Виртуальный датацентр (vDC)».
Используется для определения вычислительной инфраструктуры, в которой будет развернут vApp.
### UUID Услуги Edge
Уникальный идентификатор услуги «Сетевой шлюз периметра (Edge)».
Обеспечивает маршрутизацию и сетевое подключение. Может быть привязан к группе VDC, поэтому выбирается отдельно.
### Имя vApp
Строгое имя, соответствующее маске формирования DNS-имени.
Используется как часть в DNS-имени при создании виртуальных машин.
---
## 3. Рекомендованные характеристики
Так как является промежуточным этапом для создания ВМ, все характеристики описываются в услуге `Виртуальная машина`
---
## 4. Выходные параметры
### Параметры vApp
Заданные при создании vApp
---
## 5. Дополнительная информация
- Привязка к VDC и Edge осуществляется раздельно, поскольку один Edge может обслуживать несколько VDC (через услугу `Группа виртуальных датацентров (groupvDC)`). Это гарантирует возможность развернуть ВМ в единой сети, но в разных виртуальных датацентрах.
- Перед удалением vApp необходимо вручную перевести его в состояние **suspend**. Удаление возможно только спустя 14 дней после этого шага.
- Операция delete удаляет весь vApp полностью, включая все виртуальные машины, связанные с ним.
- Рекомендуется заранее планировать сетевые связи и назначения DNS-имён для обеспечения корректной работы сервисов, развернутых внутри vApp.
- При проектировании инфраструктуры следует учитывать зависимости между Edge-шлюзом, VDC и размещаемыми ВМ, чтобы избежать ограничений при масштабировании и интеграции.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 69
- kind: instance
- action: create
- params:
- - id: 190
- code: nsxtUid
- data_type: uuid
- required: true
- ref_svc_id: 22
- descr: UUID Услуги `Сетевой шлюз периметра (Edge)`
- man: К какой сети может быть подключен виртуальный каталог
- sort: 20
- - id: 191
- code: vappName
- data_type: string
- required: true
- default: hf1t7p5c
- regex: ^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$
- minlength: 3
- descr: Уникальное в рамках организации
- man: Имеет строгую маску `^[a-z0-9][a-z0-9.-]{3,61}[a-z0-9]$`
Используется в формировании DNS-Имени (для виртуальных машин)
- sort: 30
- - id: 623
- code: vdcUid
- data_type: uuid
- required: true
- ref_svc_id: 21
- descr: UUID Услуги `Виртуальный датацентр (vDC)`
- man: В каких ресурсах будет создан виртуальный каталог
- sort: 10
- - name: delete
- id: 70
- kind: instance
- action: delete
- params: []
- - name: reconcile
- id: 285
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 209
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 208
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/27_vc_vm_v2.yaml b/test/resources_yaml/27_vc_vm_v2.yaml
deleted file mode 100644
index 2b1d235..0000000
--- a/test/resources_yaml/27_vc_vm_v2.yaml
+++ /dev/null
@@ -1,71 +0,0 @@
-name: vc_vm_v2
-service_id: 27
-service_display_name: VM в Cloud Director (vc_vmV2)
-service_short_name: vc_vm_v2
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 100
- kind: instance
- action: create
- params:
- - id: 301
- code: serverListJson
- data_type: json
- required: true
- default: '[{}]'
- maxlength: 65536
- minlength: 10
- descr: Необходимо изменить vappUid и ipSpaceName
Пример конфигурации взять по ссылке ниже
Объект серверов вида [{}] (Map(Object))
Более подробнее смотреть в README.md (https://gitea.mgmt.nubes.ru/cloudServices/vcVmV2)
- sort: 20
- is_modifiable: true
- - name: delete
- id: 101
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 104
- kind: instance
- action: modify
- params:
- - id: 302
- code: serverListJson
- data_type: json
- required: true
- default: '[{}]'
- maxlength: 65536
- minlength: 10
- descr: Объект серверов вида [{}] (Map(Object))
Более подробнее смотреть в README.md (https://gitea.mgmt.nubes.ru/cloudServices/vcVmV2)
- sort: 10
- - name: resume
- id: 102
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 103
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/28_vc_vm_v3.yaml b/test/resources_yaml/28_vc_vm_v3.yaml
deleted file mode 100644
index f05d808..0000000
--- a/test/resources_yaml/28_vc_vm_v3.yaml
+++ /dev/null
@@ -1,278 +0,0 @@
-name: vc_vm_v3
-service_id: 28
-service_display_name: Виртуальная машина
-service_short_name: vc_vm_v3
-service_man: '# Документация по разворачиванию ВМ в Личном кабинете
Данный сервис позволяет разворачивать виртуальные машины (ВМ) непосредственно из Личного кабинета (ЛК).
## Доступные операции
- **create** — Создание виртуальной машины
- **delete** — Удаление виртуальной машины
- **resume** — Запуск виртуальной машины
- **suspend** — Остановка виртуальной машины
---
## Параметры для развёртывания ВМ
### Обязательные параметры:
**vappUid**
UUID vApp, в которой будет создаваться виртуальная машина.
*Пример: WZ00400*
**vmName**
Уникальное имя виртуальной машины.
*Пример: test-vm*
**vmCpu**
Количество ядер процессора. Должно быть больше 0.
*Пример: 1*
**vmRam**
Объем оперативной памяти в гигабайтах. Должно быть больше 0.
*Пример: 1*
**accessPortList**
Белый список портов для доступа к виртуальной машине извне в формате JSON.
*Пример: ["22","10050]*
**imageVm**
Образ операционной системы для развёртывания.
*Доступные значения: RockyLinux_9-16G-cloudinit, Ubuntu_22-20G, Debian_13-20G*
**userLogin**
Логин пользователя для SSH-доступа.
*По умолчанию: myuser*
**userPublicKey**
Публичный SSH-ключ пользователя в формате OpenSSH.
*Пример: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...*
**needAddZabbixTemplate**
Значение истина\ложь, определяющее будет ли добавлен хост в zabbix.
*Пример: true*
### Опциональные параметры:
**accessIpList**
Белый список IP-адресов для доступа к виртуальной машине в формате JSON. Если оставить пустым, вм будет доступена со всех адресов.
*Пример: ["192.168.1.1", "10.0.0.5"]*
**vmDisk**
Размер дополнительного диска в гигабайтах. Должно быть больше 0.
*Пример: 50*
**ipSpaceName**
Внешний IP-адрес. Если не требуется — укажите значение "no-needed" (В нем не будет работать сбор метрик zabbix).
**cloudInit**
YAML-скрипт для кастомизации системы через cloud-init.
---
## Доступные образы операционных систем
### RockyLinux_9-16G-cloudinit
Базовый образ на основе Rocky Linux 9 (Rocky-9.6-x86_64-minimal) для серверных задач.
- Размер системного диска: 16 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Ubuntu_22-20G
Образ на основе Ubuntu Server 22.04 LTS для облачного окружения.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Debian_13-20G
Образ на основе Debian 13 (Trixie) для стабильной серверной работы.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
---
## Пример использования Cloud-init
```yaml
users:
- name: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...
packages:
- nginx
runcmd:
- systemctl enable --now nginx
- systemctl restart nginx
```
---
## Результат выполнения
После успешного развёртывания в Личном кабинете появится новая виртуальная машина с заданными характеристиками. SSH-доступ осуществляется с использованием указанных логина и публичного ключа.
---
## Важные примечания
### Особенности работы:
- Для отключения внешнего IP укажите значение "no-needed" в параметре ipSpaceName
- Параметр cloudInit является опциональным
### Ограничения:
- Не рекомендуется использовать продолжительные инструкции в cloud-init (таймаут 5 минут)
- Не поддерживается запись файлов через cloud-init
- Не реализовано создание резервных копий ВМ
---
## Диагностика проблем с cloud-init
### Основной лог-файл:
```bash
/var/log/cloud-init.log
```
### Пакет не устанавливается:
- Проверьте доступность пакета в репозитории
- Убедитесь в правильности написания имени пакета
- Попробуйте установить вручную: `apt install <имя_пакета>` (Debian/Ubuntu) или `dnf install <имя_пакета>` (Rocky Linux)
### Команда не выполняется:
- Проверьте наличие требуемой утилиты в системе
- Убедитесь в правильности синтаксиса команды
- Попробуйте выполнить команду вручную для диагностики'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 132
- kind: instance
- action: create
- man: '# Документация по использованию услуги развёртывания ВМ в Личном кабинете
Данный сервис позволяет разворачивать виртуальные машины (ВМ) непосредственно из Личного кабинета (ЛК).
## Доступные операции
- **create** — Создание виртуальной машины
- **delete** — Удаление виртуальной машины
- **resume** — Запуск виртуальной машины
- **suspend** — Остановка виртуальной машины
---
## Параметры для развёртывания ВМ
### Обязательные параметры:
**vappUid**
UUID vApp, в которой будет создаваться виртуальная машина.
*Пример: WZ00400*
**vmName**
Уникальное имя виртуальной машины.
*Пример: test-vm*
**vmCpu**
Количество ядер процессора. Должно быть больше 0.
*Пример: 1*
**vmRam**
Объем оперативной памяти в гигабайтах. Должно быть больше 0.
*Пример: 1*
**accessPortList**
Белый список портов для доступа к виртуальной машине извне в формате JSON.
*Пример: ["22","10050]*
**imageVm**
Образ операционной системы для развёртывания.
*Доступные значения: RockyLinux_9-16G-cloudinit, Ubuntu_22-20G, Debian_13-20G*
**userLogin**
Логин пользователя для SSH-доступа.
*По умолчанию: myuser*
**userPublicKey**
Публичный SSH-ключ пользователя в формате OpenSSH.
*Пример: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...*
**needAddZabbixTemplate**
Значение истина\лож определяющее будет ли добавлен хост в zabbix.
*Пример: true*
### Опциональные параметры:
**accessIpList**
Белый список IP-адресов для доступа к виртуальной машине в формате JSON. Если оставить пустым, вм будет доступена со всех адресов.
*Пример: ["192.168.1.1", "10.0.0.5"]*
**vmDisk**
Размер дополнительного диска в гигабайтах. Должно быть больше 0.
*Пример: 50*
**ipSpaceName**
Внешний IP-адрес. Если не требуется — укажите значение "no-needed".
**cloudInit**
YAML-скрипт для кастомизации системы через cloud-init.
---
## Доступные образы операционных систем
### RockyLinux_9-16G-cloudinit
Базовый образ на основе Rocky Linux 9 (Rocky-9.6-x86_64-minimal) для серверных задач.
- Размер системного диска: 16 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Ubuntu_22-20G
Образ на основе Ubuntu Server 22.04 LTS для облачного окружения.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
### Debian_13-20G
Образ на основе Debian 13 (Trixie) для стабильной серверной работы.
- Размер системного диска: 20 ГБ
- Поддержка cloud-init
- Минимальные требования: 1 vCPU, 1 ГБ RAM
---
## Пример использования Cloud-init
```yaml
users:
- name: myuser
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...
packages:
- nginx
runcmd:
- systemctl enable --now nginx
- systemctl restart nginx
```
---
## Результат выполнения
После успешного развёртывания в Личном кабинете появится новая виртуальная машина с заданными характеристиками. SSH-доступ осуществляется с использованием указанных логина и публичного ключа.
---
## Важные примечания
### Особенности работы:
- Для отключения внешнего IP укажите значение "no-needed" в параметре ipSpaceName
- Параметр cloudInit является опциональным
### Ограничения:
- Не рекомендуется использовать продолжительные инструкции в cloud-init (таймаут 5 минут)
- Не поддерживается запись файлов через cloud-init
- Не реализовано создание резервных копий ВМ
---
## Диагностика проблем с cloud-init
### Основной лог-файл:
```bash
/var/log/cloud-init.log
```
### Пакет не устанавливается:
- Проверьте доступность пакета в репозитории
- Убедитесь в правильности написания имени пакета
- Попробуйте установить вручную: `apt install <имя_пакета>` (Debian/Ubuntu) или `dnf install <имя_пакета>` (Rocky Linux)
### Команда не выполняется:
- Проверьте наличие требуемой утилиты в системе
- Убедитесь в правильности синтаксиса команды
- Попробуйте выполнить команду вручную для диагностики'
- params:
- - id: 407
- code: vappUid
- data_type: uuid
- required: true
- ref_svc_id: 26
- sort: 10
- - id: 408
- code: vmName
- data_type: string
- required: true
- default: web01
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- sort: 20
- - id: 409
- code: vmCpu
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 64
- minvalue: 1
- descr: шт
- sort: 30
- is_modifiable: true
- - id: 410
- code: vmRam
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 256
- minvalue: 1
- descr: Gb
- sort: 40
- is_modifiable: true
- - id: 411
- code: vmDisk
- data_type: integer > 0
- required: false
- regex: ^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
- descr: Основной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
- sort: 50
- is_modifiable: true
- - id: 412
- code: ipSpaceName
- data_type: string
- required: true
- sort: 60
- depends_on: vappUid
- is_modifiable: true
- - id: 413
- code: accessIpList
- data_type: json
- required: false
- regex: ^(?:$|\[\s*(?:"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?"(?:\s*,\s*"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?")*)\s*\])$
- descr: Формат массива
Каким адресам будет предоставлен доступ до вм
Требует выделенного внешнего IP
Если ничего не передано, то выставлено ["0.0.0.0/0"]
- sort: 70
- is_modifiable: true
- - id: 414
- code: imageVm
- data_type: string
- required: true
- sort: 90
- depends_on: vappUid
- - id: 415
- code: cloudInit
- data_type: yaml
- required: false
- descr: Можно передать создание дополнительных пользователей.
На текущий момент не реализовано выполнения в cloud-init, установки пакетов, выполнения команд и записи файлов.
- sort: 200
- - id: 416
- code: userLogin
- required: true
- default: myuser
- descr: Учётка SSH
- sort: 180
- - id: 417
- code: userPublicKey
- data_type: string
- required: true
- descr: Публичная часть SSH-Ключа для пользователя
- sort: 190
- - id: 448
- code: accessPortList
- data_type: string
- required: true
- default: '["22"]'
- descr: 'По каким портам открыть доступ к ВМ.
Порты 22, 10050 проставляются автоматически
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX'
- sort: 80
- is_modifiable: true
- - name: delete
- id: 133
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 159
- kind: instance
- action: modify
- params:
- - id: 493
- code: vmCpu
- data_type: integer > 0
- required: false
- maxvalue: 64
- minvalue: 1
- descr: шт
- sort: 20
- - id: 494
- code: vmRam
- data_type: integer > 0
- required: false
- maxvalue: 256
- minvalue: 1
- descr: Gb
- sort: 30
- - id: 495
- code: vmDisk
- data_type: integer > 0
- required: false
- regex: ^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
- descr: Основной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
- sort: 40
- - id: 496
- code: ipSpaceName
- data_type: string
- required: false
- value_list:
- - no-needed
- - internet-antiddos-v1
- - internet-no-antiddos-v1
- - internet-ipv4-v1
- descr: no-needed, без внешнего ip
internet-antiddos-v1, с функцией защиты от ddos атак
internet-no-antiddos-v1, с функцией защиты от ddos атак
internet-ipv4-v1 тестовое простанство dev
- sort: 50
- - id: 497
- code: accessIpList
- data_type: json
- required: false
- descr: Формат массива
Каким адресам будет предоставлен доступ до вм
Требует выделенного внешнего IP
Если ничего не передано, то выставлено ["0.0.0.0/0"]
- sort: 60
- - id: 498
- code: accessPortList
- data_type: json
- required: false
- descr: Формат массива
По каким портам открыть доступ к ВМ.
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX
- sort: 70
- - name: reconcile
- id: 286
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 164
- kind: action
- action: redeploy
- params:
- - id: 509
- code: vmName
- data_type: string
- required: true
- regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
- sort: 10
- - id: 510
- code: vmCpu
- data_type: integer > 0
- required: true
- maxvalue: 64
- minvalue: 1
- descr: шт
- sort: 20
- - id: 511
- code: vmRam
- data_type: integer > 0
- required: true
- maxvalue: 256
- minvalue: 1
- descr: Gb
- sort: 30
- - id: 512
- code: vmDisk
- data_type: integer > 0
- required: false
- regex: ^(?:$|(?:0|[1-9]\d{0,2}|1\d{3}|20(?:[0-3]\d|4[0-8])))$
- descr: Основной диск у vm зависит от образа (см. документацию)
Если необходимо дополнительное место для vm, введите колличество Gb в эту форму
- sort: 40
- - id: 513
- code: ipSpaceName
- data_type: string
- required: false
- value_list:
- - no-needed
- - internet-antiddos-v1
- - internet-no-antiddos-v1
- - internet-ipv4-v1
- descr: no-needed, без внешнего ip
internet-antiddos-v1, с функцией защиты от ddos атак
internet-no-antiddos-v1, с функцией защиты от ddos атак
internet-ipv4-v1 тестовое простанство dev
- sort: 50
- - id: 514
- code: accessIpList
- data_type: json
- required: false
- regex: ^(?:$|\[\s*(?:"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?"(?:\s*,\s*"(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,2})?")*)\s*\])$
- descr: Формат массива
Каким адресам будет предоставлен доступ до вм
Требует выделенного внешнего IP
Если ничего не передано, то выставлено ["0.0.0.0/0"]
- sort: 60
- - id: 515
- code: imageVm
- data_type: string
- required: true
- value_list:
- - RockyLinux_9-16G-cloudinit
- - Ubuntu_22-20G
- - Debian_13-20G
- sort: 80
- - id: 516
- code: userLogin
- data_type: string
- required: true
- descr: Учётка SSH
- sort: 180
- - id: 517
- code: userPublicKey
- data_type: string
- required: true
- descr: Публичная часть SSH-Ключа для пользователя
- sort: 190
- - id: 518
- code: cloudInit
- data_type: yaml
- required: false
- descr: Можно передать создание дополнительных пользователей.
На текущий момент не реализовано выполнения в cloud-init, установки пакетов, выполнения команд и записи файлов.
- sort: 200
- - id: 520
- code: accessPortList
- data_type: json
- required: false
- descr: По каким портам открыть доступ к ВМ.
Порты 22, 10050 проставляются автоматически
Пока доступно:
22 - SSH,
80 - HTTP,
443 - HTTPS,
10050 - ZABBIX
- sort: 70
- - name: resume
- id: 135
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 134
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/29_vc_vdc_group.yaml b/test/resources_yaml/29_vc_vdc_group.yaml
deleted file mode 100644
index 21afd35..0000000
--- a/test/resources_yaml/29_vc_vdc_group.yaml
+++ /dev/null
@@ -1,74 +0,0 @@
-name: vc_vdc_group
-service_id: 29
-service_display_name: Группа датацентров
-service_short_name: vcVdcGroup
-service_man: '# Инструкция по развертыванию Группа виртуальных датацентров (groupvDC) через платформу
## 1. Общая информация
Сервис **Группа виртуальных датацентров (groupvDC)** предназначен для логического объединения нескольких виртуальных датацентров (vDC) в единую группу. Это позволяет растягивать SDN между разными vDC и централизованно управлять сетевой связностью. Управление инфраструктурой осуществляется через Cloud Director.
Сервис применяется в случаях, когда требуется обеспечить единое сетевое пространство для распределенных виртуальных датацентров.
### Доступные операции
**create** — Создание новой группы виртуальных датацентров.
**delete** — Удаление существующей группы vDC.
**add_vdc** — Добавление дополнительного виртуального датацентра в группу.
**remove_vdc** — Удаление ранее добавленного виртуального датацентра из группы.
---
## 2. Параметры развертывания
Параметры операции **create**:
### UUID VDC
Идентификатор виртуального датацентра, который будет являться первичным в группе.
Описание: требуется предварительно создать виртуальный датацентр с помощью услуги `Виртуальный датацентр (vDC)`.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Для тестового окружения создавать группу VDC нет необходимости, так как это создаёт дополнительный слой абстракции в Cloud Director
### Промышленное окружение
- Для промышленного окружения, если в тенанте существуют разные VDC, создание groupvdc позволит снизить сетевые издержки (за счёт общей сети)
---
## 4. Выходные параметры
### Параметры groupvdc
Набор параметров, указанных пользователем при создании
---
## 5. Дополнительная информация
- Группа vDC используется для растягивания SDN между несколькими виртуальными датацентрами. Управление всеми сетевыми элементами внутри группы выполняется Cloud Director.
- Удалить первичный vDC (тот, что был указан при операции **create**) невозможно. Для его удаления необходимо удалить всю группу и создать новую.
- Перед добавлением любого vDC в группу он должен быть предварительно развернут через сервис `Виртуальный датацентр (vDC)`.
- Сети создаются не в этой услуге, а в услуге `Сетевой шлюз периметра (Edge)`. В ней необходимо будет выбрать тип `groupvdc`'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: add_vdc
- id: 192
- kind: subresource
- action: add
- subresource: vdc
- man: '**Не нужно** выбирать UUID VDC, который уже был добавлен в группу'
- params:
- - id: 619
- code: vdcUid
- data_type: uuid
- required: true
- ref_svc_id: 21
- sort: 10
- - name: create
- id: 191
- kind: instance
- action: create
- man: '**VDC Группа** нужна для объединения всех VDC в организации в одну логическую группу.
Это позволит, к примеру, создать **общую сеть** для всех VDC в организации
- Для создания группы VDC необходимо указать **инстанс** услуги VDC (`Виртуальный датацентр`)
- **Важный момент** - удалить эту VDC из группы нельзя. Если такая потребность появится, необходимо будет **ПОЛНОСТЬЮ** удалить группу VDC и уже потом создать новую'
- params:
- - id: 618
- code: vdcUid
- data_type: uuid
- required: true
- ref_svc_id: 21
- sort: 10
- - name: delete
- id: 195
- kind: instance
- action: delete
- params: []
- - name: reconcile
- id: 251
- kind: action
- action: reconcile
- params: []
- - name: remove_vdc
- id: 193
- kind: subresource
- action: remove
- subresource: vdc
- params:
- - id: 620
- code: vdcName
- data_type: string
- required: true
- sort: 10
diff --git a/test/resources_yaml/2_template.yaml b/test/resources_yaml/2_template.yaml
deleted file mode 100644
index 1eaf29a..0000000
--- a/test/resources_yaml/2_template.yaml
+++ /dev/null
@@ -1,224 +0,0 @@
-name: template
-service_id: 2
-service_display_name: Темплейт k8s
-service_short_name: template
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 74
- kind: instance
- action: create
- params:
- - id: 813
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 172
- code: cpu
- data_type: integer > 0
- required: true
- default: "100"
- is_modifiable: false
- - id: 175
- code: disk
- data_type: integer > 0
- required: true
- default: "5"
- is_modifiable: false
- - id: 173
- code: memory
- data_type: integer > 0
- required: true
- default: "128"
- is_modifiable: false
- - id: 174
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- is_modifiable: false
- - id: 814
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 176
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- is_modifiable: false
- - id: 815
- code: accessConfiguration
- data_type: map-fixed
- required: true
- is_modifiable: true
- sub_params:
- - id: 182
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- is_modifiable: false
- - id: 177
- code: type
- data_type: string
- required: true
- default: ingress
- value_list:
- - ingress
- - service
- is_modifiable: false
- - id: 178
- code: domain
- data_type: string
- required: true
- default: abracadabra-aoy3qnll
- regex: (?=^.{1,63}$)^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
- is_modifiable: false
- - id: 179
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 180
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- is_modifiable: false
- - id: 181
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - name: delete
- id: 75
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 76
- kind: instance
- action: modify
- params:
- - id: 816
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 183
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 185
- code: disk
- data_type: integer >= 0
- required: true
- default: ""
- is_modifiable: false
- - id: 184
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 186
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 817
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 187
- code: type
- data_type: string
- required: true
- default: ""
- value_list:
- - ingress
- - service
- is_modifiable: false
- - id: 188
- code: domain
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 189
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 191
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- is_modifiable: false
- - id: 190
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 192
- code: slaveAccessList
- data_type: json
- required: true
- default: ""
- is_modifiable: false
- - name: reconcile
- id: 298
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 98
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 97
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/50_nextcloud.yaml b/test/resources_yaml/50_nextcloud.yaml
deleted file mode 100644
index 0329097..0000000
--- a/test/resources_yaml/50_nextcloud.yaml
+++ /dev/null
@@ -1,489 +0,0 @@
-name: nextcloud
-service_id: 50
-service_display_name: Nextcloud
-service_short_name: nextcloud
-service_man: 'Ресурсная платформа: k8s. Автоматизация: helm chart'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 16
- kind: instance
- action: create
- man: Для установки необходимо:
- ресурсная платформа, где разворачивается Nextcloud, обязана совпадать с ресурсными платформами, где развёрнут Redis и PostgreSQL
- params:
- - id: 1055
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 496
- code: redisUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить Redis из Личного кабинета`
- is_modifiable: false
- - id: 492
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 493
- code: psqlEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 494
- code: redisEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 495
- code: psqlUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить PostgreSQL из Личного кабинета`
- is_modifiable: false
- - id: 1056
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 499
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "2"
- is_modifiable: false
- - id: 500
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
На данном диске хранятся данные Nextcloud
- is_modifiable: false
- - id: 497
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- value_list:
- - "1000"
- - "2000"
- - "3000"
- - "4000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 498
- code: memory
- data_type: integer > 0
- required: true
- default: "1024"
- value_list:
- - "1024"
- - "2048"
- - "3072"
- - "4096"
- - "5120"
- - "6144"
- - "7168"
- - "8192"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 1057
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 501
- code: domain
- data_type: string
- required: true
- default: nextcloud-vjp2crbf
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1058
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 502
- code: version
- data_type: string
- required: true
- default: 33.0.4
- value_list:
- - 33.0.4
- is_modifiable: false
- - id: 503
- code: documentServer
- data_type: string
- required: true
- default: collabora
- value_list:
- - collabora
- man: Выбор сервера документов (onlyoffice)/(collabora). onlyoffice пока не доступен
Размер пода collabora:
1.8 ядра. 2Gi ОЗУ
- is_modifiable: false
- - id: 549
- code: logLevel
- data_type: string
- required: true
- default: INFO
- value_list:
- - DEBUG
- - INFO
- - WARN
- - ERROR
- - FATAL
- - NONE
- man: Включает отображение логов самого nextcloud
Логи уходят в /dev/stdout контейнера
`NONE` отключает логирование
- is_modifiable: false
- - name: create_backup
- id: 404
- kind: subresource
- action: create
- subresource: backup
- man: Перед запуском обязательно надо перевести экземпляр Nextcloud в статус 'suspended'
- params:
- - id: 1077
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 578
- code: veleroUid
- data_type: string
- required: true
- default: ""
- man: Предварительно необходимо создать инстанс услуги `Velero`
Из этого инстанса будут взяты точки восстановления
Если восстановление производится на другую ресурсную платформу, важно чтобы предварительно все компоненты связующие были либо перенесены, либо были доступны снаружи
- is_modifiable: false
- - name: delete
- id: 17
- kind: instance
- action: delete
- man: DEV-Ветка удаления Nextcloud
- params: []
- - name: modify
- id: 67
- kind: instance
- action: modify
- params:
- - id: 1059
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 504
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1000"
- - "2000"
- - "3000"
- - "4000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 505
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1024"
- - "2048"
- - "3072"
- - "4096"
- - "5120"
- - "6144"
- - "7168"
- - "8192"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 506
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "2"
- is_modifiable: false
- - id: 507
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
На данном диске хранятся данные Nextcloud
- is_modifiable: false
- - id: 1060
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 550
- code: logLevel
- data_type: string
- required: true
- default: ""
- value_list:
- - DEBUG
- - INFO
- - WARN
- - ERROR
- - FATAL
- - NONE
- man: Включает отображение логов самого nextcloud
Логи уходят в /dev/stdout контейнера
`NONE` отключает логирование
- is_modifiable: false
- - id: 508
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - 33.0.4
- is_modifiable: false
- - id: 509
- code: documentServer
- data_type: string
- required: true
- default: ""
- value_list:
- - collabora
- man: Выбор сервера документов (onlyoffice)/(collabora). onlyoffice пока не доступен
Размер пода collabora:
1.8 ядра. 2Gi ОЗУ
- is_modifiable: false
- - name: reconcile
- id: 390
- kind: action
- action: reconcile
- params: []
- - name: recovery
- id: 406
- kind: action
- action: recovery
- params:
- - id: 1078
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 556
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 570
- code: veleroUid
- data_type: string
- required: true
- default: ""
- man: Из этого инстанса будут взяты точки восстановления
Если восстановление производится на другую ресурсную платформу, важно чтобы предварительно все компоненты связующие были либо перенесены, либо были доступны снаружи
- is_modifiable: false
- - id: 559
- code: recoveryPoint
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 557
- code: psqlEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 558
- code: redisEnabled
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "true"
- man: Инстанс обязан быть развёрнут на той же ресурсной платформе, где и будет располагаться Nextcloud
- is_modifiable: false
- - id: 560
- code: psqlUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить PostgreSQL из Личного кабинета`
Если откат производится на ту же версию Nextcloud, в теории возможно развернуться в существующую базу
Предпочтительно создать отдельный инстанс PostgreSQL, который был восстановлен также через Recovery
- is_modifiable: false
- - id: 561
- code: redisUid
- data_type: uuid
- required: true
- default: ""
- man: Необходимо выбирать, когда выбран параметр `Подключить Redis из Личного кабинета`
- is_modifiable: false
- - id: 1079
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 562
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1000"
- - "2000"
- - "3000"
- - "4000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 563
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1024"
- - "2048"
- - "3072"
- - "4096"
- - "5120"
- - "6144"
- - "7168"
- - "8192"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 564
- code: replicas
- data_type: integer > 0
- required: true
- default: 1,2
- is_modifiable: false
- - id: 565
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
На данном диске хранятся данные Nextcloud
- is_modifiable: false
- - id: 1080
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 566
- code: domain
- data_type: string
- required: true
- default: nextcloud-dcxz2gqv
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1081
- code: appConfiguration
- data_type: map-fixed
- required: true
- man: Версия Nextcloud будет взята из бэкапа
- sort: 40
- sub_params:
- - id: 568
- code: logLevel
- data_type: string
- required: true
- default: NONE
- value_list:
- - DEBUG
- - INFO
- - WARN
- - ERROR
- - FATAL
- - NONE
- man: Включает отображение логов самого nextcloud
Логи уходят в /dev/stdout контейнера
`NONE` отключает логирование
- is_modifiable: false
- - id: 569
- code: version
- data_type: string
- required: false
- default: ""
- man: Версия Nextcloud будет исправлена на ту версию, которая указана в бэкапе
- is_modifiable: false
- - id: 567
- code: documentServer
- data_type: string
- required: true
- default: collabora
- value_list:
- - collabora
- man: Выбор сервера документов (onlyoffice)/(collabora). onlyoffice пока не доступен
Размер пода collabora:
1.8 ядра. 2Gi ОЗУ
- is_modifiable: false
- - name: restart
- id: 66
- kind: action
- action: restart
- params: []
- - name: resume
- id: 129
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 128
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/81_superset.yaml b/test/resources_yaml/81_superset.yaml
deleted file mode 100644
index 75feff2..0000000
--- a/test/resources_yaml/81_superset.yaml
+++ /dev/null
@@ -1,109 +0,0 @@
-name: superset
-service_id: 81
-service_display_name: Apache Superset
-service_short_name: superset
-service_man: 'Apache Superset как сервис.
Ресурсная платформа: k8s.
Автоматизация: k8s operator.
Авторизация: 2FA keycloak (для доменного логина @mgmt.nubes.ru)'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 12
- kind: instance
- action: create
- man: DEV-Ветка сборки Superset
- params:
- - id: 14
- code: domain
- data_type: string
- required: true
- default: superset-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - id: 20
- code: emails
- data_type: string
- required: true
- default: testuser1
- descr: Учётная запись, которой будут выданы админские права. В формате email [ну не совсем. Для доменных учетных записей - без доменного суффикса]. Обязана находиться в Keycloak. Можно передавать несколько через пробел
- man: Учётная запись, которой будут выданы админские права. В формате email [ну не совсем. Для доменных учетных записей - без доменного суффикса]. Обязана находиться в Keycloak. Можно передавать несколько через пробел
- sort: 70
- - id: 96
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 4000
- minvalue: 100
- descr: Квота ядра пода (Указывается в mili). 1000 Mili = 1 ядро
- man: Квота ядра пода (Указывается в mili). 1000 Mili = 1 ядро
- sort: 30
- - id: 97
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 128
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 40
- - id: 98
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 50
- - id: 109
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 20
- - id: 227
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- sort: 60
- - name: delete
- id: 13
- kind: instance
- action: delete
- man: DEV-Ветка удаления Superset
- params: []
diff --git a/test/resources_yaml/82_harbor.yaml b/test/resources_yaml/82_harbor.yaml
deleted file mode 100644
index 624843a..0000000
--- a/test/resources_yaml/82_harbor.yaml
+++ /dev/null
@@ -1,126 +0,0 @@
-name: harbor
-service_id: 82
-service_display_name: Container Registry
-service_short_name: harbor
-service_man: 'Расширенный реестр для управления Docker-образами с enterprise-функциями безопасности, репликации и контроля доступа.
Container Registry позволяет хранить, развертывать и управлять Docker-образами контейнеров в инфраструктуре NGcloud.
Сервис можно использовать в процессе разработки контейнеров. Например, вы можете настроить систему автоматизации на работу с реестром в Container Registry в рамках процесса непрерывной интеграции. Контейнеры идеально подходят для запуска небольших, независимых и легко изменяемых сервисов.
Чтобы начать работу, создайте реестр и загрузите в него Docker-образ
Авторизация: keycloak'
-lifecycle:
- suspend_on_destroy_default: false
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 14
- kind: instance
- action: create
- man: DEV-Ветка сборки Harbor
- params:
- - id: 16
- code: domain
- data_type: string
- required: true
- default: harbor-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 20
- - id: 110
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 30
- - id: 228
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "100"
- maxvalue: 4000
- minvalue: 500
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- sort: 40
- is_modifiable: true
- - id: 229
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "200"
- maxvalue: 8192
- minvalue: 512
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 50
- is_modifiable: true
- - id: 230
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество узлов в сети
- sort: 60
- is_modifiable: true
- - id: 231
- code: s3Uid
- data_type: uuid
- required: true
- ref_svc_id: 12
- descr: UUID экземпляра услуги S3
- man: UUID экземпляра услуги S3
- sort: 10
- - name: delete
- id: 15
- kind: instance
- action: delete
- man: DEV-Ветка удаления Harbor
- params: []
- - name: modify
- id: 270
- kind: instance
- action: modify
- params:
- - id: 822
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- - id: 823
- code: resourceCPU
- data_type: integer > 0
- required: false
- maxvalue: 4000
- minvalue: 500
- - id: 824
- code: resourceMemory
- data_type: integer > 0
- required: true
- maxvalue: 8192
- minvalue: 512
diff --git a/test/resources_yaml/86_k8s_velero.yaml b/test/resources_yaml/86_k8s_velero.yaml
deleted file mode 100644
index 60c6b5e..0000000
--- a/test/resources_yaml/86_k8s_velero.yaml
+++ /dev/null
@@ -1,199 +0,0 @@
-name: k8s_velero
-service_id: 86
-service_display_name: Velero
-service_short_name: k8sVelero
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 332
- kind: instance
- action: create
- params:
- - id: 962
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 334
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 336
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 337
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "2"
- - "3"
- is_modifiable: false
- - id: 963
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 338
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- is_modifiable: false
- - id: 964
- code: nodeAgentConfiguration
- data_type: map-fixed
- required: true
- man: Реплик выставляется автоматически столько, сколько Worker-узлов в кластере
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 551
- code: cpu
- data_type: integer > 0
- required: true
- default: "2000"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 552
- code: memory
- data_type: integer > 0
- required: true
- default: "2048"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 1076
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 555
- code: s3BucketUid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3-Бакета обязателен
Учётная запись будет создана автоматически, если её нету
- is_modifiable: false
- - name: delete
- id: 331
- kind: instance
- action: delete
- params:
- - id: 1082
- code: deleteS3Bucket
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- sort: 10
- - name: modify
- id: 334
- kind: instance
- action: modify
- params:
- - id: 965
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 345
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 347
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 348
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "2"
- - "3"
- is_modifiable: false
- - id: 966
- code: nodeAgentConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 553
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 554
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - name: reconcile
- id: 336
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 335
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 333
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/89_flask.yaml b/test/resources_yaml/89_flask.yaml
deleted file mode 100644
index 80a26dc..0000000
--- a/test/resources_yaml/89_flask.yaml
+++ /dev/null
@@ -1,244 +0,0 @@
-name: flask
-service_id: 89
-service_display_name: Web-сервер с фреймворком Flask
-service_short_name: flask
-service_man: '# Инструкция по развертыванию Web-сервер с фреймворком Flask через платформу
## 1. Общая информация
Сервис **Web-сервер с фреймворком Flask** предназначен для развертывания веб-приложений на базе Flask.
### Доступные операции
create — включить сервис, развернуть веб-приложение с указанными параметрами.
delete — удалить сервис, только после suspend.
modify — изменить настройки сервиса и переразвернуть.
suspend — выключить веб-приложение, остановить обслуживание.
resume — включить веб-приложение после suspend.
---
## 2. Параметры развертывания
Параметры входных данных операции **create**:
### Имя домена
Описание: доменное имя для доступа к веб-приложению. Если указан FQDN, происходит проверка DNS на валидность А-записи. А-запись должна указывать на балансировщик ресурсной платформы. Если указано имя в рамках одного октета, оно будет добавлено в публичную DNS-зону.
Пример значения: строка, допустимые FQDN или имя в одном октете. Пример: example.com или myapp.
### Платформа для развертывания
Описание: кластер Kubernetes, в котором будет развернуто приложение.
Пример значения: идентификатор кластера Kubernetes.
### Квота ядра пода
Описание: количество CPU, выделяемое на под, в Milicores.
Пример значения: целое число, например 500 для 0.5 ядра.
### Квота памяти пода
Описание: количество памяти, выделяемое на под, в Megabytes.
Пример значения: целое число, например 512 для 512 MB.
### Кол-во реплик пода
Описание: количество инстансов пода для масштабирования.
Пример значения: целое число, шт, например 2.
### URL Проекта (gitpath)
Описание: полный HTTPS путь до проекта в Git-репозитории.
Пример значения: URL в формате https://github.com/myuser/myproject.git. Доступ к репозиторию должен быть публичным.
### URL HealthCheck
Описание: путь для проверки здоровья приложения внутри пода.
Пример значения: строка, путь, например /api/v1/health.
### Переменные окружения пода
Описание: структура данных, которая будет передана как переменные окружения в под.
Пример значения: ключ-значение, например {"ENV": "production"}.
---
## 3. Рекомендованные характеристики
### Тестовое окружение
- Квота ядра пода: 300m (0.3 ядра)
- Квота памяти пода: 256 MB
- Кол-во реплик пода: 1
### Промышленное окружение
- Квота ядра пода: от 1000m (1 ядро) в зависимости от нагрузки
- Квота памяти пода: от 1024 MB (1 GB) с учетом потребностей приложения
- Кол-во реплик пода: от 2 для обеспечения отказоустойчивости
---
## 4. Выходные параметры
Операция create не возвращает явных выходных параметров. Успешное выполнение операции приводит к развертыванию сервиса, доступного по указанному домену.
---
## 5. Дополнительная информация
- В корне проекта должен находиться файл requirements.txt со списком зависимостей Python.
- Исходный код веб-приложения должен располагаться в директории site.
- Запуск веб-сервера осуществляется командой python app.py.
- Используется версия Python: python:3.12-slim.
- Git-репозиторий должен быть публично доступен для платформы.
- Операция delete возможна только после suspend.
- Операция modify приводит к переразвертыванию с новыми параметрами.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 376
- kind: instance
- action: create
- params:
- - id: 1037
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 460
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1038
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 461
- code: cpu
- data_type: integer > 0
- required: true
- default: "200"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 462
- code: memory
- data_type: integer > 0
- required: true
- default: "256"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 463
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1039
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 464
- code: domain
- data_type: string
- required: true
- default: flask-ub0sbq5h
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1040
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 467
- code: version
- data_type: string
- required: true
- default: "3.12"
- value_list:
- - "3.12"
- is_modifiable: false
- - id: 465
- code: gitPath
- data_type: string
- required: true
- default: https://github.com/Foxyhhd/Baldurs-Gate-test.git
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 466
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1041
- code: jsonEnv
- data_type: map
- required: false
- default: '{}'
- sort: 50
- is_modifiable: true
- - name: delete
- id: 379
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 375
- kind: instance
- action: modify
- params:
- - id: 1042
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 468
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 469
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 470
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1043
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 473
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "3.12"
- is_modifiable: false
- - id: 471
- code: gitPath
- data_type: string
- required: true
- default: ""
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 472
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1044
- code: jsonEnv
- data_type: map
- required: false
- sort: 30
- - name: reconcile
- id: 381
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 380
- kind: action
- action: redeploy
- params:
- - id: 1045
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 474
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - name: resume
- id: 378
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 377
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/90_postgres.yaml b/test/resources_yaml/90_postgres.yaml
deleted file mode 100644
index 130e6f5..0000000
--- a/test/resources_yaml/90_postgres.yaml
+++ /dev/null
@@ -1,934 +0,0 @@
-name: postgres
-service_id: 90
-service_display_name: PostgreSQL
-service_short_name: postgres
-service_man: '# Инструкция по развертыванию PostgreSQL через платформу
---
## 1. Общая информация
PostgreSQL — это надёжная объектно-реляционная СУБД с открытым исходным кодом, поддерживающая расширенный набор функций, транзакции и хранение сложных типов данных. Развёртывание полностью автоматизировано платформой на базе Zalando Postgres Operator с использованием Kubernetes.
## Доступные операции
- **create** — Создание кластера
- **delete** — Удаление кластера
- **modify** — Модификация кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера
- **restart** — Перезапуск кластера
- **recovery** — Восстановление из резервной копии
- **create_user** — Создание пользователя
- **delete_user** — Удаление пользователя
- **create_database** — Создание базы данных
- **delete_database** — Удаление базы данных
---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса PostgreSQL:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество инстансов (реплик) в кластере PostgreSQL. Пример: `2` (master + slave).
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`
* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных в гигабайтах. Пример: `20`
* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master. Пример: `true` или `false`
* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
* **Выделяет внешний IP для доступа к slave:**
Флаг для выделения внешнего IP для slave (реплики чтения). Работает, если slave присутствует в кластере.
* **Имя ipSpace для публикации внешнего IP slave:**
Если включен параметр для slave, то поле необходимо заполнить.
* **UUID экземпляра услуги S3:**
UUID экземпляра S3 для хранения резервных копий.
* **Версия PostgreSQL:**
Версия PostgreSQL для развертывания. Пример: `16`
* **Расписание бэкапов (ext_BACKUP_SCHEDULE):**
Необязательный. Cron-выражение для времени запуска бэкапов. По умолчанию: `0 0 * * *` (ежедневно в полночь).
* **Количество сохраняемых бэкапов (ext_BACKUP_NUM_TO_RETAIN):**
Необязательный. Количество сохраняемых бэкапов. По умолчанию: `7`
* **PgPooler (master / slave):**
Флаги включения PgBouncer для подключений на запись и чтение. При включении создаётся отдельный под.
* **Разрешить подключение без SSL (allowNoSSL):**
По умолчанию подключение с sslmode=require. При `true` разрешается подключение без SSL.
* **Автоскейлинг PV (autoScale):**
Включает автоскейлинг тома. Требует настройки autoScalePercentage, autoScaleTechWindow, autoScaleQuotaGb.
* **Дополнительные параметры PostgreSQL (jsonParameters):**
JSON с переменными конфигурации PostgreSQL. Документация: https://www.postgresql.org/docs/current/runtime-config.html
---
## 3. Выходные параметры
После успешного развертывания ресурса PostgreSQL платформа возвращает ряд параметров.
#### externalConnect
Внешние эндпоинты для подключения к кластеру:
- **master** — для операций записи (host: `write.${namespace}`, port: 5432)
- **slave** — для операций чтения (host: `read.${namespace}`, port: 5432)
Пример ответа платформы:
```json
{
"slave": {
"ip": "",
"fqdn": "",
"uuid": "",
"isExternal": false
},
"master": {
"ip": "<ip>",
"fqdn": "write.<namespace>.<cluster-domain>",
"uuid": "<uuid>",
"isExternal": false
}
}
```
Поля: `ip` — внешний IP; `fqdn` — полное имя хоста; `uuid` — идентификатор; `isExternal` — признак внешнего доступа.
#### internalConnect
Внутренние эндпоинты (FQDN) для подключения из других сервисов внутри той же сети Kubernetes.
Пример ответа платформы:
```json
{
"slave": "",
"master": {
"slave": "",
"master": {
"slave": "",
"master": "postgresqlk8s-master.<namespace>.svc.cluster.local"
}
}
}
```
Для подключения используйте значение `master.master.master` (host для записи) или соответствующее значение slave (host для чтения).
Для подключения используется порт **5432**.
---
## 4. Управление пользователями
### create_user — Создание пользователя
* **Имя пользователя (username):**
Имя создаваемого пользователя. Используется для подключения к базе и настройки прав.
Пример: `myapp_user`
* **Роль (role):**
Тип роли пользователя. Допустимые значения:
- `app_user` — базовые права для DML-операций (SELECT, INSERT, UPDATE, DELETE)
- `ddl_user` — расширенные права: createdb, createrole (управление базами и ролями)
Защищённые имена, которые нельзя использовать: `admin`, `postgres`, `standby`.
### delete_user — Удаление пользователя
* **Имя пользователя (username):**
Имя удаляемого пользователя. Пример: `myapp_user`
Пользователя нельзя удалить, если он является владельцем базы данных. Сначала удалите или передайте владение базами данных другому пользователю.
---
## 5. Управление базами данных
### create_database — Создание базы данных
* **Имя базы данных (dbName):**
Название создаваемой базы данных. Пример: `myapp_db`
* **Владелец базы данных (dbOwner):**
Имя пользователя-владельца базы. Должен существовать в кластере (создан через create_user). Пример: `myapp_user`
### delete_database — Удаление базы данных
* **Имя базы данных (dbName):**
Название удаляемой базы данных. Пример: `myapp_db`
'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 19
- kind: instance
- action: create
- man: руководство
- params:
- - id: 788
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 106
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 107
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 104
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 105
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 789
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 108
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 790
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 112
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 109
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 110
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 111
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 791
- code: postgresConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 113
- code: version
- data_type: string
- required: true
- default: "17"
- value_list:
- - "17"
- - "16"
- is_modifiable: false
- - id: 116
- code: sslRequired
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: По умолчанию подключение обязательное (sslmode=require)
- is_modifiable: false
- - id: 114
- code: poolerMaster
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на запись). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 115
- code: poolerSlave
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на чтение). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 792
- code: postgresConf
- data_type: array-map-fixed
- required: false
- sort: 50
- is_modifiable: true
- sub_params:
- - id: 118
- code: paramName
- data_type: string
- required: true
- default: ""
- value_list:
- - log_connections
- - log_disconnections
- is_modifiable: false
- - id: 117
- code: paramValue
- data_type: string
- required: true
- default: ""
- man: Как правильно вводить значения описано здесь (https://www.postgresql.org/docs/current/runtime-config.html)
- is_modifiable: false
- - id: 793
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- is_modifiable: true
- sub_params:
- - id: 119
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 120
- code: retain
- data_type: integer > 0
- required: true
- default: "7"
- is_modifiable: false
- - id: 121
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 794
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- is_modifiable: true
- sub_params:
- - id: 125
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 122
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 123
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 124
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 1094
- code: mtlsConfiguration
- data_type: map-fixed
- required: true
- default: '{}'
- sort: 80
- is_modifiable: true
- sub_params:
- - id: 613
- code: certServer
- data_type: string
- required: false
- default: ""
- is_modifiable: false
- - id: 609
- code: type
- data_type: string
- required: true
- default: "off"
- value_list:
- - "off"
- - manual
- - auto
- man: '`off` - Настройка MTLS производиться не будет
`manual` - После создания кластера в полях данных будет запрос на создание сертификата. **Вам необходимо будет выписать сертификат через вашу CA** и уже после включить через операцию **modify** режим MTLS
`auto` - Сертификаты будут созданы через Cert-Manager
Режимы **auto** и **manual** требует включить настройку `Включить sslMode` - **true**
MTLS в режиме **auto** будет работать сразу, в режиме **manual** только после того как будет предоставлен **CA** и **Сертификат сервера**'
- is_modifiable: false
- - id: 610
- code: durationCA
- data_type: integer > 0
- required: true
- default: "175200"
- man: Указывается в **часах**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - id: 611
- code: durationServer
- data_type: integer > 0
- required: true
- default: "87600"
- man: Указывается в **часах**
Не может быть больше чем время жизни СА
Обновляется **раз в год**, если выставлено значение **более 2 лет**
Обновляется **раз в пол года**, если выставлено значение **менее 2 лет**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - id: 612
- code: certCA
- data_type: string
- required: false
- default: ""
- is_modifiable: false
- - name: create_backup
- id: 264
- kind: subresource
- action: create
- subresource: backup
- params: []
- - name: create_database
- id: 245
- kind: subresource
- action: create
- subresource: database
- params:
- - id: 741
- code: dbName
- data_type: string
- required: true
- regex: ^[A-Za-z0-9]+$
- - id: 742
- code: dbOwner
- data_type: string
- required: true
- - name: create_user
- id: 241
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 733
- code: username
- data_type: string
- required: true
- regex: ^[A-Za-z0-9]+$
- maxlength: 62
- minlength: 2
- sort: 10
- - id: 740
- code: role
- data_type: string
- required: true
- value_list:
- - app_user
- - ddl_user
- descr: Выбрать роль из списка
- man: '`app_user` — стандартный пользователь с базовым набором прав
`ddl_user` — пользователь с расширенными правами, включая управление ролями и базами данных'
- sort: 20
- - id: 1096
- code: mtlsAccess
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Подключение пользователя без ввода паролей
Политика применяется **ко всем базам** внутри Postgresql
RBAC на базы настраивать вручную
- sort: 30
- - name: delete
- id: 20
- kind: instance
- action: delete
- params:
- - id: 457
- code: deleteS3Bucket
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- descr: Также удалить технический S3 Bucket с бэкапами?
- sort: 10
- - name: delete_database
- id: 246
- kind: subresource
- action: delete
- subresource: database
- params:
- - id: 743
- code: dbName
- data_type: string
- required: true
- - name: delete_user
- id: 244
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 739
- code: username
- data_type: string
- required: true
- descr: 'Пример: `username-admin`'
- - name: modify
- id: 48
- kind: instance
- action: modify
- params:
- - id: 795
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 126
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 127
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 128
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 129
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 796
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 130
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 131
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 132
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 133
- code: slaveAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 797
- code: postgresConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 134
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "17"
- - "16"
- is_modifiable: false
- - id: 135
- code: sslRequired
- data_type: boolean
- required: true
- default: false,true
- man: По умолчанию подключение обязательное (sslmode=require)
- is_modifiable: false
- - id: 136
- code: poolerMaster
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на запись). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 137
- code: poolerSlave
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на чтение). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 798
- code: postgresConf
- data_type: array-map-fixed
- required: false
- sort: 40
- sub_params:
- - id: 272
- code: paramValue
- data_type: string
- required: true
- default: ""
- man: Как правильно вводить значения описано здесь (https://www.postgresql.org/docs/current/runtime-config.html)
- is_modifiable: false
- - id: 271
- code: paramName
- data_type: string
- required: true
- default: ""
- value_list:
- - log_connections
- - log_disconnections
- is_modifiable: false
- - id: 799
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 50
- sub_params:
- - id: 193
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 138
- code: retain
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 139
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 800
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- sub_params:
- - id: 142
- code: quota
- data_type: integer > 0
- required: true
- default: ""
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 143
- code: percent
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - id: 140
- code: enabled
- data_type: boolean
- required: true
- default: ""
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 141
- code: schedule
- data_type: integer >= 0
- required: true
- default: ""
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 1095
- code: mtlsConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- sub_params:
- - id: 615
- code: durationCA
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в **часах**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - id: 616
- code: durationServer
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в **часах**
Не может быть больше чем время жизни СА
Обновляется **раз в год**, если выставлено значение **более 2 лет**
Обновляется **раз в пол года**, если выставлено значение **менее 2 лет**
Необходимо настраивать, когда параметр `Режим настройки` - **auto**
- is_modifiable: false
- - id: 617
- code: certCA
- data_type: string
- required: false
- default: ""
- man: Предварительно сертификат можно получить командой
`cat ca.crt | base64 -w0`
- is_modifiable: false
- - id: 618
- code: certServer
- data_type: string
- required: false
- default: ""
- man: Предварительно сертификат можно получить командой
`cat server.crt | base64 -w0`
- is_modifiable: false
- - id: 634
- code: refreshCert
- data_type: boolean
- required: false
- default: "false"
- value_list:
- - "false"
- - "true"
- man: На случай если его нужно обновить/заменить
- is_modifiable: false
- - id: 614
- code: type
- data_type: string
- required: true
- default: ""
- value_list:
- - "off"
- - manual
- - auto
- man: '`off` - Настройка MTLS производиться не будет
`manual` - После создания кластера в полях данных будет запрос на создание сертификата. **Вам необходимо будет выписать сертификат через вашу CA** и уже после включить через операцию **modify** режим MTLS
`auto` - Сертификаты будут созданы через Cert-Manager
Режимы **auto** и **manual** требует включить настройку `Включить sslMode` - **true**
MTLS в режиме **auto** будет работать сразу, в режиме **manual** только после того как будет предоставлен **CA** и **Сертификат сервера**'
- is_modifiable: false
- - name: reconcile
- id: 263
- kind: action
- action: reconcile
- params: []
- - name: recovery
- id: 47
- kind: action
- action: recovery
- params:
- - id: 801
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 144
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 166
- code: recoveryPoint
- data_type: string
- required: true
- default: ""
- is_modifiable: false
- - id: 802
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 146
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 147
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 148
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 145
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 803
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 150
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 151
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 152
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 149
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 804
- code: postgresConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- sub_params:
- - id: 153
- code: version
- data_type: string
- required: true
- default: "17"
- value_list:
- - "17"
- - "16"
- is_modifiable: false
- - id: 154
- code: sslRequired
- data_type: boolean
- required: true
- default: "true"
- value_list:
- - "false"
- - "true"
- man: По умолчанию подключение обязательное (sslmode=require)
- is_modifiable: false
- - id: 155
- code: poolerMaster
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на запись). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 156
- code: poolerSlave
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает pgPooler (на чтение). Будет создан новый под
Размер пода **200m/400Mi**
- is_modifiable: false
- - id: 805
- code: postgresConf
- data_type: array-map-fixed
- required: false
- sort: 50
- sub_params:
- - id: 475
- code: paramName
- data_type: string
- required: true
- default: ""
- value_list:
- - log_connections
- - log_disconnections
- is_modifiable: false
- - id: 476
- code: paramValue
- data_type: string
- required: true
- default: ""
- man: Как правильно вводить значения описано здесь (https://www.postgresql.org/docs/current/runtime-config.html)
- is_modifiable: false
- - id: 806
- code: backupConfiguration
- data_type: map-fixed
- required: true
- sort: 60
- sub_params:
- - id: 159
- code: s3Uid
- data_type: uuid
- required: true
- default: ""
- man: Экземпляр S3 обязателен
- is_modifiable: false
- - id: 160
- code: retain
- data_type: integer > 0
- required: true
- default: "7"
- is_modifiable: false
- - id: 161
- code: schedule
- data_type: string
- required: true
- default: 0 0 * * *
- regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
- is_modifiable: false
- - id: 807
- code: autoscaleConfiguration
- data_type: map-fixed
- required: true
- sort: 70
- sub_params:
- - id: 162
- code: enabled
- data_type: boolean
- required: true
- default: "false"
- value_list:
- - "false"
- - "true"
- man: Включает автоскейлинг PV. При включении параметра необходимо настроить autoScalePercentage и autoScaleTechWindow. Алерт при срабатывании вызывает modify у текущей услуги
- is_modifiable: false
- - id: 163
- code: schedule
- data_type: integer >= 0
- required: true
- default: "0"
- value_list:
- - "0"
- - "5"
- - "12"
- - "23"
- man: Требует включения autoScale. Окно обновления (пока не реализовано). Указывается час в виде Integer (0 / 5 / 12 / 23)
- is_modifiable: false
- - id: 164
- code: quota
- data_type: integer > 0
- required: true
- default: "100"
- man: До какого размера возможно увеличивать диск, когда включен Autoscale
- is_modifiable: false
- - id: 165
- code: percent
- data_type: integer > 0
- required: true
- default: "10"
- value_list:
- - "10"
- - "15"
- - "20"
- man: Требует включения autoScale. Позволяет указать в процентах расширение от текущего макс объема
Минимальный размер на который расширяется - **1Gb**
- is_modifiable: false
- - name: restart
- id: 54
- kind: action
- action: restart
- man: ВНИМАНИЕ - Рестарт предполагает УДАЛЕНИЕ подов.
Может быть полная поломка. Крайне осторожно запускать при работе
- params: []
- - name: resume
- id: 114
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 115
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/91_redis.yaml b/test/resources_yaml/91_redis.yaml
deleted file mode 100644
index 50eab56..0000000
--- a/test/resources_yaml/91_redis.yaml
+++ /dev/null
@@ -1,222 +0,0 @@
-name: redis
-service_id: 91
-service_display_name: Redis
-service_short_name: redis
-service_man: 'Redis кластер. Под кеши.
Ресурсная платформа: k8s.
Автоматизация: k8s operator
port 6379'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 21
- kind: instance
- action: create
- params:
- - id: 1061
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 510
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1062
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 511
- code: cpu
- data_type: integer > 0
- required: true
- default: "500"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 512
- code: memory
- data_type: integer > 0
- required: true
- default: "512"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 513
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 514
- code: disk
- data_type: integer > 0
- required: true
- default: "10"
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 1063
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 515
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 516
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 517
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 518
- code: slaveAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: delete
- id: 22
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 394
- kind: instance
- action: modify
- params:
- - id: 1064
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 520
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 521
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 522
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в GIGAbytes
- is_modifiable: false
- - id: 519
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 1065
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 523
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 524
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 525
- code: slaveIpSpace
- data_type: string
- required: true
- default: ""
- man: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 526
- code: slaveAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: reconcile
- id: 391
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 393
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 392
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/92_mongodb.yaml b/test/resources_yaml/92_mongodb.yaml
deleted file mode 100644
index ebd0a33..0000000
--- a/test/resources_yaml/92_mongodb.yaml
+++ /dev/null
@@ -1,241 +0,0 @@
-name: mongodb
-service_id: 92
-service_display_name: MongoDB
-service_short_name: mongodb
-service_man: '# Инструкция по развертыванию MongoDB через платформу
## 1. Общая информация
MongoDB — документоориентированная распределённая база данных, обеспечивающая высокую доступность, горизонтальное масштабирование и гибкую модель хранения.
### Доступные операции с кластером
* **create** — создание базы
* **delete** — удаление базы данных
* **suspend** — остановка базы данных
* **resume** — запуск базы данных
* **modify** — изменение базы данных
### Доступные операции с пользователями
* **create_user** — создание пользователя
* **modify_user** — модификация пользователя
* **delete_user** — удаление пользователя
---
## 2. Параметры развертывания базы данных
Эти параметры необходимо указать при создании базы данных.
### Платформа для развертывания
Среда, в которой будет развернут кластер. Выбирается из предложенного списка.
### Количество узлов
Количество реплик в кластере MongoDB.
Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.
> **Примечание:** уменьшение количества узлов после создания кластера не рекомендуется.
### Квота памяти пода (MB)
Объём памяти для одного пода в мегабайтах.
Пример: `2048`
### Квота CPU пода (mCPU)
CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: `1000`
### Размер диска для базы данных (GB)
Объём диска для хранения данных в гигабайтах.
Пример: `20`
### Имя ipSpace для публикации внешнего IP
Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите `no-needed`, если внешний адрес не требуется.
Пример: `internet-no-antiddos-v1`
### Список разрешённых IP-адресов
Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: `["10.0.0.0/24", "192.168.1.10/32"]`
---
## 3. Параметры модификации базы данных
Все параметры, которые вы указываете при модификации, являются необязательными — система автоматически подставит ранее сохранённые значения, и при необходимости вы можете изменить их на нужные.
### Количество узлов
Количество реплик в кластере MongoDB.
Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.
> **Примечание:** уменьшение количества узлов после создания кластера не рекомендуется.
### Квота памяти пода (MB)
Объём памяти для одного пода в мегабайтах.
Пример: `2048`
### Квота CPU пода (mCPU)
CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: `1000`
### Размер диска для базы данных (GB)
Объём диска для хранения данных указывается в гигабайтах. Его можно увеличить при необходимости, однако уменьшить уже выделенный размер невозможно.
Пример: `20`
### Имя ipSpace для публикации внешнего IP
Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите `no-needed`, если внешний адрес не требуется.
Пример: `internet-no-antiddos-v1`
### Список разрешённых IP-адресов
Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: `["10.0.0.0/24", "192.168.1.10/32"]`
---
## 3. Параметры создания пользователя
### Имя пользователя
Указывается имя пользователя (любой регистр).
Пример: `readApp`
### Имя базы данных
Название базы, в которой будет создан пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: `Apps_9392`
### Имя роли
* **read** — доступ только на чтение
* **readWrite** — чтение и изменение данных
* **dbOwner** — полный контроль над базой данных
---
## 4. Параметры модификации пользователя
### Имя пользователя
Необходимо выбрать существующего пользователя.
Если список пуст, требуется предварительно создать пользователя.
### Имя базы данных
База данных, к которой относится пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: `Apps_9392`
### Имя роли
* **read**
* **readWrite**
* **dbOwner**
---
## 5. Параметры удаления пользователя
### Имя пользователя
Выберите пользователя из списка для удаления.
---
## 6. Выходные параметры
После успешного развертывания базы данных платформа возвращает ключевые параметры.
### internalConnect
Внутренний эндпоинт для подключения к кластеру из сервисов, работающих в той же сети.
Используется для внутренних интеграций и системных сервисов.
### externalConnect
Внешний FQDN для подключения к кластеру извне.
Порт подключения — **27017**.
---
## 7. Пример подключения
Перед подключением необходимо установить **mongosh**.
Команда подключения к базе данных:
```
mongosh "mongodb://<username>:<password>@<endpoint_db>:27017/<dbName>"
```
Где:
* `<username>` — имя пользователя
* `<password>` — пароль
* `<endpoint_db>` — internalConnect или externalConnect
* `<dbName>` — имя базы данных
## 8. Дополнительная информация
Сейчас соединение с базой работает без шифрования, и доступ к кластеру осуществляется только по логину и паролю.'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 37
- kind: instance
- action: create
- params:
- - id: 1089
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 594
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- descr: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1090
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 595
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- is_modifiable: false
- - id: 596
- code: memory
- data_type: integer > 0
- required: true
- default: "1024"
- is_modifiable: false
- - id: 597
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 598
- code: disk
- data_type: integer > 0
- required: true
- default: "5"
- man: Указывается в Gb
- is_modifiable: false
- - id: 1091
- code: accessConfiguration
- data_type: map-fixed
- required: true
- is_modifiable: true
- sub_params:
- - id: 600
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - id: 599
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - name: create_user
- id: 198
- kind: subresource
- action: create
- subresource: user
- params:
- - id: 635
- code: username
- data_type: string
- required: true
- - id: 636
- code: dbName
- data_type: string
- required: true
- - id: 643
- code: role
- data_type: string
- required: true
- value_list:
- - dbOwner
- - read
- - readWrite
- - name: delete
- id: 190
- kind: instance
- action: delete
- params: []
- - name: delete_user
- id: 199
- kind: subresource
- action: delete
- subresource: user
- params:
- - id: 644
- code: username
- data_type: string
- required: true
- - name: modify
- id: 201
- kind: instance
- action: modify
- params:
- - id: 1092
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 601
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 602
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 603
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 604
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Gb
- is_modifiable: false
- - id: 1093
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sub_params:
- - id: 605
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 606
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: modify_user
- id: 200
- kind: subresource
- action: modify
- subresource: user
- params:
- - id: 640
- code: username
- data_type: string
- required: true
- - id: 641
- code: dbName
- data_type: string
- required: true
- - id: 642
- code: role
- data_type: string
- required: true
- value_list:
- - dbOwner
- - read
- - readWrite
- - name: reconcile
- id: 409
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 196
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 194
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/93_rabbitmq.yaml b/test/resources_yaml/93_rabbitmq.yaml
deleted file mode 100644
index 60e9881..0000000
--- a/test/resources_yaml/93_rabbitmq.yaml
+++ /dev/null
@@ -1,188 +0,0 @@
-name: rabbitmq
-service_id: 93
-service_display_name: RabbitMQ
-service_short_name: rabbitmq
-service_man: '# Инструкция по развертыванию RabbitMQ через платформу
---
## 1. Общая информация
RabbitMQ — это брокер сообщений с открытым исходным кодом, который обеспечивает надёжную доставку сообщений между приложениями.
Позволяет надёжно передавать сообщения между сервисами и системами, интегрироваться с внешними решениями и использовать как внутренние, так и защищённые TLS-подключения. Развёртывание полностью автоматизировано платформой.
## Доступные операции
- **create** — Создание кластера
- **modify** — Изменение параметров кластера
- **delete** — Удаление кластера
- **suspend** — Остановка кластера
- **resume** — Запуск кластера
---
## 2. Параметры развертывания кластера
Ниже перечислены параметры, которые необходимо указать при создании ресурса RabbitMQ:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развернут кластер). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество реплик в кластере RabbitMQ. При значении больше 1 создаётся кластер с репликацией для обеспечения высокой доступности.
Пример: `1` (single node) или `3` (кластер с репликацией)
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `2048`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `1000`
* **Размер (gigabyte) диска для базы данных:**
Размер диска для хранения данных RabbitMQ в гигабайтах. Пример: `50`
* **Выделяет внешний IP для доступа к master:**
Флаг, определяющий, нужно ли выделять внешний IP для доступа к master-узлу. При включении создаётся Service типа LoadBalancer и настраивается VIP на порту 5672.
Пример: `true` или `false`
* **Имя ipSpace для публикации внешнего IP master:**
Если включен предыдущий параметр, то поле необходимо заполнить. Пример: `internet-no-antiddos-v1`
---
## 3. Модификация кластера
Операция **modify** позволяет изменить параметры существующего кластера RabbitMQ.
**Изменяемые параметры:**
* **Квота (megabyte) памяти пода** — можно увеличить или уменьшить
* **Квота (millicore) ядра пода** — можно увеличить или уменьшить
* **Размер (gigabyte) диска для базы данных** — можно только увеличить (уменьшение не поддерживается)
* **Количество узлов в сети** — можно только увеличить (уменьшение не поддерживается)
* **Выделяет внешний IP для доступа к master** — можно включить или выключить
* **Имя ipSpace для публикации внешнего IP master** — можно изменить при включенном внешнем IP
**Ограничения:**
* Уменьшение размера диска не поддерживается
* Уменьшение количества реплик не поддерживается
---
## 4. Выходные параметры
После успешного развертывания ресурса RabbitMQ платформа возвращает ряд параметров в разделе "Поля состояния (сгенерированные значения)":
**clusterDomain**
Домен кластера Kubernetes, в котором развернут RabbitMQ.
Пример: `cluster.local`
**inernalConnect**
Внутренние эндпоинты для подключения к кластеру RabbitMQ из других сервисов, развернутых внутри той же сети.
Содержит:
* **master** — FQDN для подключения к кластеру. Пример: `rabbitmqk8s.{namespace}.svc.{clusterDomain}`
**externalConnect**
Внешние эндпоинты для подключения к кластеру RabbitMQ извне.
Содержит объекты с полями:
* **admin** — доступ к веб-интерфейсу управления:
* `fqdn` — полное доменное имя для веб-интерфейса. Пример: `admin.{namespace}.{domain}`
* `ip` — IP-адрес
* **master** — доступ к AMQP протоколу (если включен внешний IP):
* `fqdn` — полное доменное имя для AMQP. Пример: `write.{namespace}.{domain}`
* `ip` — IP-адрес
**monitoring**
Информация о дашбордах мониторинга:
* **allDashboards** — URL для доступа ко всем дашбордам Grafana
Для подключения используются следующие порты:
* **5672** — AMQP протокол (внутренний и внешний доступ, если включен внешний IP)
* **15672** — веб-интерфейс управления (доступен через Ingress по HTTPS)
**Учётные данные**
Данные для подключения к RabbitMQ доступны в разделе "Учётные данные":
* **adminUser** — имя пользователя администратора
* **adminPass** — пароль администратора
---
## 5. Примеры подключения через консоль (rabbitmqadmin)
### Работа с очередями через rabbitmqadmin
Для работы с RabbitMQ через консоль используется утилита `rabbitmqadmin`. Установите её или используйте образ с предустановленной утилитой.
Задайте переменные окружения с учётными данными:
```bash
export RABBITMQ_USERNAME=<adminUser>
export RABBITMQ_PASSWORD=<adminPass>
export RABBIT_HOST=<host>
```
Где:
* `<adminUser>` и `<adminPass>` — учётные данные из раздела "Учётные данные"
* `<host>` — адрес для подключения:
* Для внешнего подключения: `externalConnect.admin.fqdn` или `externalConnect.master.fqdn`
**Создание очереди:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
declare queue name=healthcheck durable=false
```
**Листинг очередей:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
list queues
```
**Отправка сообщения:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
publish exchange=amq.default routing_key=healthcheck payload="ping-$(date +%s)"
```
**Чтение сообщения:**
```bash
rabbitmqadmin \
-H "$RABBIT_HOST" -P 15672 \
-u "$RABBITMQ_USERNAME" -p "$RABBITMQ_PASSWORD" \
get queue=healthcheck ackmode=ack_requeue_false
```
---
## 6. Дополнительная информация
Для подключения к кластеру RabbitMQ используйте полученные эндпоинты из раздела "Поля состояния (сгенерированные значения)" и учётные данные из раздела "Учётные данные".
Веб-интерфейс управления доступен по адресу, указанному в параметре `externalConnect.admin.fqdn` через HTTPS.
Для внутреннего подключения используйте адрес из `inernalConnect.master` на порту 5672.
---'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 38
- kind: instance
- action: create
- params:
- - id: 1097
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 619
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- is_modifiable: false
- - id: 1098
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 620
- code: cpu
- data_type: integer > 0
- required: true
- default: "1000"
- is_modifiable: false
- - id: 621
- code: memory
- data_type: integer > 0
- required: true
- default: "1024"
- is_modifiable: false
- - id: 622
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 623
- code: disk
- data_type: integer > 0
- required: true
- default: "5"
- is_modifiable: false
- - id: 1099
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- is_modifiable: true
- sub_params:
- - id: 624
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 625
- code: masterAccessList
- data_type: json
- required: true
- default: '[]'
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: delete
- id: 39
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 106
- kind: instance
- action: modify
- params:
- - id: 1100
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 629
- code: disk
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 626
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 627
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- is_modifiable: false
- - id: 628
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1101
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 630
- code: masterIpSpace
- data_type: string
- required: true
- default: ""
- descr: Из какого Ip-Space резервировать внешний IP
Список предоставляется из Организации, в котором развёрнута ресурсная платформа
- is_modifiable: false
- - id: 631
- code: masterAccessList
- data_type: json
- required: true
- default: ""
- man: Необходимо настраивать, когда зарезервирован внешний адрес
Если передан пустой массив, доступ выделяется всем
- is_modifiable: false
- - name: reconcile
- id: 410
- kind: action
- action: reconcile
- params: []
- - name: resume
- id: 117
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 116
- kind: instance
- action: suspend
- man: Пока не работает из за того что RabbitmqCluster нельзя занулить
- params: []
diff --git a/test/resources_yaml/94_lucee.yaml b/test/resources_yaml/94_lucee.yaml
deleted file mode 100644
index 2fcb5ea..0000000
--- a/test/resources_yaml/94_lucee.yaml
+++ /dev/null
@@ -1,252 +0,0 @@
-name: lucee
-service_id: 94
-service_display_name: Lucee
-service_short_name: lucee
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 49
- kind: instance
- action: create
- params:
- - id: 1019
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 430
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1020
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 431
- code: cpu
- data_type: integer > 0
- required: true
- default: "200"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 432
- code: memory
- data_type: integer > 0
- required: true
- default: "256"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 433
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1021
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 434
- code: domain
- data_type: string
- required: true
- default: lucee-tepsq9jk
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1022
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 435
- code: version
- data_type: string
- required: true
- default: "6.0"
- value_list:
- - "5.4"
- - "6.0"
- is_modifiable: false
- - id: 436
- code: gitPath
- data_type: string
- required: true
- default: https://github.com/xahys/testlucee
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 437
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1023
- code: jsonEnv
- data_type: map
- required: false
- default: '{}'
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 50
- is_modifiable: true
- - name: delete
- id: 50
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 55
- kind: instance
- action: modify
- params:
- - id: 1024
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 438
- code: cpu
- data_type: string
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 439
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 440
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1025
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 443
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 441
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "6.0"
- - "5.4"
- is_modifiable: false
- - id: 442
- code: gitPath
- data_type: string
- required: true
- default: ""
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 1026
- code: jsonEnv
- data_type: map
- required: false
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 30
- - name: reconcile
- id: 373
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 53
- kind: action
- action: redeploy
- params:
- - id: 1027
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 444
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - name: restart
- id: 163
- kind: action
- action: restart
- params: []
- - name: resume
- id: 95
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 96
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/95_nodejs.yaml b/test/resources_yaml/95_nodejs.yaml
deleted file mode 100644
index 6018128..0000000
--- a/test/resources_yaml/95_nodejs.yaml
+++ /dev/null
@@ -1,252 +0,0 @@
-name: nodejs
-service_id: 95
-service_display_name: NodeJS
-service_short_name: nodejs
-service_man: Развертывает контейнер в k8s кластере с node, который можно использовать для запуска своих приложений.
Приложение должно быть доступно по ссылки в git репозитории, которая является входным параметром.
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 58
- kind: instance
- action: create
- params:
- - id: 1028
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 445
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - id: 1029
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- is_modifiable: true
- sub_params:
- - id: 446
- code: cpu
- data_type: integer > 0
- required: true
- default: "200"
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 447
- code: memory
- data_type: integer > 0
- required: true
- default: "256"
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 448
- code: replicas
- data_type: integer > 0
- required: true
- default: "1"
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1030
- code: accessConfiguration
- data_type: map-fixed
- required: true
- sort: 30
- sub_params:
- - id: 449
- code: domain
- data_type: string
- required: true
- default: node-btf263ja
- man: 'Если указан FQDN в формате: `myapp.example.com`, предварительно будет проверяться DNS-запись (А-запись **должна смотреть на IP Ingress кластера ресурсной платформы**)
Если указан в формате `myapp`, DNS-запись будет автоматически создана в служебной DNS-зоне'
- is_modifiable: false
- - id: 1031
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 40
- is_modifiable: true
- sub_params:
- - id: 450
- code: version
- data_type: string
- required: true
- default: "23"
- value_list:
- - "18"
- - "20"
- - "22"
- - "23"
- is_modifiable: false
- - id: 451
- code: gitPath
- data_type: string
- required: true
- default: https://github.com/xahys/testnode.git
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 452
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1032
- code: jsonEnv
- data_type: map
- required: false
- default: '{}'
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 50
- is_modifiable: true
- - name: delete
- id: 61
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 59
- kind: instance
- action: modify
- params:
- - id: 1033
- code: clusterConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 453
- code: cpu
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Milicores
`1000` Mili == `1` Ядро
- is_modifiable: false
- - id: 454
- code: memory
- data_type: integer > 0
- required: true
- default: ""
- man: Указывается в Megabytes
- is_modifiable: false
- - id: 455
- code: replicas
- data_type: integer > 0
- required: true
- default: ""
- value_list:
- - "1"
- - "3"
- - "5"
- - "7"
- is_modifiable: false
- - id: 1034
- code: appConfiguration
- data_type: map-fixed
- required: true
- sort: 20
- sub_params:
- - id: 456
- code: version
- data_type: string
- required: true
- default: ""
- value_list:
- - "18"
- - "20"
- - "22"
- - "23"
- is_modifiable: false
- - id: 457
- code: gitPath
- data_type: string
- required: true
- default: ""
- man: 'Путь до репозитория приложения
Обязательно должен быть передан как URL: `https://....`
Должен быть сетевой доступ до URL для скачивания исходников'
- is_modifiable: false
- - id: 458
- code: healthPath
- data_type: string
- required: false
- default: ""
- man: Путь до healtcheck для запуска пода в Kubernetes, который отдаст 200 код
Пустое значение означает, что будет проверяться исключительно доступность приложения по порту
- is_modifiable: false
- - id: 1035
- code: jsonEnv
- data_type: map
- required: false
- man: Передаётся в формате КЛЮЧ:ЗНАЧЕНИЕ
- sort: 30
- - name: reconcile
- id: 374
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 60
- kind: action
- action: redeploy
- params:
- - id: 1036
- code: startupConfiguration
- data_type: map-fixed
- required: true
- sort: 10
- sub_params:
- - id: 459
- code: resourceRealm
- data_type: string
- required: true
- default: ""
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- man: Кластер Kubernetes, на котором будет развернут экземпляр
- is_modifiable: false
- - name: resume
- id: 121
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 120
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/96_pgadmin.yaml b/test/resources_yaml/96_pgadmin.yaml
deleted file mode 100644
index 8c15bde..0000000
--- a/test/resources_yaml/96_pgadmin.yaml
+++ /dev/null
@@ -1,168 +0,0 @@
-name: pgadmin
-service_id: 96
-service_display_name: pgAdmin
-service_short_name: pgadmin
-service_man: Инструмент с графическим интерфейсом для управления базами данных PostgreSQL
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 62
- kind: instance
- action: create
- params:
- - id: 164
- code: domain
- data_type: string
- required: true
- default: pgadmin-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - id: 165
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 4000
- minvalue: 500
- descr: Квота ядра пода (milicores). 1000Mili = 1 Ядро
- man: Квота ядра пода (milicores). 1000Mili = 1 Ядро
- sort: 30
- is_modifiable: true
- - id: 166
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 512
- descr: Квота памяти пода (MBytes)
- man: Квота памяти пода (MBytes)
- sort: 40
- is_modifiable: true
- - id: 167
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 50
- is_modifiable: true
- - id: 169
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 20
- - id: 170
- code: login
- data_type: string
- required: true
- regex: ^([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)$
- maxlength: 255
- minlength: 3
- descr: Логин для подключения к pgAdmin, в формате email (login@email.net)
- man: Логин для подключения к pgAdmin, в формате email (login@email.net)
- sort: 60
- - id: 171
- code: password
- data_type: string
- required: true
- descr: Пароль для подключения к pgAdmin
- man: Пароль для подключения к pgAdmin
- sort: 70
- is_sensitive: true
- - name: delete
- id: 63
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 64
- kind: instance
- action: modify
- params:
- - id: 172
- code: resourceCPU
- data_type: integer > 0
- required: false
- maxvalue: 4000
- minvalue: 500
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- - id: 173
- code: resourceMemory
- data_type: integer > 0
- required: false
- maxvalue: 8192
- minvalue: 512
- descr: Квота памяти пода (MBytes)
- man: Квота памяти пода (MBytes)
- - id: 174
- code: resourceDisk
- data_type: integer > 0
- required: false
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- - name: redeploy
- id: 65
- kind: action
- action: redeploy
- params:
- - id: 277
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- - name: resume
- id: 123
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 122
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/98_http.yaml b/test/resources_yaml/98_http.yaml
deleted file mode 100644
index 93858c4..0000000
--- a/test/resources_yaml/98_http.yaml
+++ /dev/null
@@ -1,170 +0,0 @@
-name: http
-service_id: 98
-service_display_name: Простой HTTP контейнер
-service_short_name: http
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 77
- kind: instance
- action: create
- params:
- - id: 212
- code: domain
- data_type: string
- required: true
- default: http-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 10
- - id: 213
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "100"
- maxvalue: 4000
- minvalue: 100
- descr: Квота ядра пода (Указывается в mili)
- man: Квота ядра пода (Указывается в mili)
- sort: 30
- is_modifiable: true
- - id: 214
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "200"
- maxvalue: 8192
- minvalue: 128
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 40
- is_modifiable: true
- - id: 215
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество реплик приложения. Трафик будет распределяться между подами в режиме Round-Robin
- sort: 50
- is_modifiable: true
- - id: 216
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- man: Наименование кластера Kubernetes для подключения
- sort: 20
- - id: 217
- code: registryPath
- data_type: string
- required: true
- default: nexus-sa.tst.nubes.ru/docker-nubes/jolt
- descr: Путь до image, который будет установлен как deployment
- man: Путь до image, который будет установлен как deployment
- sort: 60
- - id: 241
- code: jsonEnv
- data_type: map
- required: false
- man: Массив переменных, будут переданы в env приложения
- sort: 70
- - id: 782
- code: ingressAnnotations
- data_type: map
- required: false
- default: '{}'
- man: Формат ключ/значение
Поддерживает пока простые аннотации
- sort: 80
- - name: delete
- id: 78
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 81
- kind: instance
- action: modify
- params:
- - id: 218
- code: resourceCPU
- data_type: integer > 0
- required: true
- maxvalue: 4000
- minvalue: 100
- - id: 219
- code: resourceMemory
- data_type: integer > 0
- required: true
- maxvalue: 8192
- minvalue: 128
- - id: 220
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- - name: reconcile
- id: 403
- kind: action
- action: reconcile
- params: []
- - name: redeploy
- id: 79
- kind: action
- action: redeploy
- params:
- - id: 272
- code: resourceRealm
- data_type: string
- required: true
- value_list:
- - iot-naeel
- - k8s-3-sandbox-nubes-ru
- - k8s-4-sandbox-nubes-ru
- - naeel-test-3
- func: getAvailableResourceRealms
- descr: Платформа для развертывания
- sort: 10
- - name: resume
- id: 130
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 131
- kind: instance
- action: suspend
- params: []
diff --git a/test/resources_yaml/99_gitea.yaml b/test/resources_yaml/99_gitea.yaml
deleted file mode 100644
index 25b5b95..0000000
--- a/test/resources_yaml/99_gitea.yaml
+++ /dev/null
@@ -1,169 +0,0 @@
-name: gitea
-service_id: 99
-service_display_name: Gitea
-service_short_name: gitea
-service_man: '# Инструкция по развертыванию Gitea через платформу
---
## 1. Общая информация
Gitea — это лёгкий, быстрый и самодостаточный сервис хостинга Git-репозиториев с веб-интерфейсом.
Позволяет создавать и управлять репозиториями, организациями, командами, а также настраивать CI/CD через интеграции.
Развёртывание полностью автоматизировано платформой.
## Доступные операции
- **create** — Создание сервиса Gitea
- **delete** — Удаление сервиса Gitea
- **modify** — Модификация сервиса Gitea
- **suspend** — Остановка сервиса Gitea
- **resume** — Запуск сервиса Gitea
---
## 2. Параметры развертывания
Ниже перечислены параметры, которые необходимо указать при создании ресурса Gitea:
* **Платформа для развертывания:**
Платформа для развертывания (среда, в которой будет развёрнут сервис). Пример: `k8s-3.ext.nubes.ru`.
* **Количество узлов в сети:**
Количество реплик подов Gitea. Пример: `1`
* **Квота (megabyte) памяти пода:**
Квота памяти пода в мегабайтах. Пример: `1024`
* **Квота (millicore) ядра пода:**
Квота CPU пода в миликорах (1000 mCPU = 1 vCPU). Пример: `500`
* **Размер (gigabyte) диска для базы данных:**
Размер PVC для хранения репозиториев и данных Gitea в гигабайтах. Пример: `10`
* **FQDN / Домен:**
Доменное имя, по которому будет доступен сервис. Пример: `git.example.com`
* **Инстанс услуги PostgreSQL:**
UUID услуги k8sPgsql, в которой будет создана база данных `gitea` и пользователь `techgitea`.
* **Дополнительные параметры сервера (iniServerParams):**
JSON-объект с дополнительными параметрами секции `[server]` в `app.ini`. Пример:
```json
{"MAX_CONTENT_LENGTH": "524288000"}
```
* **Дополнительные annotations для Ingress (ingressExtraAnnotations):**
JSON-объект с дополнительными annotations для Ingress-контроллера. Пример:
```json
{"nginx.ingress.kubernetes.io/proxy-body-size": "500m"}
```
---
## 3. Особенности подключения и работы с репозиториями
### 3.1. Доступ только по HTTPS
Сервис развёртывается с **rootless-образом** Gitea. SSH-сервер внутри и он **доступен только внутри кластера Kubernetes**.
**Внешний доступ к репозиториям осуществляется исключительно по HTTPS через Ingress.**
```bash
# Пример клонирования
https://<домен>/<пользователь>/<репозиторий>.git
```
### 3.2. Настройка git для передачи логина и пароля
Для работы с приватными репозиториями через HTTPS необходимо передать учётные данные. Рекомендуется использовать один из следующих способов:
**Встроить креды в URL remote**
```bash
git remote set-url origin https://<логин>:<пароль>@<домен>/<пользователь>/<репозиторий>.git
```
> **Важно:** Логин и пароль администратора создаются автоматически при развертывании и хранятся в Vault.
### 3.3. Работа с большими файлами
По умолчанию `MAX_CONTENT_LENGTH` установлен в **500 МБ**, а Ingress пропускает pack-файлы до **500 МБ**.
Если необходимо запушить файлы близкие к лимиту, увеличьте HTTP-буфер git на стороне клиента:
```bash
git config http.postBuffer 524288000
```
Для файлов **более 500 МБ** рекомендуется использовать **Git LFS**.
---
## 4. Выходные параметры
После успешного развертывания ресурса Gitea платформа возвращает ряд параметров.
Ключевым из них является:
**connectionUrl**
Это внешний URL для доступа к веб-интерфейсу и Git-репозиториям по HTTPS. Пример:
```
https://git.example.com
```
**internalConnect**
Внутренний эндпоинт для подключения к PostgreSQL из других сервисов внутри кластера.
---
## 5. Дополнительная информация
- База данных `gitea` и пользователь `techgitea` создаются автоматически в указанной услуге PostgreSQL.
- DNS-запись и TLS-сертификат (Let''s Encrypt) настраиваются автоматически на основе указанного домена.
- Для изменения параметров сервера Gitea (`app.ini`) используйте операцию **modify** с полем `iniServerParams`.
- Для добавления дополнительных Ingress-annotations используйте операцию **modify** с полем `ingressExtraAnnotations`.
---'
-lifecycle:
- suspend_on_destroy_default: true
- adopt_existing_on_create_default: false
-outputs:
- params:
- - code: state_params
- type: map
- - code: state_out
- type: map
- - code: state_params_flat
- type: map
- - code: state_out_flat
- type: map
- - code: vault_secrets
- type: map
- sensitive: true
- - code: vault_url
- type: string
- - code: vault_user_path
- type: string
- - code: vault_fields
- type: list
-operations:
- - name: create
- id: 82
- kind: instance
- action: create
- params:
- - id: 232
- code: resourceCPU
- data_type: integer > 0
- required: true
- default: "500"
- maxvalue: 4000
- minvalue: 300
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- man: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- sort: 40
- is_modifiable: true
- - id: 233
- code: resourceMemory
- data_type: integer > 0
- required: true
- default: "512"
- maxvalue: 8192
- minvalue: 256
- descr: Квота памяти пода (Указывается в Megabytes)
- man: Квота памяти пода (Указывается в Megabytes)
- sort: 50
- is_modifiable: true
- - id: 234
- code: resourceDisk
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 60
- is_modifiable: true
- - id: 235
- code: resourceInstances
- data_type: integer > 0
- required: true
- default: "1"
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество узлов в сети
- sort: 70
- is_modifiable: true
- - id: 237
- code: domain
- data_type: string
- required: true
- default: gitea-1
- regex: ^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$
- unique_scope: provider
- descr: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- man: Если будет указан FQDN, то происходят проверки DNS на валидность А-записи, или будет добавлено в зону resourceRealm
- sort: 20
- - id: 238
- code: psqlUid
- data_type: uuid
- required: true
- ref_svc_id: 90
- descr: UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически
- man: UUID Услуги k8sPgsql. Пользователя techGitea, базу данных gitea создаёт автоматически
- sort: 10
- - id: 818
- code: ingressExtraAnnotations
- data_type: map
- required: false
- is_modifiable: true
- - id: 821
- code: iniServerParams
- data_type: map
- required: false
- is_modifiable: true
- - name: delete
- id: 83
- kind: instance
- action: delete
- params: []
- - name: modify
- id: 91
- kind: instance
- action: modify
- params:
- - id: 259
- code: resourceCPU
- data_type: integer > 0
- required: true
- maxvalue: 4000
- minvalue: 500
- descr: Квота ядра пода (Указывается в mili). 1000Mili = 1 Ядро
- sort: 10
- - id: 260
- code: resourceMemory
- data_type: integer > 0
- required: true
- maxvalue: 8192
- minvalue: 256
- descr: Квота памяти пода (Указывается в Megabytes)
- sort: 20
- - id: 261
- code: resourceDisk
- data_type: integer > 0
- required: true
- maxvalue: 999
- minvalue: 1
- descr: Квота диска (Указывается в GIGAbytes)
- man: Квота диска (Указывается в GIGAbytes)
- sort: 30
- - id: 262
- code: resourceInstances
- data_type: integer > 0
- required: true
- maxvalue: 7
- minvalue: 1
- descr: Количество узлов
- man: Количество узлов в сети
- sort: 40
- - id: 819
- code: ingressExtraAnnotations
- data_type: map
- required: false
- man: 'Примеры:
- `nginx.ingress.kubernetes.io/proxy-body-size: 500m` (Размер пакета)
- `nginx.ingress.kubernetes.io/proxy-read-timeout: "600"` (Время ожидания при чтении)
- `nginx.ingress.kubernetes.io/proxy-send-timeout: "600"` (Время ожидания отправке)'
- - id: 820
- code: iniServerParams
- data_type: map
- required: false
- man: 'Примеры:
- `MAX_CONTENT_LENGTH: 524288000(~500мб)` (Размер пакета в байтах)'
- - name: resume
- id: 127
- kind: instance
- action: resume
- params: []
- - name: suspend
- id: 126
- kind: instance
- action: suspend
- params: []