Как настроить динамические формы
Содержание
Обзор функцииСценарии использованияБыстрый стартБазовая конфигурация формыМетка формыОписание формыПодсказка-заполнительВсплывающая подсказка помощиОтключённое состояние формыПоддерживаемые типы полейТекстовое полеМногострочное текстовое полеВвод теговРадиокнопкиПереключатель (Switch)Редактор YAMLВыпадающий список (Select Box)Базовая конфигурация содержимогоКонфигурация динамических опций через APIЗначения параметров по умолчаниюВалидация формыОбязательная валидацияВалидация длиныВалидация числового диапазонаВалидация по регулярному выражениюПримеры использованияНастройка динамических форм в TaskНастройка динамических форм в PipelineУстранение неполадокОбзор функции
Функция конфигурации динамических форм позволяет декларативно настроить удобный интерактивный интерфейс для ресурсов, таких как Pipeline и Task. Без написания фронтенд-кода, просто добавив конфигурацию style.tekton.dev/descriptors в annotations ресурса, вы можете добиться:
- Автоматической генерации форм: Автоматически создавать интерактивные формы для параметров ресурса, обеспечивая лучший опыт при оркестрации и выполнении Pipelines и Tasks.
- Поддержки различных компонентов: Предоставляет различные компоненты формы, такие как текстовые поля, селекторы, переключатели, редакторы YAML и др.
- Валидации полей: Встроенные правила валидации для обеспечения соответствия пользовательского ввода требованиям.
- Динамической загрузки данных: Поддержка динамической загрузки данных опций через API.
Сценарии использования
- Оркестрация/выполнение Pipeline: Позволяет пользователям заполнять параметры, такие как namespace и секреты, через удобные формы при оркестрации или запуске
Pipeline. - Повторное использование Task: Предоставляет значения по умолчанию, варианты выбора и валидацию для общих параметров на уровне шаблона
TaskилиPipeline. - Выбор из нескольких окружений: Динамически запрашивает доступные окружения или конфигурации через API и использует их как варианты выбора.
Быстрый старт
Базовая структура конфигурации
Все конфигурации определяются через поле style.tekton.dev/descriptors в annotations:
Описание конфигурации
path: Указывает путь к параметру в форматеparams.parameter-namex-descriptors: Массив элементов конфигурации, каждый элемент начинается сurn:alm:descriptor:
Простой пример
Настройка обязательного текстового поля для параметра Task:
Базовая конфигурация формы
Метка формы
Описание формы
Подсказка-заполнитель
Всплывающая подсказка помощи
Отключённое состояние формы
Поддерживаемые типы полей
Текстовое поле
Многострочное текстовое поле
Ввод тегов
Радиокнопки
Переключатель (Switch)
Редактор YAML
Выпадающий список (Select Box)
Базовая конфигурация содержимого
Конфигурация динамических опций через API
Когда элементы формы должны динамически загружать доступные опции в зависимости от текущего окружения (например, доступные namespaces, секреты и т.д.), можно использовать динамическую конфигурацию 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
Пример: Предоставить выпадающий список для выбора namespaces для параметра image Task.
Эффект: При оркестрации Pipeline или TaskRun через UI параметр namespace этого Task поддерживает выбор namespace из выпадающего списка.
Настройка динамических форм в Pipeline
Пример: Предоставить выпадающий список для выбора namespaces для параметра 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-выражений