apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: # имя, должно соответствовать спецификации ниже, и быть в формате . name: apicomponents.unified-platform.cs.hse.ru spec: # имя группы, используемое в REST API: /apis// group: unified-platform.cs.hse.ru # Список версий, поддерживаемых этим определением CustomResourceDefinition versions: - name: v1 # Каждая версия может быть влкючена или выключена при помощи served флага. served: true # Только одна версия может быть отмечена как storage версия. storage: true schema: openAPIV3Schema: type: object description: APIComponent является определением ресурса APIComponent. APIComponent - компонент, предоставляющий интерфейс для внешнего доступа к приложению. properties: spec: type: object description: APIComponent определяет желаемое состояние API компонента. Содержит спецификацию внешних интерфейсов. properties: published: type: boolean default: true description: Published определяет, открыт или закрыт доступ к интерфейсу APIComponent. mlComponent: type: object description: MLComponent определяет параметры интерфейса к сервису MLComponent. properties: name: type: string description: Имя ресурса MLComponent. required: ["name"] experimentPipeline: type: object description: ExperimentPipeline определяет параметры интерфейса к сервису пайплайна. properties: name: type: string description: Имя ресурса ExperimentPipeline. required: ["name"] files: type: object description: Files определяет параметры интерфейса к сервису Files. properties: enabled: type: boolean default: false description: Enabled определяет, открыт или закрыт доступ к интерфейсу Files. required: ["enabled"] pipelines: type: object description: Pipelines определяет параметры интерфейса к сервису Pipelines. properties: enabled: type: boolean default: false description: Enabled определяет, открыт или закрыт доступ к интерфейсу Pipelines. required: ["enabled"] restfulApi: type: object description: RESTfulAPI определяет параметры REST API к предоставляемым сервисам. properties: path: type: string description: Путь, определяющий часть адреса предоставляемого интерфейса. auth: type: object description: Auth определяет параметры аутентификции. properties: basic: type: object description: Basic определяет параметры базовой аутентификации. properties: enabled: type: boolean description: Определяет, включена ли базовая аутентификация. Считается, что если атрибут не задан, то базовая аутентификация включена. credentials: type: string description: Имя секрета с реквизитами базовой аутентификации в формате файла htpasswd. oidc: type: object description: OIDC определяет параметры OIDC аутентификации. properties: enabled: type: boolean description: Определяет, включена ли OIDC аутентификация. Считается, что если атрибут не задан, то OIDC аутентификация включена. groups: type: array description: Определяет разрешенные группы. items: maxItems: 32 type: string maxLength: 255 roles: type: array description: Определяет разрешенные роли. items: maxItems: 32 type: string maxLength: 255 identityPassThrough: type: boolean default: true description: Определяет, передавать ли идентичность аутентифицированного пользователя в нижестоящий сервис. required: ["identityPassThrough"] anyOf: - properties: basic: {} required: ["basic"] - properties: oidc: {} required: ["oidc"] cors: type: object properties: enabled: type: boolean description: Определяет, применяются ли настройки, заданные в спецификации ресурса. allowMethods: type: array description: Определяет настройку CORS Allow Methods. items: maxItems: 32 type: string maxLength: 255 allowHeaders: type: array description: Определяет настройку CORS Allow Headers. items: maxItems: 32 type: string maxLength: 255 exposeHeaders: type: array description: Определяет настройку CORS Expose Headers. items: maxItems: 32 type: string maxLength: 255 allowOrigin: type: array description: Определяет настройку CORS Allow Origin. items: maxItems: 32 type: string maxLength: 255 maxAge: type: integer required: ["auth"] apiSpec: type: object description: Спецификация API для компонента, к которому APIComponent предоставляет интерфейс. properties: inputs: type: array description: Список входных переменных. items: maxItems: 32 type: object description: Определение входной переменной. properties: name: type: string description: Имя входной переменной. description: type: string maxLength: 1000 description: Описание входной переменной. type: type: object description: Определение типа входной переменной. Тип определяется только для входных переменных, значения которых передаются через API. properties: datatypes: type: array description: Список допустимых типов значений входной переменной. Тип значения используется при передаче значений входных переменных через API. Включает файловые типы 'FILE', 'WEBSITE' и объектные типы, такие как 'FP32', 'str', 'dict'. В качестве значения файлового типа могут быть переданы локации файла или файловой группы. Если передано значение объектного типа, то оно может быть сохранено в файл, (поведение зависит от типа компонента, который реализует интерфейс). Тип содержимого файла (contentType) предопределен для типа 'WEBSITE' и всех объектных типов значения входной переменной. Тип значения 'FILE' является допустимым, даже если он не задан в спецификации API. Если атрибут datatypes не определен в спецификации API, то допустимыми являются все типы datatypes. items: type: string maxItems: 16 contentTypes: type: array description: Список допустимых типов содержимого файла (или файлов), в котором содержится значение входной переменной. Типами содержимого могут быть любые MIME типы. Тип содержимого используется при передаче значений входных переменных через API. Если при запуске передано значение объектного типа, то оно может быть сохранено в файл, (поведение зависит от типа компонента, который реализует интерфейс). Тип содержимого файла (contentType) предопределен для типа 'WEBSITE' и всех объектных типов значения входной переменной, поэтому может не передаваться при вызове. Если при вызове передано значение файлового типа (datatype == 'FILE'), то тип содержимого файла может или должен быть передан, (поведение зависит от типа компонента, который реализует интерфейс). Если атрибут contentTypes не определен в спецификации API, то допустимыми являются любые типы содержимого. items: type: string maxItems: 32 required: type: boolean default: true description: Является ли входная переменная обязательной. required: [ "name" ] outputs: type: array description: Список выходных переменных. items: maxItems: 32 type: object description: Определение выходной переменной. properties: name: type: string description: Имя выходной переменной. description: type: string maxLength: 1000 description: Описание выходной переменной. type: type: object description: Определение типа выходной переменной. properties: datatypes: type: array description: Список допустимых типов значений выходной переменной. Тип значения используется для указания через API ожидаемого типа значений выходной переменной. Включает файловые типы 'FILE', 'WEBSITE'. Тип значения 'FILE' является допустимым, даже если он не задан в спецификации API. Если атрибут datatypes не определен в спецификации API, то допустимыми являются все выходные типы datatypes. items: type: string maxItems: 16 contentTypes: type: array description: Список допустимых типов содержимого файлов, в которых содержится значение выходной переменной. Типами содержимого могут быть любые MIME типы. Тип содержимого используется для указания через API ожидаемого типа содержимого выходной переменной. Если атрибут contentTypes не определен в спецификации API, то допустимыми являются любые типы содержимого. items: type: string maxItems: 32 required: ["name"] allOf: - oneOf: - properties: mlComponent: {} required: ["mlComponent"] - properties: files: {} required: ["files"] - properties: pipelines: {} required: ["pipelines"] - properties: experimentPipeline: {} required: ["experimentPipeline"] - oneOf: - properties: restfulApi: {} required: ["restfulApi"] required: ["published"] status: x-kubernetes-preserve-unknown-fields: true type: object subresources: status: {} # Namespaced or Cluster scope: Namespaced names: # имя во множественном числе, используемое в URL: /apis/// plural: apicomponents # имя в единственном числе, используемое в CLI и для отображения singular: apicomponent # вид, обычно CamelCased в единственном числе, указывается в манифестах ресурсов kind: APIComponent # короткие имена для использования в операциях с ресурсами в CLI shortNames: - apicmp - apicmps categories: - all