Шаблон рабочего пространства — проект OpenTofu с подключением Kubernetes, настройками Git и набором навыков. Новый ручной шаблон содержит стартовый проект с контейнерами агента, IDE, веб-терминала и проверки доступа, постоянным томом, Service и Ingress.

Первый шаблон

Перед созданием выполните подготовку рабочих пространств. Затем настройте ручной шаблон:

  1. Откройте «AI» → «Рабочие пространства» → «Шаблоны рабочих пространств» и нажмите «Создать шаблон».
  2. Укажите название и уникальный идентификатор, например team-development.
  3. На вкладке «Подключение» выберите «Подключение Kubernetes» и «Namespace». При необходимости выберите сервисную учётную запись.
  4. Для работы с проектом включите «Инициализировать репозиторием», выберите «Подключение Git», задайте HTTPS URL и ветку. Если проект выбирает пользователь, включите «Разрешить переопределять при создании». Для пространства без Git оставьте инициализацию выключенной.
  5. Сохраните шаблон и откройте вкладку «Файлы».
  6. В main.tf задайте local.ide_domain, например example-workspaces.com, и проверьте параметры Ingress, TLS, образов и хранения. Используйте отдельный домен от DDP и Dex.
  7. В настройках шаблона в блоке «Приложения» задайте «Потолок уровня для публикации портов». Состав приложений и количество адресов настраиваются в файлах шаблона.
  8. Нажмите «Сохранить», затем «Опубликовать v1».
  9. На вкладке «Версии» нажмите «Активировать v1».

Пользователь создаёт новое рабочее пространство из активной версии. Опубликованная версия неизменяема; следующая правка выполняется в черновике и публикуется новой версией.

Состав стартового проекта

Файлы определяют объекты Kubernetes и содержимое рабочей директории:

ПутьНазначение
versions.tfВерсия OpenTofu, версия и конфигурация провайдера Kubernetes
main.tfStatefulSet, постоянный том, Secrets, ConfigMap, Service, Ingress и настройки доставки файлов
variables.tfПользовательские параметры формы создания
outputs.tfОбязательные результаты ddp_runtime и ddp_apps
files/Текстовые файлы для рабочей директории пространства
scripts/create.shНеобязательная первоначальная настройка нового тома
scripts/start.shНеобязательная настройка при каждом запуске

Портал создаёт ddp.tf и ddp.auto.tfvars.json самостоятельно. Эти пути, директория .terraform и имена переменных с префиксом ddp_ зарезервированы. Добавляйте собственные переменные без этого префикса.

Параметры формы создания

Переменная корневого модуля становится полем формы рабочего пространства. В редакторе откройте variables.tf и добавьте переменную:

variable "runtime_memory" {
  description = "Память контейнера агента"
  type        = string
  default     = "2Gi"

  validation {
    condition     = contains(["2Gi", "4Gi", "8Gi"], var.runtime_memory)
    error_message = "Выберите 2Gi, 4Gi или 8Gi."
  }
}

В штатном шаблоне runtime_memory уже существует: замените её блок вместо добавления второго. Значение используется в local.runtime_resources. После публикации в форме появится выбор объёма памяти; без изменения пользователь получит 2Gi.

Форма поддерживает типы string, number, bool и list(string). description становится пояснением поля, default — начальным значением. Переменная без default обязательна. Проверка contains([...], var.<name>) задаёт варианты выбора. Другие условия validation проверяются OpenTofu при операции.

Пример параметра со списком названий Secrets:

variable "registry_secrets" {
  description = "Secrets для скачивания образов в целевом неймспейсе"
  type        = list(string)
  default     = []
}

Чтобы значение влияло на под, замените соответствующую строку существующего блока locals в main.tf:

image_pull_secrets = var.registry_secrets

Параметр с sensitive = true скрывается в интерфейсе. Реквизиты подключения Git и Kubernetes задавайте через подключения и учётные записи шаблона.

Проверка и публикация изменений

Для проверки до переключения всех новых пространств:

  1. Откройте черновик и измените файлы.
  2. Сохраните их. Если черновик изменён другим пользователем, обновите его и повторно внесите свои изменения в актуальную ревизию.
  3. Нажмите «Проверить в рабочем пространстве». Черновик доступен пользователям с правом редактирования шаблона; до публикации используются значения параметров по умолчанию.
  4. Проверьте результат создания, IDE, файлы и команды в тестовом рабочем пространстве.
  5. Опубликуйте версию и сравните её с предыдущей кнопкой «Сравнить».
  6. Активируйте нужную версию на вкладке «Версии».

Активация влияет на последующие создания. Существующие пространства остаются на своих версиях до явного обновления. Чтобы вернуть прежний шаблон для новых созданий, активируйте прежнюю опубликованную версию.

Связь с порталом

В шаблоне обязательны output "ddp_runtime" и output "ddp_apps". Стартовый проект возвращает:

output "ddp_runtime" {
  value = {
    statefulset    = kubernetes_stateful_set_v1.runtime.metadata[0].name
    namespace      = var.ddp_namespace
    container      = "runtime"
    engine_port    = local.engine_port
    ide_container  = "ide"
    ide_url        = local.ide_url
    work_directory = local.work_directory
    app_slots      = local.app_slots
    gate_port      = local.gate_port
  }
}

output "ddp_apps" {
  value = local.apps
}

Портал использует StatefulSet для запуска и остановки, контейнер агента и его порт для заданий, адрес ide_url для открытия IDE. Поля app_slots и gate_port обязательны; app_slots = 0 отключает публикацию портов. Результат ddp_apps содержит приложения шаблона или пустой список [].

Сохраняйте соответствие результатов фактически созданным объектам и HTTPS-адресам при изменении шаблона. Для собственных шаблонов добавьте новые поля, результат ddp_apps и маршруты приложений; отсутствие обязательного результата или поля завершает операцию ошибкой.

Навыки и архивирование

На вкладке «Навыки» выберите навыки DDP и закреплённую версию либо «Последняя». Набор фиксируется при создании и каждом запуске рабочего пространства.

Для шаблона с Git переключатель «Разрешить навыки из репозитория» задаёт доступность навыков самой рабочей копии. Если он выключен, выбранные «Скрытые директории навыков» исключаются из рабочей копии при запуске. Это ограничение видимости файлов; прочитать их через Git всё ещё возможно.

Архивный шаблон сохраняет версии и существующие рабочие пространства, но новые пространства из него создавать нельзя. Для возобновления создания используйте «Вернуть из архива».

Ограничения файлов

При редактировании учитывайте ограничения шаблона:

ОграничениеЗначение
Число файловДо 256
Размер одного файлаДо 1 МиБ
СодержимоеТекст в UTF-8
ПутьОтносительный, без пустых сегментов, . и ..

Практические примеры — доставка файлов и скрипты, установка Go и других инструментов, образы, Ingress и хранение, приложения и порты, синхронизация из GitLab.