ResourceInterface
Содержание
ОбзорРешаемые задачиСтруктура данныхЧитаемая информацияКатегории ресурсовПараметрыАтрибутыСинтаксис выраженийЗависимостиРабочие области (Workspaces)ConnectorClassДинамическая формаОбзорРасширенные переменные контекстаПодходы к настройке динамической формыПрямая конфигурация APIСсылка на схему отображения OpenAPIПримерыЧто дальшеСсылкиОбзор
ResourceInterface — это ресурс на уровне кластера, который определяет стандартизированные абстракции для внешних ресурсов (таких как Git-репозитории, OCI-артефакты, Maven-артефакты) и способ их интеграции в конвейеры. Он служит мостом между коннекторами и оркестрацией конвейеров, обеспечивая бесшовную интеграцию ресурсов с минимальной ручной настройкой.
В следующем примере определяется интерфейс GitCodeRepository, описывающий доступ к Git-репозиторию:
ResourceInterface определяет следующие ключевые аспекты для интеграции ресурсов:
- Входные параметры, необходимые для настройки ресурса
- Выходные атрибуты, вычисляемые на основе параметров и информации о коннекторе
- Определения рабочих областей (workspaces) для томов и учетных данных
В этом документе представлены определение структуры данных ResourceInterface и примеры, которые помогут понять, как настраивать ResourceInterface.
Вам не обязательно понимать детали ResourceInterface, если вы не планируете его настраивать.
Решаемые задачи
При построении CI/CD конвейеров пользователи традиционно сталкиваются с несколькими проблемами:
Ручной ввод ресурсов: Пользователи не могут легко просматривать и добавлять внешние ресурсы, такие как Git-репозитории, OCI-репозитории и другие внешние сервисы. Им приходится вручную вводить URL и настраивать рабочие области, что подвержено ошибкам и занимает много времени.
Повторяющаяся настройка исполнения: Каждый раз при запуске конвейера пользователи должны вручную вводить детали версии, такие как Git revision и целевой тег OCI, а также повторно настраивать рабочие области.
Разделение атрибутов: Атрибуты одного и того же удаленного ресурса часто разбиты на разные параметры. Например, задача git-clone требует отдельные параметры url и revision, а также настройки рабочих областей для учетных данных и исходного кода.
Сложный выбор рабочих областей: Процесс выбора рабочих областей в конвейере отображает все доступные варианты, но предоставляет мало рекомендаций о том, какой тип коннектора подходит для каждой рабочей области.
ResourceInterface решает эти проблемы, предоставляя стандартизированный способ описания и интеграции внешних ресурсов в конвейерные рабочие процессы, позволяя пользователям просматривать и выбирать ресурсы через UI, автоматически генерируя правильную конфигурацию и учетные данные.
Структура данных
ResourceInterface — это ресурс Kubernetes на уровне кластера
- Kind: ResourceInterface
- API Version: connectors.alauda.io/v1alpha1
Читаемая информация
ResourceInterface — стандартный ресурс k8s, который можно аннотировать читаемой информацией с помощью annotations.
Также можно использовать аннотацию style.tekton.dev/descriptors для описания параметров динамической формы.
Подробнее см. в разделе dynamic-form.
Категории ресурсов
ResourceInterface организует ресурсы в категории, которые определяют общие контракты и поведение. Категории отмечаются с помощью метки resourceinterface.connectors.cpaas.io/category.
Несколько ResourceInterface могут принадлежать одной категории (например, gitcoderepository и githubcoderepository обе относятся к категории GitCodeRepository). Ресурсы в одной категории должны предоставлять одинаковые стандартные атрибуты и рабочие области для обеспечения совместимости.
Параметры
Параметры определяют входные данные, необходимые для настройки ресурса при интеграции в конвейер. Эти параметры влияют на вычисление выходных атрибутов.
Параметры задаются в spec.params и соответствуют типам параметров Tekton:
- name: имя параметра
- type: поддерживает
string,array,object(соответствует типам Tekton ParamSpec) - default: значение параметра по умолчанию (необязательно)
- description: описание параметра для отображения в UI (необязательно)
например:
Атрибуты
Атрибуты определяют выходные значения, вычисляемые на основе входных параметров и информации о коннекторе. Они могут использоваться задачами конвейера в качестве параметров и могут быть подняты до параметров уровня конвейера.
Атрибуты задаются в spec.attributes:
- name: имя атрибута
- type: тип значения — поддерживает
string,array - expression: JavaScript-выражение для вычисления значения атрибута
- parameterize: конфигурация параметризации
- name: имя параметра по умолчанию при параметризации
- disable: отключить параметризацию
- dependsOn: зависимости от параметров или коннектора
например:
Синтаксис выражений
Выражения используют синтаксис JavaScript и поддерживают:
- Конкатенацию строк:
params.organization + '/' + params.repository - Доступ к свойствам объектов:
connector.metadata.name - Операции с массивами:
params.tags.map(tag => connector.spec.address + ':' + tag) - Встроенные функции:
url(connector.spec.address).host: получить хост из адреса
и другие синтаксисы JavaScript.
Доступный контекст:
connector: текущая информация о коннекторе, структура коннектора описана в Concept of Connectorparams: текущие значения параметров
структура контекста:
Безопасность: Фронтенд выполняет JavaScript-код в песочнице, разрешая только безопасные, изолированные функции.
Примеры:
{connector.spec.address + '/' + params.repository}: получить адрес репозитория{url(connector.spec.address).host + '/' + params.repository + ':' + params.tag}: получить адрес артефакта{params.tags.map(tag => url(connector.spec.address).host + '/' + params.repository + ':' + tag)}: получить массив адресов артефактов, перебирая теги
Зависимости
Зависимости указывают, от каких параметров или информации о коннекторе зависит вычисление атрибута:
params.<param-name>: зависит от конкретного параметраconnector: зависит от выбора коннектора
Рабочие области (Workspaces)
Рабочие области определяют тома и учетные данные, предоставляемые интерфейсом ресурса. Они позволяют автоматически выделять необходимые ресурсы для задач конвейера.
Рабочие области задаются в spec.workspaces:
- name: имя рабочей области
- workspaceMapping.name: имя рабочей области по умолчанию при добавлении в рабочие области конвейера
- value: значение рабочей области по умолчанию (соответствует формату Tekton WorkspaceBinding), совместимо с типами Tekton WorkspaceBinding
например:
Значения рабочих областей поддерживают выражения для динамического обращения к параметрам и значениям коннектора с использованием того же синтаксиса, что и атрибуты.
ConnectorClass
ConnectorClass отмечает поддерживаемые ResourceInterface с помощью меток resourceinterface.connectors.cpaas.io/<resource-interface-name>: "true", например:
Это позволяет системе сопоставлять совместимые коннекторы с ResourceInterface и предоставлять соответствующие формы параметров на основе определений ResourceInterface.
Подробнее о ConnectorClass см. в Concept of ConnectorClass
Динамическая форма
Динамические формы предоставляют декларативный способ настройки интерактивных UI-компонентов для интеграции в конвейер. С помощью динамических форм пользователи могут просматривать и выбирать ресурсы, такие как Git-репозитории и ревизии, непосредственно через коннектор.
Обзор
Используйте аннотацию style.tekton.dev/descriptors для определения поведения динамической формы для параметров. Пример:
Синтаксис соответствует спецификации Pipeline Dynamic Forms. Рекомендуется ознакомиться с этой документацией перед использованием.
Помимо стандартных возможностей, динамические формы в ResourceInterface поддерживают:
- Расширенные переменные контекста для доступа к данным коннектора и ResourceInterface
- Ссылки на схемы отображения OpenAPI в ConnectorClass для централизованной настройки API и использования этих определений в динамических формах
Расширенные переменные контекста
В динамических формах ResourceInterface доступны следующие переменные контекста:
Подходы к настройке динамической формы
Существует два подхода к настройке динамических форм в ResourceInterface:
-
Прямая конфигурация API: вызов API коннектора напрямую с помощью выражений дескрипторов. Этот подход прост и понятен. Система Connectors предоставляет Connector API для получения списков репозиториев, git-референсов и др.
-
Ссылка на схему отображения OpenAPI в ConnectorClass: определение вызовов API и отображения в ConnectorClass с помощью
spec.api.openapi. Этот подход централизует определения API и конфигурацию отображения, избегая дублирования в нескольких ResourceInterface. При использовании динамической формы можно напрямую ссылаться на определение API в ConnectorClass.
Можно использовать любой из подходов отдельно или комбинировать их.
Прямая конфигурация API
Пример: Получение списка репозиториев GitLab
Коннекторы GitLab предоставляют нативный API GitLab, который можно использовать для заполнения селектора репозиториев:
Пример: Получение списка Git-референсов
Git-коннектор предоставляет endpoint gitrefs для получения списка веток и тегов:
Ссылка на схему отображения OpenAPI
Для централизованного определения API и конфигурации отображения их задают в ConnectorClass с помощью spec.api.openapi. Динамические формы могут ссылаться на эти определения напрямую, что устраняет дублирование конфигураций в ResourceInterface.
Требования
- Определить спецификацию OpenAPI в ConnectorClass. Подробнее в ConnectorClass OpenAPI Description.
- Добавить расширение
x-display-schemaдля описания интеграции API с динамическими формами.
Структура схемы отображения
Расширение x-display-schema содержит:
parameters[]: определяет, как заполнять параметры API во время выполнения.name: имя параметра (должно совпадать с именем параметра API)value: выражение для значения параметра. Синтаксис соответствует Pipeline Dynamic Forms.
descriptors: определяет, как данные ответа API отображаются в опции формы. Синтаксис соответствует Pipeline Dynamic Forms.
Пример: API Git References
Следующая конфигурация ConnectorClass определяет API GET /git/gitrefs с схемой отображения:
- Параметр
repositoryUrlзадается как${context.connector.spec.address + "/" + context.params.repository + ".git"}и передается как query-параметр - Параметр
searchзадается как${current.search}для фильтрации результатов - Массив
itemsответа сопоставляется с опциями выбора, используяnameдля метки и значения
пример:
Ссылка на OpenAPI в ResourceInterface
После определения API в ConnectorClass, ссылаться на него в ResourceInterface можно следующим образом:
urn:alm:descriptor:widgets:selectдля указания типа виджетаschema:openapi:context.connectorClass.spec.api.openapi:<operationId>для ссылки на определение API в ConnectorClass
например:
С такой конфигурацией поле revision в Pipeline Integration отображается как выпадающий список, который получает опции из API listGitRefs.
Примеры
ResourceInterface GitCodeRepository
ResourceInterface OCIArtifact
Что дальше
- Изучите Pipeline Integration, если хотите интегрировать Connector в свой кастомный Pipeline или Task.