Исходный код модуля и правила его сборки должны находиться в директории с определённой структурой. Ближайший аналог — Helm chart.
Не все папки и файлы модуля обязательны. Кратко, можно руководствоваться следующим:
- Создайте файл module.yaml, в котором опишите метаданные модуля.
-
В папке templates разместите шаблоны Helm, которые будут применяться в кластере.
Если необходимо чтобы объекты, создаваемые модулем, меняли своё поведение в зависимости от каких-либо параметров модуля, определите необходимые параметры в спецификации и используйте их в шаблонах.
-
В папке images разместите инструкции по сборке образов контейнеров, используемых модулем.
Если в шаблонах используются только адреса внешних образов, папку можно не создавать.
- Если модуль должен реагировать на события или взаимодействовать с Kubernetes API, то необходимо создать хуки, которые разместить в папке hooks.
- Разместите документацию к модулю в папке docs. Если документация модуля отсутствует, то модуль не появится в списке модулей в веб-интерфейсе документации в кластере.
- Если у модуля есть вспомогательные чарты Helm, разместите их в папке charts.
- Если модуль должен создавать кастомные ресурсы (CRD), разместите их спецификации в папке crds.
Мы подготовили репозиторий шаблона модуля, содержащий структуру файлов и директорий, с которой мы рекомендуем начинать разработку модуля.
Далее на этой странице вы найдёте более подробное описание структуры директорий и файлов модуля.
Пример структуры папки модуля...
Пример структуры папки модуля, содержащий правила сборки и публикации с помощью GitHub Actions:
📁 my-module/
├─ 📁 .github/
│ ├─ 📁 workflows/
│ │ ├─ 📝 build_dev.yaml
│ │ ├─ 📝 build_prod.yaml
│ │ ├─ 📝 checks.yaml
│ │ ├─ 📝 deploy_dev.yaml
│ │ └─ 📝 deploy_prod.yaml
├─ 📁 .werf/
│ ├─ 📁 workflows/
│ │ ├─ 📝 base-images.yaml
│ │ ├─ 📝 bundle.yaml
│ │ ├─ 📝 images.yaml
│ │ ├─ 📝 images-digest.yaml
│ │ ├─ 📝 batch-go.yaml
│ │ └─ 📝 release.yaml
├─ 📁 charts/
│ └─ 📁 helm_lib/
├─ 📁 crds/
│ ├─ 📝 crd1.yaml
│ ├─ 📝 doc-ru-crd1.yaml
│ ├─ 📝 crd2.yaml
│ └─ 📝 doc-ru-crd2.yaml
├─ 📁 docs/
│ ├─ 📝 README.md
│ ├─ 📝 README.ru.md
│ ├─ 📝 EXAMPLES.md
│ ├─ 📝 EXAMPLES.ru.md
│ ├─ 📝 CONFIGURATION.md
│ ├─ 📝 CONFIGURATION.ru.md
│ ├─ 📝 CR.md
│ ├─ 📝 CR.ru.md
│ ├─ 📝 FAQ.md
│ ├─ 📝 FAQ.ru.md
│ ├─ 📝 ADVANCED_USAGE.md
│ └─ 📝 ADVANCED_USAGE.ru.md
├─ 📁 hooks/
│ ├─ 📁 batch/
│ │ ├─ 📁 my-hooks/
│ │ │ ├─ 📝 my-hook1.go
│ │ │ └─ 📝 my-hook2.go
│ │ ├─ 📝 go.mod
│ │ ├─ 📝 go.sum
│ │ ├─ 📝 main.go
├─ 📁 images/
│ ├─ 📁 nginx
│ │ └─ 📝 Dockerfile
│ └─ 📁 backend
│ └─ 📝 werf.inc.yaml
├─ 📁 lib/
│ └─ 📁 python/
│ └─ 📝 requirements.txt
├─ 📁 openapi/
│ ├─ 📁 conversions
│ │ ├─ 📁 testdata
│ │ │ ├─ 📝 v1-1.yaml
│ │ │ └─ 📝 v2-1.yaml
│ │ ├─ 📝 conversions_test.go
│ │ └─ 📝 v2.yaml
│ ├─ 📝 config-values.yaml
│ ├─ 📝 doc-ru-config-values.yaml
│ └─ 📝 values.yaml
├─ 📁 templates/
│ ├─ 📝 a.yaml
│ └─ 📝 b.yaml
├─ 📝 .helmignore
├─ 📝 Chart.yaml
├─ 📝 module.yaml
├─ 📝 werf.yaml
└─ 📝 werf-giterminism.yaml
charts
В папке /charts находятся вспомогательные чарты Helm, которые используются при рендере шаблонов.
У Deckhouse Kubernetes Platform (DKP) существует собственная библиотека для работы с шаблонами – lib-helm. О возможностях библиотеки можно почитать в репозитории lib-helm. Чтобы положить библиотеку в модуль, загрузите tgz-архив с нужным релизом и переместите его в директорию /charts модуля.
crds
В этой директории лежат CustomResourceDefinition (CRD), которые используются компонентами модуля. CRD обновляются каждый раз, когда запускается модуль, если есть обновления.
Вложенные директории в папке /crds игнорируются.
Чтобы отобразить CRD из директории /crds в документации на сайте или модуле documentation в кластере, выполните следующие шаги:
- Создайте файл перевода со структурой аналогичной исходному файлу ресурса:
- оставьте только параметры
description, в которых укажите текст перевода; - используйте префикс
doc-ru-в названии: например/crds/doc-ru-crd.yamlдля/crds/crd.yaml.
- оставьте только параметры
- Создайте файлы
/docs/CR.mdи/docs/CR.ru.md.
docs
Статус жизненного цикла модуля указывается в module.yaml. Доступность модуля в редакциях Deckhouse Kubernetes Platform не определяется разработчиком модуля.
В папке /docs находится документация к модулю. Следующие вложенные директории в папке docs игнорируются при сборке документации:
internalinternalsdevelopmentdev
Следующие файлы обязательны:
-
README.mdиREADME.ru.md— описание, для чего нужен модуль, какую проблему он решает и общие архитектурные принципы.Метаданные файла (front matter) в виде YAML-структуры должны быть во всех языковых версиях файла. Параметры, доступные для использования в метаданных:
title— (рекомендуется) Заголовок страницы описания модуля. Пример — “Веб-консоль администратора Deckhouse”. Он же используется в навигации, если не указан параметрlinkTitle.menuTitle— (желательно) Название модуля в меню слева на странице (sidebar). Пример — “Deckhouse Admin”. Если отсутствует, то используется название директории или репозитория, напримерdeckhouse-admin.linkTitle— (опционально) Отдельный заголовок для навигации, если, например,titleочень длинный. Если отсутствует, то используется параметрtitle.description— (желательно) Краткое уникальное описание содержимого страницы (до 150 символов). Не повторяетtitle. Служит продолжением названия и раскрывает его детальнее. Используется при генерации превью-ссылок и индексации поисковыми системами. Пример — «Модуль позволяет полностью управлять кластером Kubernetes через веб-интерфейс, имея только навыки работы мышью.»
Пример метаданных...
--- title: "Веб-консоль администратора Deckhouse" menuTitle: "Deckhouse Admin" description: "Модуль позволяет полностью управлять кластером Kubernetes через веб-интерфейс, имея только навыки работы мышью." ---
Следующие файлы не обязательны, но имеют предопределённое название пункта в sidebar (меню слева) и заголовок страницы:
-
EXAMPLES.mdиEXAMPLES.ru.md— примеры конфигурации модуля с описанием.Метаданные файла (front matter) в виде YAML-структуры должны быть во всех языковых версиях файла. Параметры, доступные для использования в метаданных:
title– (рекомендуется) Заголовок страницы. Пример: “Примеры”. Он же используется в навигации, если нетlinkTitle.description– (желательно) Краткое уникальное описание содержимого страницы (до 150 символов). Не повторяетtitle. Служит продолжением названия и раскрывает его детальнее. Используется при генерации превью-ссылок, индексации поисковиками. Пример: “Примеры хранения секретов в нейронной сети с автоматической подстановкой в мысли при общении.”linkTitle– (опционально) Отдельный заголовок для навигации, если, например,titleочень длинный. Если отсутствует, то используетсяtitle.
Пример метаданных...
--- title: "Примеры" description: "Примеры хранения секретов в нейронной сети с автоматической подстановкой в мысли при общении." --- -
FAQ.mdиFAQ.ru.md— часто задаваемые вопросы, касающиеся эксплуатации модуля (“Какой сценарий выбрать: А или Б?”).Метаданные файла (front matter) в виде YAML-структуры должны быть во всех языковых версиях файла. Параметры, доступные для использования в метаданных:
title– (рекомендуется) Заголовок страницы.description– (желательно) Краткое уникальное описание содержимого страницы (до 150 символов).linkTitle– (опционально) Отдельный заголовок для навигации, если, например,titleочень длинный. Если отсутствует, то используетсяtitle.
Пример метаданных...
--- title: "Часто задаваемые вопросы" description: "Часто задаваемые вопросы и ответы на них." --- -
ADVANCED_USAGE.mdиADVANCED_USAGE.ru.md— расширенные инструкции по использованию и отладке модуля.Метаданные файла (front matter) в виде YAML-структуры должны быть во всех языковых версиях файла. Параметры, доступные для использования в метаданных:
title– (рекомендуется) Заголовок страницы.description– (желательно) Краткое уникальное описание содержимого страницы (до 150 символов).linkTitle– (опционально) Отдельный заголовок для навигации, если, например,titleочень длинный. Если отсутствует, то используетсяtitle.
Пример метаданных...
--- title: "Отладка модуля" description: "В разделе разбираются все шаги по отладке модуля." --- -
CR.mdиCR.ru.md— файлы для генерации ресурсов из папки/crds/. Добавьте эти файлы, если необходима генерация ресурсов из папки/crdsмодуля.Пример метаданных...
--- title: "Кастомные ресурсы" --- -
CONFIGURATION.mdиCONFIGURATION.ru.md— файлы для рендеринга OpenAPI-спецификаций из файлов/openapi/config-values.yamlи/openapi/doc-<LANG>-config-values.yaml. Добавьте эти файлы, если необходима генерация таких спецификаций.Пример метаданных...
--- title: "Настройки модуля" ---
Все изображения, PDF-файлы и другие медиафайлы нужно хранить в директории /docs или её подкаталогах (например, /docs/images/). Все ссылки на файлы должны быть относительными.
Для каждого языка нужен файл с соответствующим суффиксом. Например, image1.jpg и image1.ru.jpg. Используйте ссылки:
[image1](image1.jpg)в англоязычном документе;[image1](image1.ru.jpg)в русскоязычном документе.
hooks
В директории /hooks/batch находятся хуки модуля. Хук — это исполняемый файл, выполняемый при реакции на событие. Хуки используются модулем также для динамического взаимодействия с API Kubernetes. Например, они могут быть использованы для обработки событий, связанных с созданием или удалением объектов в кластере.
Познакомьтесь с концепцией хуков, прежде чем начать разрабатывать свой собственный хук. Для ускорения разработки хуков можно воспользоваться Go-библиотекой от команды Deckhouse.
Требования к работе хука:
- При запуске с аргументами
hook configдолжна выводиться конфигурация хуков в формате JSON. - При запуске с аргументами
hook listдолжен выводиться список всех хуков с их порядковым номером. - При запуске с аргументами
hook run 0должна выполняться логика хука под номером 0.
Файлы хуков должны иметь права на выполнение. Добавьте их командой chmod +x <путь до файла с хуком>.
В репозитории шаблона модуля можно найти примеры хуков на Go. Примеры хуков на Go также можно найти в SDK.
images
В директории /images находятся инструкции по сборке образов контейнеров модуля. На первом уровне находятся директории для файлов, используемых при создании образа контейнера, на втором — контекст для сборки.
Существует два способа описания образа контейнера:
- Dockerfile — файл, который содержит команды для быстрой сборки образов. Если необходимо собрать приложение из исходного кода, поместите его рядом с Dockerfile и включите его в образ с помощью команды
COPY. - Файл
werf.inc.yaml, который является аналогом секции описания образа изwerf.yaml.
Имя образа совпадает с именем директории для этого модуля, записанным в нотации camelCase с маленькой буквы. Например, директории /images/echo-server соответствует имя образа echoServer.
Собранные образы имеют content-based теги, которые можно использовать в сборке других образов. Чтобы использовать content-based теги образов, подключите библиотеку lib-helm. Вы также можете воспользоваться другими функциями библиотеки helm_lib Deckhouse Kubernetes Platform.
Пример использования content-based тега образа в Helm-чарте:
image: {{ include "helm_lib_module_image" (list . "<имя образа>") }}
openapi
conversions
В директории /openapi/conversions находятся файлы конверсий параметров модуля и их тесты.
Конверсии параметров модуля позволяют конвертировать OpenAPI-спецификацию параметров модуля одной версии в другую. Конверсии могут быть необходимы в случаях, когда в новой версии OpenAPI-спецификации параметр переименовывается или переносится в другое место.
Каждая конверсия возможна только между двумя смежными версиями (например с первой версии на вторую). Конверсий может быть несколько, и цепочка конверсий должна последовательно покрывать все версии спецификации параметров модуля, без “пропусков”.
Файл конверсии — это YAML-файл с именем v<N>.yaml или v<N>.yml, где <N> — версия конверсии. Его структура:
# Номер версии спецификации параметров модуля, в которую преобразовываются данные при конверсии.
version: N
# Набор выражений jq, которые используются при конверсии в кластере для автоматического преобразования
# параметров модуля предыдущей версии.
conversions: []
# Описание действий (на двух языках), которые необходимо выполнить, чтобы преобразовать данные
# из предыдущей версии спецификации параметров модуля.
description:
ru: ""
en: ""
Описание действий, указываемое в секции description файла конверсий, должно быть понятным и содержать информацию о том, какие параметры и в каком порядке нужно изменить в спецификации параметров модуля, чтобы перейти к новой версии.
Пример файла конверсии параметров модуля v2.yaml, где в версии 2 удаляется параметр .auth.password:
version: 2
conversions:
- del(.auth.password) | if .auth == {} then del(.auth) end
description:
ru: "Удалите `.auth.password`, затем `auth`, если он пуст."
en: "Remove `.auth.password`, then `auth` if empty."
Тесты конверсий
Для написания тестов конверсий можно использовать функцию conversion.TestConvert, которой нужно передать:
- путь до исходного файла конфигурации (версия до конвертации);
- путь до ожидаемого файла конфигурации (версия после конвертации).
Пример теста конверсии.
config-values.yaml
Необходим для проверки параметров модуля, которые пользователь может настроить через ModuleConfig.
Чтобы схема была представлена в документации на сайте или в модуле documentation в кластере, создайте:
- файл
doc-ru-config-values.yamlсо структурой, аналогичной структуре файлаconfig-values.yaml. В файлеdoc-ru-config-values.yamlоставьте только переведенные параметры description; - файлы
/docs/CONFIGURATION.mdи/docs/CONFIGURATION.ru.md— это включит показ данных из файлов/openapi/config-values.yamlи/openapi/doc-ru-config-values.yaml.
Пример схемы /openapi/config-values.yaml с одним настраиваемым параметром nodeSelector:
type: object
properties:
nodeSelector:
type: object
additionalProperties:
type: string
description: |
The same as the Pods' `spec.nodeSelector` parameter in Kubernetes.
If the parameter is omitted or `false`, `nodeSelector` will be determined
automatically.</code>
Пример файла /openapi/doc-ru-config-values.yaml для русскоязычного перевода схемы:
properties:
nodeSelector:
description: |
Описание на русском языке. Разметка Markdown.</code>
Валидации x-deckhouse-validations (CEL)
При разработке модуля для Deckhouse Kubernetes Platform вы можете использовать расширение OpenAPI x-deckhouse-validations для описания сложных правил валидации параметров модуля на языке Common Expression Language (CEL).
При использовании таких правил валидации учитывайте следующие особенности:
- Валидации можно размещать как на корневом уровне, так и внутри любого свойства (в том числе внутри объектов, массивов и additionalProperties).
- В выражениях доступны все параметры текущего уровня через переменную
self. - Прежнее значение того же уровня доступно через переменную
oldSelf. Правила, использующиеoldSelf, считаются правилами перехода и проверяются только при обновлении (когда на этом уровне есть прежнее значение); при первичном создании или для впервые появившегося поддерева такие правила автоматически пропускаются. Поведение совпадает сx-kubernetes-validations. - Валидация работает рекурсивно: все вложенные объекты, массивы и карты также могут содержать свои
x-deckhouse-validations. - Поддерживаются скалярные типы, массивы, объекты и карты (
additionalProperties). - В случае множественных ошибок валидации пользователю будут показаны все сообщения из соответствующих правил.
Примеры правил
Ниже представлены примеры описаний сложных правил валидации на языке CEL:
-
Проверка попадания значения параметра в диапазон:
type: object properties: replicas: type: integer minReplicas: type: integer maxReplicas: type: integer x-deckhouse-validations: - expression: "self.minReplicas <= self.replicas && self.replicas <= self.maxReplicas" message: "replicas должно быть между minReplicas и maxReplicas" -
Проверка наличия ключа:
- expression: "'Available' in self.stateCounts" message: "Должен быть ключ Available" -
Проверка, что хотя бы один из двух списков не пуст:
- expression: "(self.list1.size() == 0) != (self.list2.size() == 0)" message: "Ровно один из списков должен быть непустым" -
Проверка значения по регулярному выражению:
- expression: "self.details.all(key, self.details[key].matches('^[a-zA-Z]*$'))" message: "Все значения должны содержать только буквы" -
Объявление поля неизменяемым (immutable) через переменную
oldSelf(transition rule):type: object properties: clusterDomain: type: string x-deckhouse-validations: - expression: "self.clusterDomain == oldSelf.clusterDomain" message: "Поле clusterDomain нельзя изменить после создания"Правило проверяется только на обновлении: при первичном создании (когда прежнего значения ещё нет) оно пропускается автоматически — так же, как правило перехода в
x-kubernetes-validations. -
Запрет удалять элементы из списка (список можно только дополнять):
- expression: "oldSelf.items.all(x, x in self.items)" message: "Из items нельзя удалять элементы, можно только добавлять"
Валидация скалярных значений и массивов
Валидации скалярных значений и массивов имеют следующие особенности:
- Если свойство — скаляр (например, число или строка), то в выражении CEL переменная
selfбудет этим значением. - Если свойство — массив, то
selfбудет массивом, и можно использовать методы.size(),.all(),.exists()и т.д.
Пример для массива:
type: object
properties:
items:
type: array
items:
type: string
x-deckhouse-validations:
- expression: "self.size() > 0"
message: "Список items не должен быть пустым"
Валидация additionalProperties (map)
Для объектов с additionalProperties (map) можно валидировать ключи и значения через методы .all(key, ...), .exists(key, ...) и т.д.
Пример:
type: object
properties:
mymap:
type: object
additionalProperties:
type: integer
x-deckhouse-validations:
- expression: "self.all(key, self[key] > 0)"
message: "Все значения в mymap должны быть больше 0"
values.yaml
Необходим для проверки исходных данных при рендере шаблонов без использования дополнительных функций Helm chart. Ближайший аналог — schema-файлы из Helm.
В values.yaml можно автоматически добавить валидацию параметров из config-values.yaml. В этом случае, минимальный values.yaml выглядит следующим образом:
x-extend:
schema: config-values.yaml
type: object
properties:
internal:
type: object
default: {}
templates
В директории /templates находятся шаблоны Helm.
-
Для доступа к настройкам модуля в шаблонах используйте путь
.Values.<имяМодуля>, а для глобальных настроек.Values.global. Имя модуля конвертируется в нотациюcamelCase. -
Для упрощения работы с шаблонами используйте lib-helm – это набор дополнительных функций, которые облегчают работу с глобальными и модульными значениями.
-
Доступы в registry из ресурса ModuleSource доступны по пути
.Values.<имяМодуля>.registry.dockercfg. -
Чтобы использовать эти функции для пула образов в контроллерах, создайте секрет и добавьте его в соответствующий параметр:
"imagePullSecrets": [{"name":"registry-creds"}].apiVersion: v1 kind: Secret metadata: name: registry-creds type: kubernetes.io/dockerconfigjson data: .dockerconfigjson: {{ .Values.<имяМодуля>.registry.dockercfg }}
Модуль может иметь параметры, с помощью которых может менять своё поведение. Параметры модуля и схема их валидации описываются в OpenAPI-схемах в директории /openapi.
Настройки лежат в двух файлах: config-values.yaml и values.yaml.
Пример OpenAPI-схемы можно найти в шаблоне модуля.
.helmignore
Исключите файлы из Helm-релиза с помощью .helmignore. В случае модулей DKP директории /crds, /images, /hooks, /openapi обязательно добавляйте в .helmignore, чтобы избежать превышения лимита размера Helm-релиза в 1 Мб.
Chart.yaml
Файл для чарта, аналогичный Chart.yaml из Helm. Должен содержать, как минимум, параметр name с именем модуля и параметр version с версией.
Вы можете не создавать данный файл, Deckhouse создаст его автоматически.
Пример:
name: echoserver
version: 0.0.1
dependencies:
- name: deckhouse_lib_helm
version: 1.38.0
repository: https://deckhouse.github.io/lib-helm
module.yaml
Файл module.yaml в корне папки модуля содержит метаданные модуля.
Файл может отсутствовать, но рекомендуется его заполнить. Большинство метаданных будут доступны в объекте Module в кластере. Объект Module будет создан автоматически после настройки источника модулей (ресурс ModuleSource) и успешной синхронизации.
Параметры, которые можно использовать в module.yaml:
| Параметр | Тип | Описание |
|---|---|---|
namespace |
Строка | Неймспейс, в котором будут развёрнуты компоненты модуля |
subsystems |
Массив строк | Список подсистем, к которым относится модуль |
accessibility |
Объект | Настройки доступности модуля |
accessibility.editions |
Объект | Настройки работы модуля в редакциях DKP |
accessibility.editions.available |
Булевый | Определяет доступность модуля в редакции DKP |
accessibility.editions.enabledInBundles |
Массив строк | Список наборов модулей, в которых модуль должен быть включён по умолчанию |
descriptions |
Объект | Произвольное текстовое описание назначения модуля |
descriptions.en |
Строка | Текстовое описание на английском языке |
descriptions.ru |
Строка | Текстовое описание на русском языке |
disable |
Объект | Параметры, связанные с поведением при отключении модуля |
disable.confirmation |
Булевый | Требовать подтверждение при отключении модуля |
disable.message |
Строка | Сообщение с информацией о том, что произойдёт при отключении модуля |
Если для отключения модуля требуется подтверждение (параметр confirmation установлен в true), то отключение будет возможно только в случае, если на соответствующем объекте ModuleConfig установлена аннотация modules.deckhouse.io/allow-disabling=true. Если такой аннотации нет, при попытке отключить модуль будет выведено предупреждение, включающее сообщение из параметра message.
Другие параметры module.yaml:
| Параметр | Тип | Описание |
|---|---|---|
name |
Строка, обязательный параметр | Имя модуля в Kebab Case. Например, echo-server |
exclusiveGroup |
Строка | Если несколько модулей имеют одно и то же значение этого параметра, то только один из них может быть активен в системе одновременно. Это предотвращает конфликты между модулями, выполняющими схожие или несовместимые задачи |
requirements |
Объект | Зависимости модуля — условия, при которых Deckhouse Kubernetes Platform (DKP) может запустить модуль |
requirements.deckhouse |
Строка | Зависимость от версии Deckhouse Kubernetes Platform |
requirements.kubernetes |
Строка | Зависимость от версии Kubernetes |
requirements.modules |
Объект | Зависимость от версий других модулей |
stage |
Строка | Стадия жизненного цикла модуля. Допустимые значения: Experimental, Preview, General Availability, Deprecated. Если stage установлен в Experimental, модуль нельзя включить по умолчанию. Чтобы разрешить использовать такие модули, установите соответствующий параметр в true |
tags |
Массив строк | Дополнительные теги модуля. Теги преобразуются в лейблы объекта Module по шаблону module.deckhouse.io/<TAG>="". Например, если указать два тега test и example, то объект Module получит лейблы module.deckhouse.io/test="" и module.deckhouse.io/example="" |
weight |
Число | Вес модуля. Влияет на порядок запуска модулей: модули с меньшим значением weight запускаются раньше. По умолчанию — 900. На порядок запуска также влияют зависимости модуля |
critical |
Булевый | Помечает модуль как критичный для начальной инициализации кластера. Такие модули (если они используются в кластере) запускаются в процессе начальной загрузки кластера, до того как кластер считается полностью готовым к работе. Остальные модули (не являющиеся критичными) запускаются только после того, как кластер полностью готов к работе. По умолчанию — false |
Пример описания метаданных модуля hello-world:
name: hello-world
tags: ["test", "myTag"]
weight: 960
stage: "Experimental"
namespace: "test"
exclusiveGroup: "group"
subsystems:
- test
- test1
accessibility:
editions:
ee:
available: true
enabledInBundles:
- Default
descriptions:
en: "The module to say hello to the world."
ru: "Модуль, который приветствует мир."
requirements:
deckhouse: ">= 1.61"
kubernetes: ">= 1.27"
disable:
confirmation: true
message: "Отключение этого модуля приведёт к удалению всех созданных им ресурсов."
Настройка доступности модуля в редакциях DKP
Параметр accessibility позволяет задать редакции DKP и наборы модулей (bundles), в которых будет доступен модуль,
а также определить, будет ли он включаться по умолчанию.
accessibility:
editions:
_default:
available: true
enabledInBundles:
- Default
- Managed
ce:
available: false
ee:
available: true
enabledInBundles:
- Managed
Описание параметров:
accessibility— Объект. Корневой блок настройки доступности модуля.editions— Объект. Набор ключей с названиями редакций. Для каждой редакции можно задать собственные настройки доступности._default— Объект. Настройка по умолчанию, если отсутствует конфигурация для конкретной редакции.available— Булевый. Определяет, доступен ли модуль в рамках указанной редакции.enabledInBundles— Массив строк. Наборы модулей, в которых модуль будет включён по умолчанию. Поддерживаемые наборы модулей (состав каждого из наборов доступен на этой странице):Default— рекомендованный набор модулей для работы кластера. Включает средства мониторинга, контроля авторизации, организации работы сети и другие необходимые компоненты.Managed— набор модулей для кластеров, управляемых облачными провайдерами (например, Google Kubernetes Engine).-
Minimal— минимальный набор, включающий только текущий модуль.Обратите внимание, что в этот набор не входят базовые модули (например, модуль работы с CNI). Без включения базовых модулей DKP может работать только в уже развёрнутом кластере. Список модулей, которые нужно включить вручную при установке, приведён в разделе «Особенности работы с набором модулей Minimal».
- Блоки с названиями редакций. Позволяют задать поведение модуля в указанных редакциях.
Возможные значения:
be,ce,ee,se,se-plus.
Логика определения доступности модуля
Схема ниже показывает логику определения доступности и включения модуля в зависимости от настроек:

Примеры конфигурации
В следующем примере конфигурации модуль будет недоступен во всех редакциях, кроме DKP Enterprise Edition.
В DKP Enterprise Edition модуль будет включён по умолчанию в наборе модулей Managed.
accessibility:
editions:
_default:
available: false
ee:
available: true
enabledInBundles:
- Managed
В следующем примере конфигурации модуль будет доступен во всех редакциях DKP.
В наборах модулей Managed и Default модуль будет включён по умолчанию.
accessibility:
editions:
_default:
available: true
enabledInBundles:
- Managed
- Default
В следующем примере модуль будет доступен во всех редакциях DKP.
Модуль будет включён в наборах модулей Default и Managed во всех редакциях,
кроме DKP Basic Edition и DKP Community Edition.
accessibility:
editions:
_default:
available: true
enabledInBundles:
- Default
- Managed
be:
available: false
ce:
available: false