mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-22 18:25:56 +01:00
Add preheat APIs, handlers.
1. Manual preheat. 2. Instance health check. Signed-off-by: fanjiankong <fanjiankong@tencent.com>
This commit is contained in:
parent
9483559d18
commit
080afbfe1b
@ -667,6 +667,33 @@ paths:
|
|||||||
$ref: '#/responses/404'
|
$ref: '#/responses/404'
|
||||||
'500':
|
'500':
|
||||||
$ref: '#/responses/500'
|
$ref: '#/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: '#/parameters/requestId'
|
||||||
|
- name: instance
|
||||||
|
in: body
|
||||||
|
description: The JSON object of instance.
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Instance'
|
||||||
|
tags:
|
||||||
|
- preheat
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
$ref: '#/responses/200'
|
||||||
|
'400':
|
||||||
|
$ref: '#/responses/400'
|
||||||
|
'401':
|
||||||
|
$ref: '#/responses/401'
|
||||||
|
'404':
|
||||||
|
description: Instance not found (when instance is provided by ID).
|
||||||
|
'500':
|
||||||
|
$ref: '#/responses/500'
|
||||||
/p2p/preheat/instances:
|
/p2p/preheat/instances:
|
||||||
get:
|
get:
|
||||||
summary: List P2P provider instances
|
summary: List P2P provider instances
|
||||||
@ -934,6 +961,35 @@ paths:
|
|||||||
$ref: '#/responses/409'
|
$ref: '#/responses/409'
|
||||||
'500':
|
'500':
|
||||||
$ref: '#/responses/500'
|
$ref: '#/responses/500'
|
||||||
|
post:
|
||||||
|
summary: Manual preheat
|
||||||
|
description: Manual preheat
|
||||||
|
tags:
|
||||||
|
- preheat
|
||||||
|
operationId: ManualPreheat
|
||||||
|
parameters:
|
||||||
|
- $ref: '#/parameters/requestId'
|
||||||
|
- $ref: '#/parameters/projectName'
|
||||||
|
- $ref: '#/parameters/preheatPolicyName'
|
||||||
|
- name: policy
|
||||||
|
in: body
|
||||||
|
description: The policy schema info
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/PreheatPolicy'
|
||||||
|
responses:
|
||||||
|
'201':
|
||||||
|
$ref: '#/responses/201'
|
||||||
|
'400':
|
||||||
|
$ref: '#/responses/400'
|
||||||
|
'401':
|
||||||
|
$ref: '#/responses/401'
|
||||||
|
'404':
|
||||||
|
$ref: '#/responses/404'
|
||||||
|
'403':
|
||||||
|
$ref: '#/responses/403'
|
||||||
|
'500':
|
||||||
|
$ref: '#/responses/500'
|
||||||
delete:
|
delete:
|
||||||
summary: Delete a preheat policy
|
summary: Delete a preheat policy
|
||||||
description: Delete a preheat policy
|
description: Delete a preheat policy
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/go-openapi/strfmt"
|
"github.com/go-openapi/strfmt"
|
||||||
preheatCtl "github.com/goharbor/harbor/src/controller/p2p/preheat"
|
preheatCtl "github.com/goharbor/harbor/src/controller/p2p/preheat"
|
||||||
projectCtl "github.com/goharbor/harbor/src/controller/project"
|
projectCtl "github.com/goharbor/harbor/src/controller/project"
|
||||||
|
liberrors "github.com/goharbor/harbor/src/lib/errors"
|
||||||
"github.com/goharbor/harbor/src/pkg/p2p/preheat/models/policy"
|
"github.com/goharbor/harbor/src/pkg/p2p/preheat/models/policy"
|
||||||
instanceModel "github.com/goharbor/harbor/src/pkg/p2p/preheat/models/provider"
|
instanceModel "github.com/goharbor/harbor/src/pkg/p2p/preheat/models/provider"
|
||||||
"github.com/goharbor/harbor/src/pkg/p2p/preheat/provider"
|
"github.com/goharbor/harbor/src/pkg/p2p/preheat/provider"
|
||||||
@ -22,6 +23,7 @@ func newPreheatAPI() *preheatAPI {
|
|||||||
return &preheatAPI{
|
return &preheatAPI{
|
||||||
preheatCtl: preheatCtl.Ctl,
|
preheatCtl: preheatCtl.Ctl,
|
||||||
projectCtl: projectCtl.Ctl,
|
projectCtl: projectCtl.Ctl,
|
||||||
|
enforcer: preheatCtl.Enf,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,6 +33,7 @@ type preheatAPI struct {
|
|||||||
BaseAPI
|
BaseAPI
|
||||||
preheatCtl preheatCtl.Controller
|
preheatCtl preheatCtl.Controller
|
||||||
projectCtl projectCtl.Controller
|
projectCtl projectCtl.Controller
|
||||||
|
enforcer preheatCtl.Enforcer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *preheatAPI) Prepare(ctx context.Context, operation string, params interface{}) middleware.Responder {
|
func (api *preheatAPI) Prepare(ctx context.Context, operation string, params interface{}) middleware.Responder {
|
||||||
@ -248,6 +251,62 @@ func (api *preheatAPI) ListPolicies(ctx context.Context, params operation.ListPo
|
|||||||
WithLink(api.Links(ctx, params.HTTPRequest.URL, total, query.PageNumber, query.PageSize).String())
|
WithLink(api.Links(ctx, params.HTTPRequest.URL, total, query.PageNumber, query.PageSize).String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ManualPreheat is manual preheat
|
||||||
|
func (api *preheatAPI) ManualPreheat(ctx context.Context, params operation.ManualPreheatParams) middleware.Responder {
|
||||||
|
project, err := api.projectCtl.GetByName(ctx, params.ProjectName)
|
||||||
|
if err != nil {
|
||||||
|
return api.SendError(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
policy, err := api.preheatCtl.GetPolicyByName(ctx, project.ProjectID, params.PreheatPolicyName)
|
||||||
|
if err != nil {
|
||||||
|
return api.SendError(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = api.enforcer.EnforcePolicy(ctx, policy.ID)
|
||||||
|
if err != nil {
|
||||||
|
return api.SendError(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: build execution URL
|
||||||
|
var location = ""
|
||||||
|
|
||||||
|
return operation.NewManualPreheatCreated().WithLocation(location)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (api *preheatAPI) PingInstances(ctx context.Context, params operation.PingInstancesParams) middleware.Responder {
|
||||||
|
var instance *instanceModel.Instance
|
||||||
|
var err error
|
||||||
|
|
||||||
|
if params.Instance.ID > 0 {
|
||||||
|
// by ID
|
||||||
|
instance, err = api.preheatCtl.GetInstance(ctx, params.Instance.ID)
|
||||||
|
if liberrors.IsNotFoundErr(err) {
|
||||||
|
return operation.NewPingInstancesNotFound()
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
api.SendError(ctx, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// by endpoint URL
|
||||||
|
if params.Instance.Endpoint == "" {
|
||||||
|
return operation.NewPingInstancesBadRequest()
|
||||||
|
}
|
||||||
|
|
||||||
|
instance, err = convertParamInstanceToModelInstance(params.Instance)
|
||||||
|
if err != nil {
|
||||||
|
api.SendError(ctx, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = api.preheatCtl.CheckHealth(ctx, instance)
|
||||||
|
if err != nil {
|
||||||
|
api.SendError(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return operation.NewPingInstancesOK()
|
||||||
|
}
|
||||||
|
|
||||||
// convertPolicyToPayload converts model policy to swagger model
|
// convertPolicyToPayload converts model policy to swagger model
|
||||||
func convertPolicyToPayload(policy *policy.Schema) (*models.PreheatPolicy, error) {
|
func convertPolicyToPayload(policy *policy.Schema) (*models.PreheatPolicy, error) {
|
||||||
if policy == nil {
|
if policy == nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user