openapi: 3.2.0 info: title: Harbor Preheat API description: These APIs provide services for manipulating Harbor project. version: '2.0' servers: - url: http://localhost/api/v2.0 - url: https://localhost/api/v2.0 security: - basic: [] - {} tags: - name: preheat paths: /p2p/preheat/providers: get: summary: List P2P providers tags: - preheat operationId: ListProviders parameters: - $ref: '#/components/parameters/requestId' responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/Metadata' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' /p2p/preheat/instances/ping: post: summary: Ping status of a instance description: This endpoint checks status of a instance, the instance can be given by ID or Endpoint URL (together with credential) operationId: PingInstances parameters: - $ref: '#/components/parameters/requestId' tags: - preheat responses: '200': $ref: '#/components/responses/200' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': description: Instance not found (when instance is provided by ID). '500': $ref: '#/components/responses/500' requestBody: content: application/json: schema: $ref: '#/components/schemas/Instance' description: The JSON object of instance. required: true /p2p/preheat/instances: get: summary: List P2P provider instances tags: - preheat operationId: ListInstances parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/query' - $ref: '#/components/parameters/sort' responses: '200': description: Success headers: X-Total-Count: description: The total count of preheating provider instances schema: type: integer Link: description: Link refers to the previous page and next page schema: type: string content: application/json: schema: type: array items: $ref: '#/components/schemas/Instance' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' post: summary: Create p2p provider instances tags: - preheat operationId: CreateInstance parameters: - $ref: '#/components/parameters/requestId' responses: '201': $ref: '#/components/responses/201' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '409': $ref: '#/components/responses/409' '500': $ref: '#/components/responses/500' requestBody: content: application/json: schema: $ref: '#/components/schemas/Instance' description: The JSON object of instance. required: true /p2p/preheat/instances/{preheat_instance_name}: get: summary: Get a P2P provider instance tags: - preheat operationId: GetInstance parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/instanceName' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Instance' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' delete: summary: Delete the specified P2P provider instance tags: - preheat operationId: DeleteInstance parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/instanceName' responses: '200': $ref: '#/components/responses/200' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' put: summary: Update the specified P2P provider instance description: 'Update the specified P2P provider instance. If `auth_info` is omitted or empty in the request body and the effective `auth_mode` is not `NONE` (either sent in the request or left unchanged from the stored registration), the previously stored auth credentials are kept. Send a non-empty `auth_info` object to set or replace credentials. Set `auth_mode` to `NONE` to disable authentication without retaining the old credentials.' tags: - preheat operationId: UpdateInstance parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/instanceName' responses: '200': $ref: '#/components/responses/200' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' requestBody: content: application/json: schema: $ref: '#/components/schemas/Instance' description: The instance to update required: true /projects/{project_name}/preheat/policies: post: summary: Create a preheat policy under a project tags: - preheat operationId: CreatePolicy parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' responses: '201': $ref: '#/components/responses/201' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '409': $ref: '#/components/responses/409' '500': $ref: '#/components/responses/500' requestBody: content: application/json: schema: $ref: '#/components/schemas/PreheatPolicy' description: The policy schema info required: true get: summary: List preheat policies tags: - preheat operationId: ListPolicies parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/query' - $ref: '#/components/parameters/sort' responses: '200': description: List preheat policies success headers: X-Total-Count: description: The total count of policies schema: type: integer Link: description: Link refers to the previous page and next page schema: type: string content: application/json: schema: type: array items: $ref: '#/components/schemas/PreheatPolicy' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' /projects/{project_name}/preheat/policies/{preheat_policy_name}: get: summary: Get a preheat policy tags: - preheat operationId: GetPolicy parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' responses: '200': description: Get a preheat policy success content: application/json: schema: $ref: '#/components/schemas/PreheatPolicy' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' put: summary: Update preheat policy tags: - preheat operationId: UpdatePolicy parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' responses: '200': $ref: '#/components/responses/200' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '409': $ref: '#/components/responses/409' '500': $ref: '#/components/responses/500' requestBody: content: application/json: schema: $ref: '#/components/schemas/PreheatPolicy' description: The policy schema info required: true post: summary: Manual preheat tags: - preheat operationId: ManualPreheat parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' responses: '201': $ref: '#/components/responses/201' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' requestBody: content: application/json: schema: $ref: '#/components/schemas/PreheatPolicy' description: The policy schema info required: true delete: summary: Delete a preheat policy tags: - preheat operationId: DeletePolicy parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' responses: '200': $ref: '#/components/responses/200' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions: get: summary: List executions for the given policy tags: - preheat operationId: ListExecutions parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/query' - $ref: '#/components/parameters/sort' responses: '200': description: List executions success headers: X-Total-Count: description: The total count of executions schema: type: integer Link: description: Link refers to the previous page and next page schema: type: string content: application/json: schema: type: array items: $ref: '#/components/schemas/Execution' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions/{execution_id}: get: summary: Get a execution detail by id tags: - preheat operationId: GetExecution parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' - $ref: '#/components/parameters/executionId' responses: '200': description: Get execution success content: application/json: schema: $ref: '#/components/schemas/Execution' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' patch: summary: Stop a execution tags: - preheat operationId: StopExecution parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' - $ref: '#/components/parameters/executionId' responses: '200': $ref: '#/components/responses/200' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' requestBody: content: application/json: schema: $ref: '#/components/schemas/Execution' description: The data of execution required: true /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions/{execution_id}/tasks: get: summary: List all the related tasks for the given execution tags: - preheat operationId: ListTasks parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' - $ref: '#/components/parameters/executionId' - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/query' - $ref: '#/components/parameters/sort' responses: '200': description: List tasks success headers: X-Total-Count: description: The total count of tasks schema: type: integer Link: description: Link refers to the previous page and next page schema: type: string content: application/json: schema: type: array items: $ref: '#/components/schemas/Task' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' /projects/{project_name}/preheat/policies/{preheat_policy_name}/executions/{execution_id}/tasks/{task_id}/logs: get: summary: Get the log text stream of the specified task for the given execution tags: - preheat operationId: GetPreheatLog parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' - $ref: '#/components/parameters/preheatPolicyName' - $ref: '#/components/parameters/executionId' - $ref: '#/components/parameters/taskId' responses: '200': description: Get log success headers: Content-Type: description: Content type of response schema: type: string content: text/plain: schema: type: string '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '404': $ref: '#/components/responses/404' '403': $ref: '#/components/responses/403' '500': $ref: '#/components/responses/500' /projects/{project_name}/preheat/providers: get: summary: Get all providers at project level tags: - preheat operationId: ListProvidersUnderProject parameters: - $ref: '#/components/parameters/requestId' - $ref: '#/components/parameters/projectName' responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/ProviderUnderProject' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '500': $ref: '#/components/responses/500' components: responses: '500': description: Internal server error. Inspect the `errors` array in the response body for details. headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string content: application/json: schema: $ref: '#/components/schemas/Errors' '201': description: Created headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string Location: description: The location of the resource schema: type: string '403': description: Forbidden. The caller does not have sufficient permission to perform the requested operation. headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string content: application/json: schema: $ref: '#/components/schemas/Errors' '200': description: Success headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string '409': description: Conflict. The resource already exists or the current state prevents the operation. headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string content: application/json: schema: $ref: '#/components/schemas/Errors' '401': description: Unauthorized. Authentication is required to access this resource. headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string content: application/json: schema: $ref: '#/components/schemas/Errors' '404': description: Not found. The requested resource does not exist. headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string content: application/json: schema: $ref: '#/components/schemas/Errors' '400': description: Bad request. The request body or query parameters are invalid. Inspect the `errors` array in the response body for details. headers: X-Request-Id: description: The ID of the corresponding request for the response schema: type: string content: application/json: schema: $ref: '#/components/schemas/Errors' parameters: instanceName: name: preheat_instance_name in: path description: Instance Name required: true schema: type: string sort: name: sort description: Sort the resource list in ascending or descending order. e.g. sort by field1 in ascending order and field2 in descending order with "sort=field1,-field2" in: query required: false schema: type: string executionId: name: execution_id in: path description: Execution ID required: true schema: type: integer requestId: name: X-Request-Id description: An unique ID for the request in: header required: false schema: type: string minLength: 1 preheatPolicyName: name: preheat_policy_name in: path description: Preheat Policy Name required: true schema: type: string taskId: name: task_id in: path description: Task ID required: true schema: type: integer pageSize: name: page_size in: query required: false description: The size of per page schema: type: integer format: int64 default: 10 maximum: 100 projectName: name: project_name in: path description: The name of the project required: true schema: type: string page: name: page in: query required: false description: The page number schema: type: integer format: int64 default: 1 query: name: q description: Query string to query resources. Supported query patterns are "exact match(k=v)", "fuzzy match(k=~v)", "range(k=[min~max])", "list with union releationship(k={v1 v2 v3})" and "list with intersetion relationship(k=(v1 v2 v3))". The value of range and list can be string(enclosed by " or '), integer or time(in format "2020-04-09 02:36:00"). All of these query patterns should be put in the query string "q=xxx" and splitted by ",". e.g. q=k1=v1,k2=~v2,k3=[min~max] in: query required: false schema: type: string schemas: Error: description: a model for all the error response coming from harbor type: object properties: code: type: string description: The error code message: type: string description: The error message example: code: NOT_FOUND message: artifact library/hello-world:latest not found Task: type: object properties: id: type: integer description: The ID of task execution_id: type: integer description: The ID of task execution status: type: string description: The status of task status_message: type: string description: The status message of task run_count: type: integer format: int32 description: The count of task run extra_attrs: $ref: '#/components/schemas/ExtraAttrs' creation_time: type: string description: The creation time of task update_time: type: string description: The update time of task start_time: type: string description: The start time of task end_time: type: string description: The end time of task Metadata: type: object properties: id: type: string description: id name: type: string description: name icon: type: string description: icon maintainers: type: array description: maintainers items: type: string version: type: string description: version source: type: string description: source ProviderUnderProject: type: object properties: id: type: integer provider: type: string enabled: type: boolean default: type: boolean Execution: type: object properties: id: type: integer description: The ID of execution vendor_type: type: string description: The vendor type of execution vendor_id: type: integer description: The vendor id of execution status: type: string description: The status of execution status_message: type: string description: The status message of execution metrics: $ref: '#/components/schemas/Metrics' trigger: type: string description: The trigger of execution extra_attrs: $ref: '#/components/schemas/ExtraAttrs' start_time: type: string description: The start time of execution end_time: type: string description: The end time of execution ExtraAttrs: type: object additionalProperties: type: object Errors: description: The error array that describe the errors got during the handling of request type: object properties: errors: type: array items: $ref: '#/components/schemas/Error' Instance: type: object properties: id: type: integer description: Unique ID name: type: string description: Instance name description: type: string description: Description of instance vendor: type: string description: Based on which driver, identified by ID endpoint: type: string description: The service endpoint of this instance auth_mode: type: string description: The authentication way supported auth_info: type: object description: 'The auth credential data if it exists. When updating an instance (PUT `/p2p/preheat/instances/{preheat_instance_name}`), if this object is omitted or empty and `auth_mode` is not `NONE`, the previously stored credentials are kept. ' additionalProperties: type: string status: type: string description: The health status enabled: type: boolean description: Whether the instance is activated or not x-omitempty: false default: type: boolean description: Whether the instance is default or not x-omitempty: false insecure: type: boolean description: Whether the instance endpoint is insecure or not x-omitempty: false setup_timestamp: type: integer format: int64 description: The timestamp of instance setting up Metrics: type: object properties: task_count: type: integer description: The count of task success_task_count: type: integer description: The count of success task error_task_count: type: integer description: The count of error task pending_task_count: type: integer description: The count of pending task running_task_count: type: integer description: The count of running task scheduled_task_count: type: integer description: The count of scheduled task stopped_task_count: type: integer description: The count of stopped task PreheatPolicy: type: object properties: id: type: integer description: The ID of preheat policy name: type: string description: The Name of preheat policy description: type: string description: The Description of preheat policy project_id: type: integer description: The ID of preheat policy project provider_id: type: integer description: The ID of preheat policy provider provider_name: type: string description: The Name of preheat policy provider filters: type: string description: The Filters of preheat policy trigger: type: string description: The Trigger of preheat policy enabled: type: boolean description: Whether the preheat policy enabled x-omitempty: false extra_attrs: type: string description: The extra attributes of preheat policy creation_time: type: string format: date-time description: The Create Time of preheat policy update_time: type: string format: date-time description: The Update Time of preheat policy securitySchemes: basic: type: http scheme: basic