Как настроить динамические формы
Содержание
Обзор функцииСценарии использованияБыстрый стартБазовая конфигурация формыМетка формыОписание формыПодсказка-заполнительВсплывающая подсказка помощиОтключенное состояние формыПоддерживаемые типы полейТекстовое полеМногострочное текстовое полеВвод теговРадиокнопкиПереключательРедактор YAMLВыпадающий списокБазовая конфигурация содержимогоКонфигурация динамических опций через APIЗначения параметров по умолчаниюВалидация формыОбязательная валидацияВалидация длиныВалидация числового диапазонаВалидация по регулярному выражениюПримеры использованияНастройка динамических форм в TaskНастройка динамических форм в PipelineУстранение неполадокОбзор функции
Функция конфигурации динамических форм позволяет декларативно настроить удобный интерактивный интерфейс для ресурсов, таких как Pipeline и Task. Без написания фронтенд-кода, просто добавив конфигурацию style.tekton.dev/descriptors в annotations ресурса, вы можете добиться:
- Автоматической генерации форм: Автоматически создавать интерактивные формы для параметров ресурса, обеспечивая лучший опыт при оркестрации и выполнении Pipelines и Tasks.
- Поддержки различных компонентов: Предоставляет различные компоненты формы, такие как текстовые поля, селекторы, переключатели, редакторы YAML и др.
- Валидации полей: Встроенные правила валидации для обеспечения соответствия ввода пользователя требованиям.
- Динамической загрузки данных: Поддерживает динамическую загрузку данных опций через API.
Сценарии использования
- Оркестрация/выполнение Pipeline: Позволяет пользователям заполнять параметры, такие как namespace и secrets, через удобные формы при оркестрации или запуске
Pipeline. - Повторное использование Task: Предоставляет значения по умолчанию, варианты выбора и валидацию для общих параметров на уровне шаблона
TaskилиPipeline. - Выбор из нескольких окружений: Динамически запрашивает доступные окружения или конфигурации через API и использует их как варианты выбора.
Быстрый старт
Базовая структура конфигурации
Все конфигурации задаются через поле style.tekton.dev/descriptors в annotations:
Описание конфигурации
path: Указывает путь к параметру в форматеparams.parameter-namex-descriptors: Массив элементов конфигурации, каждый элемент начинается сurn:alm:descriptor:
Простой пример
Настройка обязательного текстового поля для параметра Task:
Базовая конфигурация формы
Метка формы
Описание формы
Подсказка-заполнитель
Всплывающая подсказка помощи
Отключенное состояние формы
Поддерживаемые типы полей
Текстовое поле
Многострочное текстовое поле
Ввод тегов
Радиокнопки
Переключатель
Редактор YAML
Выпадающий список
Базовая конфигурация содержимого
Конфигурация динамических опций через API
Когда элементы формы должны динамически загружать доступные опции в зависимости от текущего окружения (например, доступные namespaces, secrets и т.д.), можно использовать динамическую конфигурацию API для получения опций из бэкенд-интерфейсов в реальном времени.
В этом режиме URL API обычно комбинируются с контекстными переменными для динамического построения пути запроса на основе текущего кластера, namespace, проекта или заполненных параметров пользователя. Например:
Доступные контекстные переменные
В динамических API-путях можно использовать ${variable} для ссылки на информацию контекста во время выполнения.
- Общие контекстные переменные
- Контекстные переменные, связанные с Pipeline/Task
Эти переменные обычно используются вместе с URL API для динамического построения адресов запросов в разных окружениях, что позволяет реализовать логику загрузки опций с учётом окружения. Например:
Настройка пути к данным в ответе
Если API возвращает сложную структуру, например:
можно использовать path для указания, как извлечь массив опций из структуры.
Настройка полей для отображаемого имени и значения опций
Если возвращаемый объект данных сложный и необходимо указать внутренние поля как "отображаемое имя" и "значение опции", можно использовать:
Если API возвращает простой массив string[], такая настройка не требуется.
Настройка параметров запроса API
Если нужно передать параметры запроса в API (например, ключевые слова поиска или фильтры), можно использовать:
Когда пользователь вводит "test" в выпадающем списке, фактический запрос будет:
Продвинутое использование: Поддерживаются JavaScript-выражения, например:
Значения параметров по умолчанию
Фиксированное значение по умолчанию
Динамическое значение по умолчанию на основе выражения
Доступные переменные:
-
option: Исходные данные опции -
index: Индекс опции -
length: Общее количество опций -
context: Параметры контекста
Для правил синтаксиса условных выражений в сложных сценариях смотрите JavaScript syntax.
Валидация формы
Поддерживается настройка различных правил валидации, можно применять несколько правил одновременно.
Обязательная валидация
Валидация длины
Валидация числового диапазона
Валидация по регулярному выражению
Пример с комплексной валидацией: Настройка поля пароля с полной валидацией
Примеры использования
Настройка динамических форм в Task
Пример: Предоставить выпадающий список для выбора namespace для параметра image Task.
Эффект: При оркестрации Pipeline или TaskRun через UI параметр namespace этого Task поддерживает выбор из списка namespace.
Настройка динамических форм в Pipeline
Пример: Предоставить выпадающий список для выбора namespace для параметра target-namespace Pipeline.
Эффект: При запуске Pipeline через UI или при связывании этого pipeline с другими ресурсами (Trigger, TriggerTemplate) и настройке параметров времени выполнения параметр target-namespace поддерживает выбор из списка namespace.
Устранение неполадок
- Форма не отображается или конфигурация не работает: Проверьте корректность YAML формата
style.tekton.dev/descriptors, убедитесь, чтоpathнастроен какparams.parameter-name, проверьте, что каждый дескриптор начинается с- urn:alm:descriptor: - Динамические опции не загружаются: Убедитесь, что путь API правильный, проверьте, есть ли у текущего пользователя права доступа к указанному API ресурсу, проверьте, что настройки
path,labelиvalueуказывают на существующие поля в возвращаемых данных - Значение по умолчанию не применяется: Убедитесь, что фиксированное значение по умолчанию использует формат
expression:props.default:value, выражение по умолчанию использует===вместо=, проверьте правильность написания переменных (option, index, length, context) в выражении - Контекстные переменные не разрешаются: Проверьте правильность имён переменных (например,
context.namespace, а неcontext.namespaces), убедитесь, что переменные используются в дескрипторах, поддерживающих выражения, проверьте отсутствие ошибок в синтаксисе JavaScript выражений