diff --git a/pkg/kapis/devops/v1alpha2/devops.go b/pkg/kapis/devops/v1alpha2/devops.go index d7aea16c59363f53ae0b6d2dbbd5ababe7b039ca..c9a8d50069960a8c1b942195ef959628f4c4c39f 100644 --- a/pkg/kapis/devops/v1alpha2/devops.go +++ b/pkg/kapis/devops/v1alpha2/devops.go @@ -20,6 +20,7 @@ package v1alpha2 import ( "github.com/emicklei/go-restful" log "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/api" "kubesphere.io/kubesphere/pkg/models/devops" "net/http" "strings" @@ -622,6 +623,20 @@ func (h *ProjectPipelineHandler) ToJson(req *restful.Request, resp *restful.Resp resp.WriteAsJson(res) } +func (h *ProjectPipelineHandler) GetProjectCredentialUsage(req *restful.Request, resp *restful.Response) { + projectId := req.PathParameter("devops") + credentialId := req.PathParameter("credential") + response, err := h.projectCredentialGetter.GetProjectCredentialUsage(projectId, credentialId) + if err != nil { + log.Errorf("%+v", err) + api.HandleInternalError(resp, nil, err) + return + } + resp.WriteAsJson(response) + return + +} + func parseErr(err error, resp *restful.Response) { log.Error(err) if jErr, ok := err.(*devops.JkError); ok { diff --git a/pkg/kapis/devops/v1alpha2/handler.go b/pkg/kapis/devops/v1alpha2/handler.go index 1f75177d33ed096bfc2afe78601532a78bfad1fb..d9fbe2c2dafc509657793035fec50e440c99ce95 100644 --- a/pkg/kapis/devops/v1alpha2/handler.go +++ b/pkg/kapis/devops/v1alpha2/handler.go @@ -11,9 +11,10 @@ import ( ) type ProjectPipelineHandler struct { - projectMemberOperator devops.ProjectMemberOperator - devopsOperator devops.DevopsOperator - projectOperator devops.ProjectOperator + projectMemberOperator devops.ProjectMemberOperator + devopsOperator devops.DevopsOperator + projectOperator devops.ProjectOperator + projectCredentialGetter devops.ProjectCredentialGetter } type PipelineSonarHandler struct { @@ -23,9 +24,10 @@ type PipelineSonarHandler struct { func NewProjectPipelineHandler(devopsClient devopsClient.Interface, dbClient *mysql.Database) ProjectPipelineHandler { return ProjectPipelineHandler{ - projectMemberOperator: devops.NewProjectMemberOperator(devopsClient, dbClient), - devopsOperator: devops.NewDevopsOperator(devopsClient), - projectOperator: devops.NewProjectOperator(dbClient), + projectMemberOperator: devops.NewProjectMemberOperator(devopsClient, dbClient), + devopsOperator: devops.NewDevopsOperator(devopsClient), + projectOperator: devops.NewProjectOperator(dbClient), + projectCredentialGetter: devops.NewProjectCredentialOperator(devopsClient), } } diff --git a/pkg/kapis/devops/v1alpha2/register.go b/pkg/kapis/devops/v1alpha2/register.go index d3f07bf30f5f53726fba22c573d8ca42d94cec06..0a889c36a689e0b5d5c58084eb4052d67366b672 100644 --- a/pkg/kapis/devops/v1alpha2/register.go +++ b/pkg/kapis/devops/v1alpha2/register.go @@ -80,6 +80,7 @@ func AddToContainer(c *restful.Container, devopsClient devops.Interface, if projectPipleineEnable { projectPipelineHander := NewProjectPipelineHandler(devopsClient, dbClient) + webservice.Route(webservice.GET("/devops/{devops}"). To(projectPipelineHander.GetDevOpsProjectHandler). Doc("Get the specified DevOps Project"). @@ -156,6 +157,14 @@ func AddToContainer(c *restful.Container, devopsClient devops.Interface, Param(webservice.PathParameter("member", "member's username, e.g. admin")). Writes(devops.ProjectMembership{})) + webservice.Route(webservice.GET("/devops/{devops}/credentials/{credential}/usage"). + To(projectPipelineHander.GetProjectCredentialUsage). + Doc("Get the specified credential usage of the DevOps project"). + Metadata(restfulspec.KeyOpenAPITags, []string{constants.DevOpsProjectCredentialTag}). + Param(webservice.PathParameter("devops", "DevOps project's ID, e.g. project-RRRRAzLBlLEm")). + Param(webservice.PathParameter("credential", "credential's ID, e.g. dockerhub-id")). + Returns(http.StatusOK, RespOK, devops.Credential{})) + // match Jenkisn api "/blue/rest/organizations/jenkins/pipelines/{devops}/{pipeline}" webservice.Route(webservice.GET("/devops/{devops}/pipelines/{pipeline}"). To(projectPipelineHander.GetPipeline). diff --git a/pkg/models/devops/project_credential_handler.go b/pkg/models/devops/project_credential_handler.go new file mode 100644 index 0000000000000000000000000000000000000000..d2cae36d580630353c3de6fa9a745a64fd67775c --- /dev/null +++ b/pkg/models/devops/project_credential_handler.go @@ -0,0 +1,29 @@ +package devops + +import ( + "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/simple/client/devops" +) + +type ProjectCredentialGetter interface { + GetProjectCredentialUsage(projectId, credentialId string) (*devops.Credential, error) +} + +type projectCredentialGetter struct { + devopsClient devops.Interface +} + +// GetProjectCredentialUsage get the usage of Credential +func (o *projectCredentialGetter) GetProjectCredentialUsage(projectId, credentialId string) (*devops.Credential, error) { + credential, err := o.devopsClient.GetCredentialInProject(projectId, + credentialId) + if err != nil { + klog.Errorf("%+v", err) + return nil, err + } + return credential, nil +} + +func NewProjectCredentialOperator(devopsClient devops.Interface) ProjectCredentialGetter { + return &projectCredentialGetter{devopsClient: devopsClient} +} diff --git a/pkg/simple/client/devops/credential.go b/pkg/simple/client/devops/credential.go index c5336b00f32de1a66ff1ca2b00616aee7d2a561c..feb0f877abcfdc9969e2920621ebc43cd14a09a4 100644 --- a/pkg/simple/client/devops/credential.go +++ b/pkg/simple/client/devops/credential.go @@ -51,7 +51,5 @@ type CredentialOperator interface { GetCredentialInProject(projectId, id string) (*Credential, error) - GetCredentialsInProject(projectId string) ([]*Credential, error) - DeleteCredentialInProject(projectId, id string) (string, error) }