diff --git a/cmd/ks-apiserver/app/options/options.go b/cmd/ks-apiserver/app/options/options.go index 896f2aa9e..3c2d0043c 100644 --- a/cmd/ks-apiserver/app/options/options.go +++ b/cmd/ks-apiserver/app/options/options.go @@ -4,7 +4,7 @@ import ( "flag" cliflag "k8s.io/component-base/cli/flag" "k8s.io/klog" - genericoptions "kubesphere.io/kubesphere/pkg/options" + genericoptions "kubesphere.io/kubesphere/pkg/server/options" "kubesphere.io/kubesphere/pkg/simple/client/devops" "kubesphere.io/kubesphere/pkg/simple/client/k8s" "kubesphere.io/kubesphere/pkg/simple/client/ldap" diff --git a/cmd/ks-apiserver/app/server.go b/cmd/ks-apiserver/app/server.go index 09ec7d491..316445135 100644 --- a/cmd/ks-apiserver/app/server.go +++ b/cmd/ks-apiserver/app/server.go @@ -28,11 +28,11 @@ import ( "kubesphere.io/kubesphere/cmd/ks-apiserver/app/options" "kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/apiserver/servicemesh/tracing" - "kubesphere.io/kubesphere/pkg/filter" "kubesphere.io/kubesphere/pkg/informers" logging "kubesphere.io/kubesphere/pkg/models/log" "kubesphere.io/kubesphere/pkg/server" apiserverconfig "kubesphere.io/kubesphere/pkg/server/config" + "kubesphere.io/kubesphere/pkg/server/filter" "kubesphere.io/kubesphere/pkg/simple/client" "kubesphere.io/kubesphere/pkg/utils/signals" "kubesphere.io/kubesphere/pkg/utils/term" @@ -187,7 +187,8 @@ func CreateClientSet(conf *apiserverconfig.Config, stopCh <-chan struct{}) error SetS3Options(conf.S3Options). SetOpenPitrixOptions(conf.OpenPitrixOptions). SetPrometheusOptions(conf.MonitoringOptions). - SetRedisOptions(conf.RedisOptions) + SetRedisOptions(conf.RedisOptions). + SetKubeSphereOptions(conf.KubeSphereOptions) client.NewClientSetFactory(csop, stopCh) diff --git a/cmd/ks-iam/app/options/options.go b/cmd/ks-iam/app/options/options.go index 85c678447..04b9c0598 100644 --- a/cmd/ks-iam/app/options/options.go +++ b/cmd/ks-iam/app/options/options.go @@ -19,7 +19,7 @@ package options import ( "github.com/spf13/pflag" - genericoptions "kubesphere.io/kubesphere/pkg/options" + genericoptions "kubesphere.io/kubesphere/pkg/server/options" ) type ServerRunOptions struct { diff --git a/cmd/ks-iam/app/server.go b/cmd/ks-iam/app/server.go index 149062ac8..bb648ff31 100644 --- a/cmd/ks-iam/app/server.go +++ b/cmd/ks-iam/app/server.go @@ -25,10 +25,10 @@ import ( "github.com/spf13/pflag" "kubesphere.io/kubesphere/cmd/ks-iam/app/options" "kubesphere.io/kubesphere/pkg/apiserver/runtime" - "kubesphere.io/kubesphere/pkg/filter" "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/models/iam" "kubesphere.io/kubesphere/pkg/server" + "kubesphere.io/kubesphere/pkg/server/filter" "kubesphere.io/kubesphere/pkg/utils/jwtutil" "kubesphere.io/kubesphere/pkg/utils/signals" "log" diff --git a/pkg/api/devops/v1alpha2/types.go b/pkg/api/devops/v1alpha2/types.go new file mode 100644 index 000000000..60aa23d3c --- /dev/null +++ b/pkg/api/devops/v1alpha2/types.go @@ -0,0 +1,20 @@ +package v1alpha2 + +import "time" + +type PageableDevOpsProject struct { + Items []*DevOpsProject `json:"items"` + TotalCount int `json:"total_count"` +} + +type DevOpsProject struct { + ProjectId string `json:"project_id" db:"project_id" description:"ProjectId must be unique within a workspace, it is generated by kubesphere."` + Name string `json:"name" description:"DevOps Projects's Name"` + Description string `json:"description,omitempty" description:"DevOps Projects's Description, used to describe the DevOps Project"` + Creator string `json:"creator" description:"Creator's username"` + CreateTime time.Time `json:"create_time" description:"DevOps Project's Creation time"` + Status string `json:"status" description:"DevOps project's status. e.g. active"` + Visibility string `json:"visibility,omitempty" description:"Deprecated Field"` + Extra string `json:"extra,omitempty" description:"Internal Use"` + Workspace string `json:"workspace" description:"The workspace to which the devops project belongs"` +} diff --git a/pkg/apis/devops/v1alpha2/register.go b/pkg/apis/devops/v1alpha2/register.go index cc4557a4a..4c92e8ac1 100644 --- a/pkg/apis/devops/v1alpha2/register.go +++ b/pkg/apis/devops/v1alpha2/register.go @@ -22,13 +22,14 @@ import ( "github.com/emicklei/go-restful" "github.com/emicklei/go-restful-openapi" "k8s.io/apimachinery/pkg/runtime/schema" + "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" devopsv1alpha1 "kubesphere.io/kubesphere/pkg/apis/devops/v1alpha1" devopsapi "kubesphere.io/kubesphere/pkg/apiserver/devops" "kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/models/devops" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "net/http" ) @@ -53,17 +54,17 @@ func addWebService(c *restful.Container) error { Doc("Get the specified DevOps Project"). Metadata(restfulspec.KeyOpenAPITags, []string{constants.DevOpsProjectTag}). Param(webservice.PathParameter("devops", "DevOps project's ID, e.g. project-RRRRAzLBlLEm")). - Returns(http.StatusOK, RespOK, devops.DevOpsProject{}). - Writes(devops.DevOpsProject{})) + Returns(http.StatusOK, RespOK, v1alpha2.DevOpsProject{}). + Writes(v1alpha2.DevOpsProject{})) webservice.Route(webservice.PATCH("/devops/{devops}"). To(devopsapi.UpdateProjectHandler). Doc("Update the specified DevOps Project"). Metadata(restfulspec.KeyOpenAPITags, []string{constants.DevOpsProjectTag}). Param(webservice.PathParameter("devops", "DevOps project's ID, e.g. project-RRRRAzLBlLEm")). - Reads(devops.DevOpsProject{}). - Returns(http.StatusOK, RespOK, devops.DevOpsProject{}). - Writes(devops.DevOpsProject{})) + Reads(v1alpha2.DevOpsProject{}). + Returns(http.StatusOK, RespOK, v1alpha2.DevOpsProject{}). + Writes(v1alpha2.DevOpsProject{})) webservice.Route(webservice.GET("/devops/{devops}/defaultroles"). To(devopsapi.GetDevOpsProjectDefaultRoles). diff --git a/pkg/apis/iam/v1alpha2/register.go b/pkg/apis/iam/v1alpha2/register.go index 5594b98d9..6ce498af2 100644 --- a/pkg/apis/iam/v1alpha2/register.go +++ b/pkg/apis/iam/v1alpha2/register.go @@ -25,9 +25,9 @@ import ( "kubesphere.io/kubesphere/pkg/apiserver/iam" "kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/iam/policy" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" "time" ) diff --git a/pkg/apis/operations/v1alpha2/register.go b/pkg/apis/operations/v1alpha2/register.go index 4f54a332f..e845da113 100644 --- a/pkg/apis/operations/v1alpha2/register.go +++ b/pkg/apis/operations/v1alpha2/register.go @@ -22,7 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "kubesphere.io/kubesphere/pkg/apiserver/operations" "kubesphere.io/kubesphere/pkg/apiserver/runtime" - "kubesphere.io/kubesphere/pkg/errors" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" ) diff --git a/pkg/apis/resources/v1alpha2/register.go b/pkg/apis/resources/v1alpha2/register.go index 2cb97b212..b6bdb5afb 100644 --- a/pkg/apis/resources/v1alpha2/register.go +++ b/pkg/apis/resources/v1alpha2/register.go @@ -34,13 +34,13 @@ import ( "kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/apiserver/workloadstatuses" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/applications" gitmodel "kubesphere.io/kubesphere/pkg/models/git" registriesmodel "kubesphere.io/kubesphere/pkg/models/registries" "kubesphere.io/kubesphere/pkg/models/status" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/errors" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" "net/http" ) diff --git a/pkg/apis/tenant/v1alpha2/register.go b/pkg/apis/tenant/v1alpha2/register.go index 379897c56..482597389 100644 --- a/pkg/apis/tenant/v1alpha2/register.go +++ b/pkg/apis/tenant/v1alpha2/register.go @@ -22,16 +22,16 @@ import ( "github.com/emicklei/go-restful-openapi" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime/schema" + devopsv1alpha2 "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" "kubesphere.io/kubesphere/pkg/apis/tenant/v1alpha1" "kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/apiserver/tenant" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/models/devops" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/simple/client/elasticsearch" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" ) @@ -145,15 +145,15 @@ func addWebService(c *restful.Container) error { To(tenant.CreateDevopsProject). Param(ws.PathParameter("workspace", "workspace name")). Doc("Create a devops project in the specified workspace"). - Reads(devops.DevOpsProject{}). - Returns(http.StatusOK, RespOK, devops.DevOpsProject{}). + Reads(devopsv1alpha2.DevOpsProject{}). + Returns(http.StatusOK, RespOK, devopsv1alpha2.DevOpsProject{}). Metadata(restfulspec.KeyOpenAPITags, []string{constants.TenantResourcesTag})) ws.Route(ws.DELETE("/workspaces/{workspace}/devops/{devops}"). To(tenant.DeleteDevopsProject). Param(ws.PathParameter("workspace", "workspace name")). Param(ws.PathParameter("devops", "devops project ID")). Doc("Delete the specified devops project from the workspace"). - Returns(http.StatusOK, RespOK, devops.DevOpsProject{}). + Returns(http.StatusOK, RespOK, devopsv1alpha2.DevOpsProject{}). Metadata(restfulspec.KeyOpenAPITags, []string{constants.TenantResourcesTag})) ws.Route(ws.GET("/logs"). To(tenant.LogQuery). diff --git a/pkg/apiserver/components/components.go b/pkg/apiserver/components/components.go index 21d20b322..be8b692da 100644 --- a/pkg/apiserver/components/components.go +++ b/pkg/apiserver/components/components.go @@ -20,8 +20,8 @@ package components import ( "github.com/emicklei/go-restful" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/components" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" ) diff --git a/pkg/apiserver/devops/devops.go b/pkg/apiserver/devops/devops.go index 1b0c15ba8..d8eb8e34d 100644 --- a/pkg/apiserver/devops/devops.go +++ b/pkg/apiserver/devops/devops.go @@ -20,7 +20,7 @@ package devops import ( "encoding/json" "github.com/emicklei/go-restful" - log "github.com/golang/glog" + log "k8s.io/klog" "kubesphere.io/kubesphere/pkg/models/devops" "net/http" "strings" diff --git a/pkg/apiserver/devops/member.go b/pkg/apiserver/devops/member.go index e4a7ad8a9..d168e833d 100644 --- a/pkg/apiserver/devops/member.go +++ b/pkg/apiserver/devops/member.go @@ -17,11 +17,11 @@ import ( "fmt" "github.com/asaskevich/govalidator" "github.com/emicklei/go-restful" - "github.com/golang/glog" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/devops" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/errors" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/reflectutils" "net/http" ) @@ -33,7 +33,7 @@ func GetDevOpsProjectMembersHandler(request *restful.Request, resp *restful.Resp err := devops.CheckProjectUserInRole(username, projectId, devops.AllRoleSlice) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } @@ -45,7 +45,7 @@ func GetDevOpsProjectMembersHandler(request *restful.Request, resp *restful.Resp project, err := devops.GetProjectMembers(projectId, conditions, orderBy, reverse, limit, offset) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -62,14 +62,14 @@ func GetDevOpsProjectMemberHandler(request *restful.Request, resp *restful.Respo err := devops.CheckProjectUserInRole(username, projectId, devops.AllRoleSlice) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } project, err := devops.GetProjectMember(projectId, member) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -85,34 +85,34 @@ func AddDevOpsProjectMemberHandler(request *restful.Request, resp *restful.Respo member := &devops.DevOpsProjectMembership{} err := request.ReadEntity(&member) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } if govalidator.IsNull(member.Username) { err := fmt.Errorf("error need username") - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } if !reflectutils.In(member.Role, devops.AllRoleSlice) { err := fmt.Errorf("err role [%s] not in [%s]", member.Role, devops.AllRoleSlice) - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } project, err := devops.AddProjectMember(projectId, username, member) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -128,41 +128,41 @@ func UpdateDevOpsProjectMemberHandler(request *restful.Request, resp *restful.Re member := &devops.DevOpsProjectMembership{} err := request.ReadEntity(&member) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } member.Username = request.PathParameter("member") if govalidator.IsNull(member.Username) { err := fmt.Errorf("error need username") - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } if username == member.Username { err := fmt.Errorf("you can not change your role") - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } if !reflectutils.In(member.Role, devops.AllRoleSlice) { err := fmt.Errorf("err role [%s] not in [%s]", member.Role, devops.AllRoleSlice) - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } project, err := devops.UpdateProjectMember(projectId, username, member) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -179,13 +179,13 @@ func DeleteDevOpsProjectMemberHandler(request *restful.Request, resp *restful.Re err := devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } username, err = devops.DeleteProjectMember(projectId, member) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } diff --git a/pkg/apiserver/devops/project.go b/pkg/apiserver/devops/project.go index bf487b968..5589dac6f 100644 --- a/pkg/apiserver/devops/project.go +++ b/pkg/apiserver/devops/project.go @@ -15,11 +15,11 @@ package devops import ( "github.com/emicklei/go-restful" - "github.com/golang/glog" - + "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/devops" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" ) @@ -30,14 +30,14 @@ func GetDevOpsProjectHandler(request *restful.Request, resp *restful.Response) { err := devops.CheckProjectUserInRole(username, projectId, devops.AllRoleSlice) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } project, err := devops.GetProject(projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -50,24 +50,24 @@ func UpdateProjectHandler(request *restful.Request, resp *restful.Response) { projectId := request.PathParameter("devops") username := request.HeaderParameter(constants.UserNameHeader) - var project *devops.DevOpsProject + var project *v1alpha2.DevOpsProject err := request.ReadEntity(&project) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } project.ProjectId = projectId err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } project, err = devops.UpdateProject(project) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } diff --git a/pkg/apiserver/devops/project_credential.go b/pkg/apiserver/devops/project_credential.go index b13da430f..1ad032676 100644 --- a/pkg/apiserver/devops/project_credential.go +++ b/pkg/apiserver/devops/project_credential.go @@ -15,10 +15,10 @@ package devops import ( "github.com/emicklei/go-restful" - "github.com/golang/glog" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/devops" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" ) @@ -29,20 +29,20 @@ func CreateDevOpsProjectCredentialHandler(request *restful.Request, resp *restfu var credential *devops.JenkinsCredential err := request.ReadEntity(&credential) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } credentialId, err := devops.CreateProjectCredential(projectId, username, credential) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -61,20 +61,20 @@ func UpdateDevOpsProjectCredentialHandler(request *restful.Request, resp *restfu var credential *devops.JenkinsCredential err := request.ReadEntity(&credential) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } credentialId, err = devops.UpdateProjectCredential(projectId, credentialId, credential) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -93,20 +93,20 @@ func DeleteDevOpsProjectCredentialHandler(request *restful.Request, resp *restfu var credential *devops.JenkinsCredential err := request.ReadEntity(&credential) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } credentialId, err = devops.DeleteProjectCredential(projectId, credentialId, credential) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -127,14 +127,14 @@ func GetDevOpsProjectCredentialHandler(request *restful.Request, resp *restful.R err := devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } response, err := devops.GetProjectCredential(projectId, credentialId, domain, getContent) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -150,13 +150,13 @@ func GetDevOpsProjectCredentialsHandler(request *restful.Request, resp *restful. err := devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } jenkinsCredentials, err := devops.GetProjectCredentials(projectId, domain) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } diff --git a/pkg/apiserver/devops/project_pipeline.go b/pkg/apiserver/devops/project_pipeline.go index 5db86f7e4..fe62c69e4 100644 --- a/pkg/apiserver/devops/project_pipeline.go +++ b/pkg/apiserver/devops/project_pipeline.go @@ -15,10 +15,10 @@ package devops import ( "github.com/emicklei/go-restful" - "github.com/golang/glog" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/devops" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" ) @@ -29,20 +29,20 @@ func CreateDevOpsProjectPipelineHandler(request *restful.Request, resp *restful. var pipeline *devops.ProjectPipeline err := request.ReadEntity(&pipeline) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } pipelineName, err := devops.CreateProjectPipeline(projectId, pipeline) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -60,14 +60,14 @@ func DeleteDevOpsProjectPipelineHandler(request *restful.Request, resp *restful. err := devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } pipelineName, err := devops.DeleteProjectPipeline(projectId, pipelineId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -86,20 +86,20 @@ func UpdateDevOpsProjectPipelineHandler(request *restful.Request, resp *restful. var pipeline *devops.ProjectPipeline err := request.ReadEntity(&pipeline) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } err = devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } pipelineName, err := devops.UpdateProjectPipeline(projectId, pipelineId, pipeline) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -118,14 +118,14 @@ func GetDevOpsProjectPipelineHandler(request *restful.Request, resp *restful.Res err := devops.CheckProjectUserInRole(username, projectId, []string{devops.ProjectOwner, devops.ProjectMaintainer}) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } pipeline, err := devops.GetProjectPipeline(projectId, pipelineId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -140,13 +140,13 @@ func GetPipelineSonarStatusHandler(request *restful.Request, resp *restful.Respo pipelineId := request.PathParameter("pipeline") err := devops.CheckProjectUserInRole(username, projectId, devops.AllRoleSlice) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } sonarStatus, err := devops.GetPipelineSonar(projectId, pipelineId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -160,13 +160,13 @@ func GetMultiBranchesPipelineSonarStatusHandler(request *restful.Request, resp * branchId := request.PathParameter("branch") err := devops.CheckProjectUserInRole(username, projectId, devops.AllRoleSlice) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusForbidden, err.Error()), resp) return } sonarStatus, err := devops.GetMultiBranchPipelineSonar(projectId, pipelineId, branchId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } diff --git a/pkg/apiserver/devops/s2ibinary.go b/pkg/apiserver/devops/s2ibinary.go index 2d3e79a12..bf4eeee5c 100644 --- a/pkg/apiserver/devops/s2ibinary.go +++ b/pkg/apiserver/devops/s2ibinary.go @@ -5,8 +5,8 @@ import ( "fmt" "github.com/emicklei/go-restful" "k8s.io/klog" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/devops" + "kubesphere.io/kubesphere/pkg/server/errors" "kubesphere.io/kubesphere/pkg/utils/hashutil" "net/http" ) diff --git a/pkg/apiserver/git/git.go b/pkg/apiserver/git/git.go index 11c3270ec..6f7ae3148 100644 --- a/pkg/apiserver/git/git.go +++ b/pkg/apiserver/git/git.go @@ -4,8 +4,8 @@ import ( "net/http" "github.com/emicklei/go-restful" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/git" + "kubesphere.io/kubesphere/pkg/server/errors" ) func GitReadVerify(request *restful.Request, response *restful.Response) { diff --git a/pkg/apiserver/iam/am.go b/pkg/apiserver/iam/am.go index 21699c72c..21cc996a6 100644 --- a/pkg/apiserver/iam/am.go +++ b/pkg/apiserver/iam/am.go @@ -21,13 +21,13 @@ import ( "github.com/emicklei/go-restful" "k8s.io/api/rbac/v1" k8serr "k8s.io/apimachinery/pkg/api/errors" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "net/http" "sort" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/iam" "kubesphere.io/kubesphere/pkg/models/iam/policy" + "kubesphere.io/kubesphere/pkg/server/errors" ) type RoleList struct { diff --git a/pkg/apiserver/iam/auth.go b/pkg/apiserver/iam/auth.go index 2a0cde349..f93855a17 100644 --- a/pkg/apiserver/iam/auth.go +++ b/pkg/apiserver/iam/auth.go @@ -20,13 +20,13 @@ package iam import ( "github.com/dgrijalva/jwt-go" "github.com/emicklei/go-restful" - "github.com/golang/glog" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/utils/iputil" "kubesphere.io/kubesphere/pkg/utils/jwtutil" "net/http" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/iam" + "kubesphere.io/kubesphere/pkg/server/errors" ) type Spec struct { @@ -102,7 +102,7 @@ func TokenReviewHandler(req *restful.Request, resp *restful.Response) { token, err := jwtutil.ValidateToken(uToken) if err != nil { - glog.Errorln("token review failed", uToken, err) + klog.Errorln("token review failed", uToken, err) failed := TokenReview{APIVersion: APIVersion, Kind: KindTokenReview, Status: &Status{ diff --git a/pkg/apiserver/iam/groups.go b/pkg/apiserver/iam/groups.go index 9b978ce6c..42b2d3080 100644 --- a/pkg/apiserver/iam/groups.go +++ b/pkg/apiserver/iam/groups.go @@ -26,9 +26,9 @@ import ( "github.com/emicklei/go-restful" "github.com/go-ldap/ldap" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/iam" + "kubesphere.io/kubesphere/pkg/server/errors" ) func CreateGroup(req *restful.Request, resp *restful.Response) { diff --git a/pkg/apiserver/iam/im.go b/pkg/apiserver/iam/im.go index 8029c655f..edd7b2a23 100644 --- a/pkg/apiserver/iam/im.go +++ b/pkg/apiserver/iam/im.go @@ -20,7 +20,7 @@ package iam import ( "fmt" "k8s.io/klog" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "net/http" "net/mail" "strings" @@ -29,9 +29,9 @@ import ( "github.com/go-ldap/ldap" rbacv1 "k8s.io/api/rbac/v1" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/iam" + "kubesphere.io/kubesphere/pkg/server/errors" ) func CreateUser(req *restful.Request, resp *restful.Response) { diff --git a/pkg/apiserver/iam/workspaces.go b/pkg/apiserver/iam/workspaces.go index be0f46194..7bbdecb3f 100644 --- a/pkg/apiserver/iam/workspaces.go +++ b/pkg/apiserver/iam/workspaces.go @@ -21,11 +21,11 @@ import ( "github.com/emicklei/go-restful" k8serr "k8s.io/apimachinery/pkg/api/errors" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/iam" "kubesphere.io/kubesphere/pkg/models/workspaces" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/errors" + "kubesphere.io/kubesphere/pkg/server/params" "net/http" ) diff --git a/pkg/apiserver/logging/logging.go b/pkg/apiserver/logging/logging.go index 7238ce9a5..a75e2333a 100644 --- a/pkg/apiserver/logging/logging.go +++ b/pkg/apiserver/logging/logging.go @@ -20,9 +20,9 @@ package logging import ( "github.com/emicklei/go-restful" - "github.com/golang/glog" - "kubesphere.io/kubesphere/pkg/errors" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/models/log" + "kubesphere.io/kubesphere/pkg/server/errors" es "kubesphere.io/kubesphere/pkg/simple/client/elasticsearch" fb "kubesphere.io/kubesphere/pkg/simple/client/fluentbit" "kubesphere.io/kubesphere/pkg/utils/stringutils" @@ -106,7 +106,7 @@ func LoggingInsertFluentbitOutput(request *restful.Request, response *restful.Re err := request.ReadEntity(&output) if err != nil { - glog.Errorln(err) + klog.Errorln(err) response.WriteHeaderAndEntity(http.StatusBadRequest, errors.Wrap(err)) return } @@ -128,7 +128,7 @@ func LoggingUpdateFluentbitOutput(request *restful.Request, response *restful.Re err := request.ReadEntity(&output) if err != nil { - glog.Errorln(err) + klog.Errorln(err) response.WriteHeaderAndEntity(http.StatusBadRequest, errors.Wrap(err)) return } diff --git a/pkg/apiserver/operations/job.go b/pkg/apiserver/operations/job.go index cd0436e47..d12c9714c 100644 --- a/pkg/apiserver/operations/job.go +++ b/pkg/apiserver/operations/job.go @@ -19,8 +19,8 @@ package operations import ( - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/workloads" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" "github.com/emicklei/go-restful" diff --git a/pkg/apiserver/operations/node.go b/pkg/apiserver/operations/node.go index a209ef86f..b70bf67f4 100644 --- a/pkg/apiserver/operations/node.go +++ b/pkg/apiserver/operations/node.go @@ -22,8 +22,8 @@ import ( "github.com/emicklei/go-restful" "net/http" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/nodes" + "kubesphere.io/kubesphere/pkg/server/errors" ) func DrainNode(request *restful.Request, response *restful.Response) { diff --git a/pkg/apiserver/quotas/quotas.go b/pkg/apiserver/quotas/quotas.go index d6819d6b1..3d9376ef4 100644 --- a/pkg/apiserver/quotas/quotas.go +++ b/pkg/apiserver/quotas/quotas.go @@ -22,7 +22,7 @@ import ( "github.com/emicklei/go-restful" "net/http" - "kubesphere.io/kubesphere/pkg/errors" + "kubesphere.io/kubesphere/pkg/server/errors" "kubesphere.io/kubesphere/pkg/models/quotas" ) diff --git a/pkg/apiserver/registries/registries.go b/pkg/apiserver/registries/registries.go index e58a33c7f..ef785013a 100644 --- a/pkg/apiserver/registries/registries.go +++ b/pkg/apiserver/registries/registries.go @@ -22,8 +22,8 @@ import ( "github.com/emicklei/go-restful" "net/http" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/registries" + "kubesphere.io/kubesphere/pkg/server/errors" k8serror "k8s.io/apimachinery/pkg/api/errors" log "k8s.io/klog" diff --git a/pkg/apiserver/resources/application.go b/pkg/apiserver/resources/application.go index 77b10c2f7..437ed8c7e 100644 --- a/pkg/apiserver/resources/application.go +++ b/pkg/apiserver/resources/application.go @@ -20,14 +20,14 @@ package resources import ( "fmt" "github.com/emicklei/go-restful" - "github.com/golang/glog" "k8s.io/api/core/v1" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/applications" "kubesphere.io/kubesphere/pkg/models/resources" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/errors" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" "net/http" ) @@ -46,7 +46,7 @@ func ListApplication(req *restful.Request, resp *restful.Response) { if len(clusterId) > 0 { app, err := applications.GetApp(clusterId) if err != nil { - glog.Errorln("get application error", err) + klog.Errorln("get application error", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } @@ -77,7 +77,7 @@ func ListNamespacedApplication(req *restful.Request, resp *restful.Response) { if len(clusterId) > 0 { app, err := applications.GetApp(clusterId) if err != nil { - glog.Errorln("get app failed", err) + klog.Errorln("get app failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } @@ -88,7 +88,7 @@ func ListNamespacedApplication(req *restful.Request, resp *restful.Response) { namespace, err := resources.GetResource("", resources.Namespaces, namespaceName) if err != nil { - glog.Errorln("get namespace failed", err) + klog.Errorln("get namespace failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } @@ -100,7 +100,7 @@ func ListNamespacedApplication(req *restful.Request, resp *restful.Response) { } if runtimeId == "" { - glog.Errorln("runtime id not found") + klog.Errorln("runtime id not found") resp.WriteAsJson(models.PageableResponse{Items: []interface{}{}, TotalCount: 0}) return } @@ -108,7 +108,7 @@ func ListNamespacedApplication(req *restful.Request, resp *restful.Response) { result, err := applications.ListApplication(runtimeId, conditions, limit, offset) if err != nil { - glog.Errorln("list applications failed", err) + klog.Errorln("list applications failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } @@ -121,14 +121,14 @@ func DescribeApplication(req *restful.Request, resp *restful.Response) { namespaceName := req.PathParameter("namespace") app, err := applications.GetApp(clusterId) if err != nil { - glog.Errorln("get app failed", err) + klog.Errorln("get app failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } namespace, err := resources.GetResource("", resources.Namespaces, namespaceName) if err != nil { - glog.Errorln("get namespace failed", err) + klog.Errorln("get namespace failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } @@ -140,7 +140,7 @@ func DescribeApplication(req *restful.Request, resp *restful.Response) { } if runtimeId != app.RuntimeId { - glog.Errorln("runtime not match", app.RuntimeId, runtimeId) + klog.Errorln("runtime not match", app.RuntimeId, runtimeId) resp.WriteHeaderAndEntity(http.StatusForbidden, errors.New(fmt.Sprintf("rumtime not match %s,%s", app.RuntimeId, runtimeId))) return } @@ -170,14 +170,14 @@ func DeleteApplication(req *restful.Request, resp *restful.Response) { namespaceName := req.PathParameter("namespace") app, err := applications.GetApp(clusterId) if err != nil { - glog.Errorln("get app failed", err) + klog.Errorln("get app failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } namespace, err := resources.GetResource("", resources.Namespaces, namespaceName) if err != nil { - glog.Errorln("get namespace failed", err) + klog.Errorln("get namespace failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } @@ -189,7 +189,7 @@ func DeleteApplication(req *restful.Request, resp *restful.Response) { } if runtimeId != app.RuntimeId { - glog.Errorln("runtime not match", app.RuntimeId, runtimeId) + klog.Errorln("runtime not match", app.RuntimeId, runtimeId) resp.WriteHeaderAndEntity(http.StatusForbidden, errors.New(fmt.Sprintf("rumtime not match %s,%s", app.RuntimeId, runtimeId))) return } @@ -197,7 +197,7 @@ func DeleteApplication(req *restful.Request, resp *restful.Response) { err = applications.DeleteApplication(clusterId) if err != nil { - glog.Errorln("delete application failed", err) + klog.Errorln("delete application failed", err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } diff --git a/pkg/apiserver/resources/resources.go b/pkg/apiserver/resources/resources.go index 66f31afc5..aa89dd5d1 100644 --- a/pkg/apiserver/resources/resources.go +++ b/pkg/apiserver/resources/resources.go @@ -22,8 +22,8 @@ import ( "kubesphere.io/kubesphere/pkg/models/resources" "net/http" - "kubesphere.io/kubesphere/pkg/errors" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/errors" + "kubesphere.io/kubesphere/pkg/server/params" ) func ListNamespacedResources(req *restful.Request, resp *restful.Response) { diff --git a/pkg/apiserver/resources/storage.go b/pkg/apiserver/resources/storage.go index 953dede0a..330aa3668 100644 --- a/pkg/apiserver/resources/storage.go +++ b/pkg/apiserver/resources/storage.go @@ -22,8 +22,8 @@ import ( "k8s.io/api/core/v1" "net/http" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/storage" + "kubesphere.io/kubesphere/pkg/server/errors" ) type pvcList struct { diff --git a/pkg/apiserver/resources/user.go b/pkg/apiserver/resources/user.go index b87b93e7f..81175ff1f 100644 --- a/pkg/apiserver/resources/user.go +++ b/pkg/apiserver/resources/user.go @@ -19,13 +19,13 @@ package resources import ( "github.com/emicklei/go-restful" - "github.com/golang/glog" k8serr "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/klog" "net/http" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/kubeconfig" "kubesphere.io/kubesphere/pkg/models/kubectl" + "kubesphere.io/kubesphere/pkg/server/errors" ) func GetKubectl(req *restful.Request, resp *restful.Response) { @@ -35,7 +35,7 @@ func GetKubectl(req *restful.Request, resp *restful.Response) { kubectlPod, err := kubectl.GetKubectlPod(user) if err != nil { - glog.Error(err) + klog.Error(err) resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) return } @@ -50,7 +50,7 @@ func GetKubeconfig(req *restful.Request, resp *restful.Response) { kubectlConfig, err := kubeconfig.GetKubeConfig(user) if err != nil { - glog.Error(err) + klog.Error(err) if k8serr.IsNotFound(err) { // recreate kubeconfig.CreateKubeConfig(user) diff --git a/pkg/apiserver/revisions/revisions.go b/pkg/apiserver/revisions/revisions.go index 722d112dd..895c6f5ea 100644 --- a/pkg/apiserver/revisions/revisions.go +++ b/pkg/apiserver/revisions/revisions.go @@ -22,8 +22,8 @@ import ( "strconv" "github.com/emicklei/go-restful" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/revisions" + "kubesphere.io/kubesphere/pkg/server/errors" ) func GetDaemonSetRevision(req *restful.Request, resp *restful.Response) { diff --git a/pkg/apiserver/routers/routers.go b/pkg/apiserver/routers/routers.go index af1df5c5b..992f02441 100644 --- a/pkg/apiserver/routers/routers.go +++ b/pkg/apiserver/routers/routers.go @@ -24,7 +24,7 @@ import ( k8serr "k8s.io/apimachinery/pkg/api/errors" "net/http" - "kubesphere.io/kubesphere/pkg/errors" + "kubesphere.io/kubesphere/pkg/server/errors" "strings" diff --git a/pkg/apiserver/tenant/tenant.go b/pkg/apiserver/tenant/tenant.go index 23557d075..7b9a6a319 100644 --- a/pkg/apiserver/tenant/tenant.go +++ b/pkg/apiserver/tenant/tenant.go @@ -19,23 +19,22 @@ package tenant import ( "github.com/emicklei/go-restful" - "github.com/golang/glog" "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" k8serr "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/util/net" "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" "kubesphere.io/kubesphere/pkg/apis/tenant/v1alpha1" "kubesphere.io/kubesphere/pkg/apiserver/logging" "kubesphere.io/kubesphere/pkg/constants" - "kubesphere.io/kubesphere/pkg/errors" - "kubesphere.io/kubesphere/pkg/models/devops" "kubesphere.io/kubesphere/pkg/models/iam" "kubesphere.io/kubesphere/pkg/models/metrics" "kubesphere.io/kubesphere/pkg/models/resources" "kubesphere.io/kubesphere/pkg/models/tenant" "kubesphere.io/kubesphere/pkg/models/workspaces" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/errors" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/simple/client/elasticsearch" "kubesphere.io/kubesphere/pkg/utils/sliceutil" @@ -91,7 +90,7 @@ func DescribeWorkspace(req *restful.Request, resp *restful.Response) { result, err := tenant.DescribeWorkspace(username, workspaceName) if err != nil { - glog.Errorf("describe workspace failed: %+v", err) + klog.Errorf("describe workspace failed: %+v", err) if k8serr.IsNotFound(err) { resp.WriteHeaderAndEntity(http.StatusNotFound, errors.Wrap(err)) } else { @@ -229,7 +228,7 @@ func ListDevopsProjects(req *restful.Request, resp *restful.Response) { conditions, err := params.ParseConditions(req.QueryParameter(params.ConditionsParam)) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } @@ -237,7 +236,7 @@ func ListDevopsProjects(req *restful.Request, resp *restful.Response) { result, err := tenant.ListDevopsProjects(workspace, username, conditions, orderBy, reverse, limit, offset) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -266,7 +265,7 @@ func DeleteDevopsProject(req *restful.Request, resp *restful.Response) { _, err := tenant.GetWorkspace(workspaceName) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } @@ -274,7 +273,7 @@ func DeleteDevopsProject(req *restful.Request, resp *restful.Response) { err = tenant.DeleteDevOpsProject(projectId, username) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -287,21 +286,21 @@ func CreateDevopsProject(req *restful.Request, resp *restful.Response) { workspaceName := req.PathParameter("workspace") username := req.HeaderParameter(constants.UserNameHeader) - var devops devops.DevOpsProject + var devops v1alpha2.DevOpsProject err := req.ReadEntity(&devops) if err != nil { - glog.Infof("%+v", err) + klog.Infof("%+v", err) errors.ParseSvcErr(restful.NewError(http.StatusBadRequest, err.Error()), resp) return } - glog.Infoln("create workspace", username, workspaceName, devops) + klog.Infoln("create workspace", username, workspaceName, devops) project, err := tenant.CreateDevopsProject(username, workspaceName, &devops) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -331,7 +330,7 @@ func ListDevopsRules(req *restful.Request, resp *restful.Response) { rules, err := tenant.GetUserDevopsSimpleRules(username, devops) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) errors.ParseSvcErr(err, resp) return } @@ -350,7 +349,7 @@ func LogQuery(req *restful.Request, resp *restful.Response) { clusterRules, err := iam.GetUserClusterRules(username) if err != nil { resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) - glog.Errorln(err) + klog.Errorln(err) return } @@ -363,7 +362,7 @@ func LogQuery(req *restful.Request, resp *restful.Response) { roles, err := iam.GetUserRoles("", username) if err != nil { resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) - glog.Errorln(err) + klog.Errorln(err) return } for _, role := range roles { diff --git a/pkg/apiserver/terminal/terminal.go b/pkg/apiserver/terminal/terminal.go index b8e083424..277112cff 100644 --- a/pkg/apiserver/terminal/terminal.go +++ b/pkg/apiserver/terminal/terminal.go @@ -20,8 +20,8 @@ package terminal import ( "github.com/emicklei/go-restful" "gopkg.in/igm/sockjs-go.v2/sockjs" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/terminal" + "kubesphere.io/kubesphere/pkg/server/errors" "net/http" ) diff --git a/pkg/apiserver/workloadstatuses/workloadstatuses.go b/pkg/apiserver/workloadstatuses/workloadstatuses.go index 75e8f8fe4..fe5ebfd26 100644 --- a/pkg/apiserver/workloadstatuses/workloadstatuses.go +++ b/pkg/apiserver/workloadstatuses/workloadstatuses.go @@ -22,8 +22,8 @@ import ( "github.com/emicklei/go-restful" "net/http" - "kubesphere.io/kubesphere/pkg/errors" "kubesphere.io/kubesphere/pkg/models/status" + "kubesphere.io/kubesphere/pkg/server/errors" ) func GetClusterAbnormalWorkloads(req *restful.Request, resp *restful.Response) { diff --git a/pkg/controller/job/job_controller.go b/pkg/controller/job/job_controller.go index eb1908f69..ab33d81d6 100644 --- a/pkg/controller/job/job_controller.go +++ b/pkg/controller/job/job_controller.go @@ -22,7 +22,6 @@ import ( "fmt" "reflect" - "github.com/golang/glog" batchv1 "k8s.io/api/batch/v1" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -233,7 +232,7 @@ func (v *JobController) makeRevision(job *batchv1.Job) error { revisionsByte, err := json.Marshal(revisions) if err != nil { - glog.Error("generate reversion string failed", err) + log.Error("generate reversion string failed", err) return nil } diff --git a/pkg/controller/workspace/workspace_controller.go b/pkg/controller/workspace/workspace_controller.go index a0d31f7b4..2c50d4b99 100644 --- a/pkg/controller/workspace/workspace_controller.go +++ b/pkg/controller/workspace/workspace_controller.go @@ -32,6 +32,7 @@ import ( tenantv1alpha1 "kubesphere.io/kubesphere/pkg/apis/tenant/v1alpha1" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/models" + cs "kubesphere.io/kubesphere/pkg/simple/client" "kubesphere.io/kubesphere/pkg/simple/client/kubesphere" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "reflect" @@ -68,7 +69,7 @@ func Add(mgr manager.Manager) error { // newReconciler returns a new reconcile.Reconciler func newReconciler(mgr manager.Manager) reconcile.Reconciler { return &ReconcileWorkspace{Client: mgr.GetClient(), scheme: mgr.GetScheme(), - recorder: mgr.GetRecorder("workspace-controller"), ksclient: kubesphere.Client()} + recorder: mgr.GetRecorder("workspace-controller"), ksclient: cs.ClientSets().KubeSphere()} } // add adds a new Controller to mgr with r as the reconcile.Reconciler diff --git a/pkg/db/event.go b/pkg/db/event.go index b63debe8e..033fa3f1a 100644 --- a/pkg/db/event.go +++ b/pkg/db/event.go @@ -14,7 +14,7 @@ limitations under the License. package db import ( - "github.com/golang/glog" + "k8s.io/klog" ) // EventReceiver is a sentinel EventReceiver; use it if the caller doesn't supply one @@ -38,8 +38,8 @@ func (n *EventReceiver) EventErr(eventName string, err error) error { // EventErrKv receives a notification of an error if one occurs along with // optional key/value data func (n *EventReceiver) EventErrKv(eventName string, err error, kvs map[string]string) error { - glog.Errorf("%+v", err) - glog.Errorf("%s: %+v", eventName, kvs) + klog.Errorf("%+v", err) + klog.Errorf("%s: %+v", eventName, kvs) return err } @@ -51,5 +51,5 @@ func (n *EventReceiver) Timing(eventName string, nanoseconds int64) { // TimingKv receives the time an event took to happen along with optional key/value data func (n *EventReceiver) TimingKv(eventName string, nanoseconds int64, kvs map[string]string) { // TODO: Change logger level to debug - glog.Infof("%s spend %.2fms: %+v", eventName, float32(nanoseconds)/1000000, kvs) + klog.Infof("%s spend %.2fms: %+v", eventName, float32(nanoseconds)/1000000, kvs) } diff --git a/pkg/models/applications/applications.go b/pkg/models/applications/applications.go index 022ecb06b..a5e2f50fd 100644 --- a/pkg/models/applications/applications.go +++ b/pkg/models/applications/applications.go @@ -19,18 +19,18 @@ package applications import ( "fmt" - "github.com/golang/glog" appsv1 "k8s.io/api/apps/v1" "k8s.io/api/core/v1" "k8s.io/api/extensions/v1beta1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/resources" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/simple/client" "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" "strings" @@ -105,7 +105,7 @@ func GetApp(clusterId string) (*Application, error) { item, err := openPitrixClient.GetCluster(clusterId) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -132,7 +132,7 @@ func GetApp(clusterId string) (*Application, error) { workloads, err := getWorkLoads(app.Runtime, item.ClusterRoleSets) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } app.WorkLoads = workloads @@ -159,7 +159,7 @@ func getWorkLoads(namespace string, clusterRoles []openpitrix.ClusterRole) (*wor if errors.IsNotFound(err) { continue } - glog.Error(err) + klog.Error(err) return nil, err } @@ -175,7 +175,7 @@ func getWorkLoads(namespace string, clusterRoles []openpitrix.ClusterRole) (*wor if errors.IsNotFound(err) { continue } - glog.Error(err) + klog.Error(err) return nil, err } works.Daemonsets = append(works.Daemonsets, *item) @@ -190,7 +190,7 @@ func getWorkLoads(namespace string, clusterRoles []openpitrix.ClusterRole) (*wor if errors.IsNotFound(err) { continue } - glog.Error(err) + klog.Error(err) return nil, err } works.Statefulsets = append(works.Statefulsets, *item) @@ -255,7 +255,7 @@ func getSvcs(namespace string, workLoadLabels *[]map[string]string) []v1.Service labelSelector := labels.Set(label).AsSelector().String() svcs, err := k8sClient.CoreV1().Services(namespace).List(metav1.ListOptions{LabelSelector: labelSelector}) if err != nil { - glog.Errorf("get app's svc failed, reason: %v", err) + klog.Errorf("get app's svc failed, reason: %v", err) } for _, item := range svcs.Items { if !isExist(services, item) { @@ -276,11 +276,11 @@ func getIng(namespace string, services []v1.Service) []v1beta1.Ingress { for _, svc := range services { result, err := resources.ListResources(namespace, "ingress", ¶ms.Conditions{Fuzzy: map[string]string{"serviceName": svc.Name}}, "", false, -1, 0) if err != nil { - glog.Error(err) + klog.Error(err) return nil } - glog.Error(result) + klog.Error(result) for _, i := range result.Items { ingress := i.(*v1beta1.Ingress) @@ -316,7 +316,7 @@ func DeployApplication(namespace string, app openpitrix.CreateClusterRequest) er ns, err := informers.SharedInformerFactory().Core().V1().Namespaces().Lister().Get(namespace) if err != nil { - glog.Errorf("deploy application failed: %+v", err) + klog.Errorf("deploy application failed: %+v", err) return err } diff --git a/pkg/models/components/components.go b/pkg/models/components/components.go index 05eaf3fab..ae7627020 100644 --- a/pkg/models/components/components.go +++ b/pkg/models/components/components.go @@ -20,12 +20,12 @@ package components import ( "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/simple/client" "kubesphere.io/kubesphere/pkg/informers" - "github.com/golang/glog" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" @@ -102,7 +102,7 @@ func GetSystemHealthStatus() (*models.HealthStatus, error) { // get kubesphere-system components components, err := GetAllComponentsStatus() if err != nil { - glog.Errorln(err) + klog.Errorln(err) } status.KubeSphereComponents = components @@ -111,7 +111,7 @@ func GetSystemHealthStatus() (*models.HealthStatus, error) { // get node status nodes, err := nodeLister.List(labels.Everything()) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return status, nil } @@ -145,7 +145,7 @@ func GetAllComponentsStatus() ([]models.ComponentStatus, error) { services, err := serviceLister.Services(ns).List(labels.Everything()) if err != nil { - glog.Error(err) + klog.Error(err) continue } @@ -169,7 +169,7 @@ func GetAllComponentsStatus() ([]models.ComponentStatus, error) { pods, err := podLister.Pods(ns).List(labels.SelectorFromValidatedSet(service.Spec.Selector)) if err != nil { - glog.Errorln(err) + klog.Errorln(err) continue } diff --git a/pkg/models/devops/project.go b/pkg/models/devops/project.go index d062236c6..f0d90cc27 100644 --- a/pkg/models/devops/project.go +++ b/pkg/models/devops/project.go @@ -14,11 +14,12 @@ limitations under the License. package devops import ( + "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" "kubesphere.io/kubesphere/pkg/utils/idutils" "time" ) -var DevOpsProjectColumns = GetColumnsFromStruct(&DevOpsProject{}) +var DevOpsProjectColumns = GetColumnsFromStruct(&v1alpha2.DevOpsProject{}) const ( DevOpsProjectTableName = "project" @@ -31,33 +32,8 @@ const ( DevOpsProjectCreateTimeColumn = "project.create_time" ) -type PageableDevOpsProject struct { - Items []*DevOpsProject `json:"items"` - TotalCount int `json:"total_count"` -} - -type DevOpsProject struct { - ProjectId string `json:"project_id" db:"project_id" description:"ProjectId must be unique within a workspace, it is generated by kubesphere."` - - Name string `json:"name" description:"DevOps Projects's Name"` - - Description string `json:"description,omitempty" description:"DevOps Projects's Description, used to describe the DevOps Project"` - - Creator string `json:"creator" description:"Creator's username"` - - CreateTime time.Time `json:"create_time" description:"DevOps Project's Creation time"` - - Status string `json:"status" description:"DevOps project's status. e.g. active"` - - Visibility string `json:"visibility,omitempty" description:"Deprecated Field"` - - Extra string `json:"extra,omitempty" description:"Internal Use"` - - Workspace string `json:"workspace" description:"The workspace to which the devops project belongs"` -} - -func NewDevOpsProject(name, description, creator, extra, workspace string) *DevOpsProject { - return &DevOpsProject{ +func NewDevOpsProject(name, description, creator, extra, workspace string) *v1alpha2.DevOpsProject { + return &v1alpha2.DevOpsProject{ ProjectId: idutils.GetUuid(DevOpsProjectPrefix), Name: name, Description: description, diff --git a/pkg/models/devops/project_credential_handler.go b/pkg/models/devops/project_credential_handler.go index 23559defe..de0e0f8ef 100644 --- a/pkg/models/devops/project_credential_handler.go +++ b/pkg/models/devops/project_credential_handler.go @@ -19,7 +19,7 @@ import ( "github.com/asaskevich/govalidator" "github.com/emicklei/go-restful" "github.com/gocraft/dbr" - "github.com/golang/glog" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/db" "kubesphere.io/kubesphere/pkg/gojenkins" @@ -39,7 +39,7 @@ func CreateProjectCredential(projectId, username string, credentialRequest *Jenk err = checkJenkinsCredentialExists(projectId, credentialRequest.Domain, credentialRequest.Id) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", err } @@ -47,7 +47,7 @@ func CreateProjectCredential(projectId, username string, credentialRequest *Jenk case CredentialTypeUsernamePassword: if credentialRequest.UsernamePasswordCredential == nil { err := fmt.Errorf("usename_password should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } credentialId, err := jenkinsClient.CreateUsernamePasswordCredentialInFolder(credentialRequest.Domain, @@ -57,19 +57,19 @@ func CreateProjectCredential(projectId, username string, credentialRequest *Jenk credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } err = insertCredentialToDb(projectId, *credentialId, credentialRequest.Domain, username) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", err } return *credentialId, nil case CredentialTypeSsh: if credentialRequest.SshCredential == nil { err := fmt.Errorf("ssh should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } credentialId, err := jenkinsClient.CreateSshCredentialInFolder(credentialRequest.Domain, @@ -80,20 +80,20 @@ func CreateProjectCredential(projectId, username string, credentialRequest *Jenk credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } err = insertCredentialToDb(projectId, *credentialId, credentialRequest.Domain, username) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(http.StatusInternalServerError, err.Error()) } return *credentialId, nil case CredentialTypeSecretText: if credentialRequest.SecretTextCredential == nil { err := fmt.Errorf("secret_text should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } @@ -103,20 +103,20 @@ func CreateProjectCredential(projectId, username string, credentialRequest *Jenk credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } err = insertCredentialToDb(projectId, *credentialId, credentialRequest.Domain, username) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(http.StatusInternalServerError, err.Error()) } return *credentialId, nil case CredentialTypeKubeConfig: if credentialRequest.KubeconfigCredential == nil { err := fmt.Errorf("kubeconfig should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } credentialId, err := jenkinsClient.CreateKubeconfigCredentialInFolder(credentialRequest.Domain, @@ -125,18 +125,18 @@ func CreateProjectCredential(projectId, username string, credentialRequest *Jenk credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } err = insertCredentialToDb(projectId, *credentialId, credentialRequest.Domain, username) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(http.StatusInternalServerError, err.Error()) } return *credentialId, nil default: err := fmt.Errorf("error unsupport credential type") - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } @@ -154,7 +154,7 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * credentialId, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } credentialType := CredentialTypeMap[jenkinsCredential.TypeName] @@ -162,7 +162,7 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * case CredentialTypeUsernamePassword: if credentialRequest.UsernamePasswordCredential == nil { err := fmt.Errorf("usename_password should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } credentialId, err := jenkinsClient.UpdateUsernamePasswordCredentialInFolder(credentialRequest.Domain, @@ -172,7 +172,7 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } @@ -180,7 +180,7 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * case CredentialTypeSsh: if credentialRequest.SshCredential == nil { err := fmt.Errorf("ssh should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } credentialId, err := jenkinsClient.UpdateSshCredentialInFolder(credentialRequest.Domain, @@ -191,7 +191,7 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } @@ -199,7 +199,7 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * case CredentialTypeSecretText: if credentialRequest.SecretTextCredential == nil { err := fmt.Errorf("secret_text should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } credentialId, err := jenkinsClient.UpdateSecretTextCredentialInFolder(credentialRequest.Domain, @@ -208,14 +208,14 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } return *credentialId, nil case CredentialTypeKubeConfig: if credentialRequest.KubeconfigCredential == nil { err := fmt.Errorf("kubeconfig should not be nil") - glog.Error(err) + klog.Error(err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } credentialId, err := jenkinsClient.UpdateKubeconfigCredentialInFolder(credentialRequest.Domain, @@ -224,13 +224,13 @@ func UpdateProjectCredential(projectId, credentialId string, credentialRequest * credentialRequest.Description, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } return *credentialId, nil default: err := fmt.Errorf("error unsupport credential type") - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(http.StatusBadRequest, err.Error()) } @@ -253,13 +253,13 @@ func DeleteProjectCredential(projectId, credentialId string, credentialRequest * credentialId, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } id, err := jenkinsClient.DeleteCredentialInFolder(credentialRequest.Domain, credentialId, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } @@ -274,7 +274,7 @@ func DeleteProjectCredential(projectId, credentialId string, credentialRequest * _, err = dbClient.DeleteFrom(ProjectCredentialTableName). Where(db.And(deleteConditions...)).Exec() if err != nil && err != db.ErrNotFound { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return "", restful.NewError(http.StatusInternalServerError, err.Error()) } return *id, nil @@ -296,7 +296,7 @@ func GetProjectCredential(projectId, credentialId, domain, getContent string) (* credentialId, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } @@ -308,7 +308,7 @@ func GetProjectCredential(projectId, credentialId, domain, getContent string) (* db.Eq(ProjectCredentialDomainColumn, jenkinsResponse.Domain))).LoadOne(projectCredential) if err != nil && err != db.ErrNotFound { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(http.StatusInternalServerError, err.Error()) } @@ -316,13 +316,13 @@ func GetProjectCredential(projectId, credentialId, domain, getContent string) (* if getContent != "" { stringBody, err := jenkinsClient.GetCredentialContentInFolder(jenkinsResponse.Domain, credentialId, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } stringReader := strings.NewReader(stringBody) doc, err := goquery.NewDocumentFromReader(stringReader) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(http.StatusInternalServerError, err.Error()) } switch response.Type { @@ -372,7 +372,7 @@ func GetProjectCredentials(projectId, domain string) ([]*JenkinsCredential, erro } jenkinsCredentialResponses, err := jenkinsClient.GetCredentialsInFolder(domain, projectId) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } selectCondition := db.Eq(ProjectCredentialProjectIdColumn, projectId) @@ -383,7 +383,7 @@ func GetProjectCredentials(projectId, domain string) ([]*JenkinsCredential, erro _, err = dbClient.Select(ProjectCredentialColumns...). From(ProjectCredentialTableName).Where(selectCondition).Load(&projectCredentials) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(http.StatusInternalServerError, err.Error()) } response := formatCredentialsResponse(jenkinsCredentialResponses, projectCredentials) @@ -400,7 +400,7 @@ func insertCredentialToDb(projectId, credentialId, domain, username string) erro _, err = dbClient.InsertInto(ProjectCredentialTableName).Columns(ProjectCredentialColumns...). Record(projectCredential).Exec() if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return restful.NewError(http.StatusInternalServerError, err.Error()) } return nil @@ -417,11 +417,11 @@ func checkJenkinsCredentialExists(projectId, domain, credentialId string) error credential, err := jenkinsClient.GetCredentialInFolder(domain, credentialId, projectId) if credential != nil { err := fmt.Errorf("credential id [%s] has been used", credential.Id) - glog.Warning(err.Error()) + klog.Warning(err.Error()) return restful.NewError(http.StatusConflict, err.Error()) } if err != nil && utils.GetJenkinsStatusCode(err) != http.StatusNotFound { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return restful.NewError(http.StatusBadRequest, err.Error()) } diff --git a/pkg/models/devops/project_handler.go b/pkg/models/devops/project_handler.go index c0e71fb01..49537baf0 100644 --- a/pkg/models/devops/project_handler.go +++ b/pkg/models/devops/project_handler.go @@ -17,35 +17,36 @@ import ( "github.com/asaskevich/govalidator" "github.com/emicklei/go-restful" "github.com/gocraft/dbr" - "github.com/golang/glog" + "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" "kubesphere.io/kubesphere/pkg/db" cs "kubesphere.io/kubesphere/pkg/simple/client" "net/http" ) -func GetProject(projectId string) (*DevOpsProject, error) { +func GetProject(projectId string) (*v1alpha2.DevOpsProject, error) { dbconn, err := cs.ClientSets().MySQL() if err != nil { return nil, err } - project := &DevOpsProject{} + project := &v1alpha2.DevOpsProject{} err = dbconn.Select(DevOpsProjectColumns...). From(DevOpsProjectTableName). Where(db.Eq(DevOpsProjectIdColumn, projectId)). LoadOne(project) if err != nil && err != dbr.ErrNotFound { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(http.StatusInternalServerError, err.Error()) } if err == dbr.ErrNotFound { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(http.StatusNotFound, err.Error()) } return project, nil } -func UpdateProject(project *DevOpsProject) (*DevOpsProject, error) { +func UpdateProject(project *v1alpha2.DevOpsProject) (*v1alpha2.DevOpsProject, error) { dbconn, err := cs.ClientSets().MySQL() if err != nil { return nil, err @@ -66,18 +67,18 @@ func UpdateProject(project *DevOpsProject) (*DevOpsProject, error) { Where(db.Eq(DevOpsProjectIdColumn, project.ProjectId)).Exec() if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(http.StatusInternalServerError, err.Error()) } } - newProject := &DevOpsProject{} + newProject := &v1alpha2.DevOpsProject{} err = dbconn.Select(DevOpsProjectColumns...). From(DevOpsProjectTableName). Where(db.Eq(DevOpsProjectIdColumn, project.ProjectId)). LoadOne(newProject) if err != nil { - glog.Errorf("%+v", err) + klog.Errorf("%+v", err) return nil, restful.NewError(http.StatusInternalServerError, err.Error()) } return newProject, nil diff --git a/pkg/models/devops/project_member_handler.go b/pkg/models/devops/project_member_handler.go index 8537c610d..856f1d0a8 100644 --- a/pkg/models/devops/project_member_handler.go +++ b/pkg/models/devops/project_member_handler.go @@ -23,7 +23,7 @@ import ( "kubesphere.io/kubesphere/pkg/gojenkins" "kubesphere.io/kubesphere/pkg/gojenkins/utils" "kubesphere.io/kubesphere/pkg/models" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" cs "kubesphere.io/kubesphere/pkg/simple/client" ) diff --git a/pkg/models/devops/project_pipeline.go b/pkg/models/devops/project_pipeline.go index 2f9d4de0e..2a3082b61 100644 --- a/pkg/models/devops/project_pipeline.go +++ b/pkg/models/devops/project_pipeline.go @@ -16,8 +16,8 @@ package devops import ( "fmt" "github.com/beevik/etree" - "github.com/golang/glog" "github.com/kubesphere/sonargo/sonar" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/gojenkins" "kubesphere.io/kubesphere/pkg/simple/client" "strconv" @@ -1093,7 +1093,7 @@ func getBuildSonarResults(build *gojenkins.Build) ([]*SonarStatus, error) { } ceTask, _, err := sonarClient.SonarQube().Ce.Task(taskOptions) if err != nil { - glog.Errorf("get sonar task error [%+v]", err) + klog.Errorf("get sonar task error [%+v]", err) continue } sonarStatus.Task = ceTask @@ -1104,7 +1104,7 @@ func getBuildSonarResults(build *gojenkins.Build) ([]*SonarStatus, error) { } measures, _, err := sonarClient.SonarQube().Measures.Component(measuresComponentOption) if err != nil { - glog.Errorf("get sonar task error [%+v]", err) + klog.Errorf("get sonar task error [%+v]", err) continue } sonarStatus.Measures = measures diff --git a/pkg/models/iam/am.go b/pkg/models/iam/am.go index cb4732db6..77e60ad26 100644 --- a/pkg/models/iam/am.go +++ b/pkg/models/iam/am.go @@ -20,19 +20,19 @@ package iam import ( "fmt" "github.com/go-ldap/ldap" - "github.com/golang/glog" rbacv1 "k8s.io/api/rbac/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/iam/policy" "kubesphere.io/kubesphere/pkg/models/kubectl" "kubesphere.io/kubesphere/pkg/models/resources" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/simple/client" "kubesphere.io/kubesphere/pkg/utils/k8sutil" "kubesphere.io/kubesphere/pkg/utils/sliceutil" @@ -99,7 +99,7 @@ func GetUserRoles(namespace, username string) ([]*rbacv1.Role, error) { roleBindings, err := roleBindingLister.RoleBindings(namespace).List(labels.Everything()) if err != nil { - glog.Errorln("get role bindings", namespace, err) + klog.Errorln("get role bindings", namespace, err) return nil, err } @@ -111,10 +111,10 @@ func GetUserRoles(namespace, username string) ([]*rbacv1.Role, error) { clusterRole, err := clusterRoleLister.Get(roleBinding.RoleRef.Name) if err != nil { if apierrors.IsNotFound(err) { - glog.Warningf("cluster role %s not found but bind user %s in namespace %s", roleBinding.RoleRef.Name, username, namespace) + klog.Warningf("cluster role %s not found but bind user %s in namespace %s", roleBinding.RoleRef.Name, username, namespace) continue } else { - glog.Errorln("get cluster role", roleBinding.RoleRef.Name, err) + klog.Errorln("get cluster role", roleBinding.RoleRef.Name, err) return nil, err } } @@ -129,10 +129,10 @@ func GetUserRoles(namespace, username string) ([]*rbacv1.Role, error) { if err != nil { if apierrors.IsNotFound(err) { - glog.Warningf("namespace %s role %s not found, but bind user %s", namespace, roleBinding.RoleRef.Name, username) + klog.Warningf("namespace %s role %s not found, but bind user %s", namespace, roleBinding.RoleRef.Name, username) continue } else { - glog.Errorln("get role", roleBinding.Namespace, roleBinding.RoleRef.Name, err) + klog.Errorln("get role", roleBinding.Namespace, roleBinding.RoleRef.Name, err) return nil, err } } @@ -150,7 +150,7 @@ func GetUserClusterRoles(username string) (*rbacv1.ClusterRole, []*rbacv1.Cluste clusterRoleBindings, err := clusterRoleBindingLister.List(labels.Everything()) if err != nil { - glog.Errorln("get cluster role bindings", err) + klog.Errorln("get cluster role bindings", err) return nil, nil, err } @@ -161,10 +161,10 @@ func GetUserClusterRoles(username string) (*rbacv1.ClusterRole, []*rbacv1.Cluste clusterRole, err := clusterRoleLister.Get(clusterRoleBinding.RoleRef.Name) if err != nil { if apierrors.IsNotFound(err) { - glog.Warningf("cluster role %s not found but bind user %s", clusterRoleBinding.RoleRef.Name, username) + klog.Warningf("cluster role %s not found but bind user %s", clusterRoleBinding.RoleRef.Name, username) continue } else { - glog.Errorln("get cluster role", clusterRoleBinding.RoleRef.Name, err) + klog.Errorln("get cluster role", clusterRoleBinding.RoleRef.Name, err) return nil, nil, err } } @@ -221,7 +221,7 @@ func GetWorkspaceRoleBindings(workspace string) ([]*rbacv1.ClusterRoleBinding, e clusterRoleBindings, err := informers.SharedInformerFactory().Rbac().V1().ClusterRoleBindings().Lister().List(labels.Everything()) if err != nil { - glog.Errorln("get cluster role bindings", err) + klog.Errorln("get cluster role bindings", err) return nil, err } @@ -249,7 +249,7 @@ func GetUserWorkspaceRoleMap(username string) (map[string]string, error) { clusterRoleBindings, err := informers.SharedInformerFactory().Rbac().V1().ClusterRoleBindings().Lister().List(labels.Everything()) if err != nil { - glog.Errorln("get cluster role bindings", err) + klog.Errorln("get cluster role bindings", err) return nil, err } @@ -284,7 +284,7 @@ func GetRoleBindings(namespace string, roleName string) ([]*rbacv1.RoleBinding, roleBindings, err := roleBindingLister.RoleBindings(namespace).List(labels.Everything()) if err != nil { - glog.Errorln("get role bindings", namespace, err) + klog.Errorln("get role bindings", namespace, err) return nil, err } @@ -306,7 +306,7 @@ func GetClusterRoleBindings(clusterRoleName string) ([]*rbacv1.ClusterRoleBindin roleBindings, err := clusterRoleBindingLister.List(labels.Everything()) if err != nil { - glog.Errorln("get cluster role bindings", err) + klog.Errorln("get cluster role bindings", err) return nil, err } @@ -337,7 +337,7 @@ func ListClusterRoleUsers(clusterRoleName string, conditions *params.Conditions, continue } if err != nil { - glog.Errorln("get user info", subject.Name, err) + klog.Errorln("get user info", subject.Name, err) return nil, err } users = append(users, user) @@ -431,7 +431,7 @@ func ListClusterRoles(conditions *params.Conditions, orderBy string, reverse boo func NamespaceUsers(namespaceName string) ([]*models.User, error) { namespace, err := informers.SharedInformerFactory().Core().V1().Namespaces().Lister().Get(namespaceName) if err != nil { - glog.Errorln("get namespace", namespaceName, err) + klog.Errorln("get namespace", namespaceName, err) return nil, err } roleBindings, err := GetRoleBindings(namespaceName, "") @@ -540,7 +540,7 @@ func GetClusterRoleSimpleRules(clusterRoleName string) ([]models.SimpleRule, err clusterRole, err := clusterRoleLister.Get(clusterRoleName) if err != nil { - glog.Errorln("get cluster role", clusterRoleName, clusterRoleName) + klog.Errorln("get cluster role", clusterRoleName, clusterRoleName) return nil, err } @@ -576,7 +576,7 @@ func GetRoleSimpleRules(namespace string, roleName string) ([]models.SimpleRule, role, err := roleLister.Roles(namespace).Get(roleName) if err != nil { - glog.Errorln("get role", namespace, roleName, err) + klog.Errorln("get role", namespace, roleName, err) return nil, err } @@ -624,20 +624,20 @@ func CreateClusterRoleBinding(username string, clusterRoleName string) error { _, err := clusterRoleLister.Get(clusterRoleName) if err != nil { - glog.Errorln("get cluster role", clusterRoleName, err) + klog.Errorln("get cluster role", clusterRoleName, err) return err } if clusterRoleName == constants.ClusterAdmin { // create kubectl pod if cluster role is cluster-admin if err := kubectl.CreateKubectlDeploy(username); err != nil { - glog.Error("create user terminal pod failed", username, err) + klog.Error("create user terminal pod failed", username, err) } } else { // delete kubectl pod if cluster role is not cluster-admin, whether it exists or not if err := kubectl.DelKubectlDeploy(username); err != nil { - glog.Error("delete user terminal pod failed", username, err) + klog.Error("delete user terminal pod failed", username, err) } } @@ -652,7 +652,7 @@ func CreateClusterRoleBinding(username string, clusterRoleName string) error { if apierrors.IsNotFound(err) { _, err = client.ClientSets().K8s().Kubernetes().RbacV1().ClusterRoleBindings().Create(clusterRoleBinding) if err != nil { - glog.Errorln("create cluster role binding", err) + klog.Errorln("create cluster role binding", err) return err } return nil @@ -667,7 +667,7 @@ func CreateClusterRoleBinding(username string, clusterRoleName string) error { deleteOption := &metav1.DeleteOptions{PropagationPolicy: &deletePolicy, GracePeriodSeconds: &gracePeriodSeconds} err = client.ClientSets().K8s().Kubernetes().RbacV1().ClusterRoleBindings().Delete(found.Name, deleteOption) if err != nil { - glog.Errorln("delete cluster role binding", err) + klog.Errorln("delete cluster role binding", err) return err } maxRetries := 3 @@ -678,7 +678,7 @@ func CreateClusterRoleBinding(username string, clusterRoleName string) error { } time.Sleep(300 * time.Millisecond) } - glog.Errorln("create cluster role binding", err) + klog.Errorln("create cluster role binding", err) return err } @@ -686,7 +686,7 @@ func CreateClusterRoleBinding(username string, clusterRoleName string) error { found.Subjects = clusterRoleBinding.Subjects _, err = client.ClientSets().K8s().Kubernetes().RbacV1().ClusterRoleBindings().Update(found) if err != nil { - glog.Errorln("update cluster role binding", err) + klog.Errorln("update cluster role binding", err) return err } } diff --git a/pkg/models/iam/im.go b/pkg/models/iam/im.go index fb87586a5..6e4c8c9c8 100644 --- a/pkg/models/iam/im.go +++ b/pkg/models/iam/im.go @@ -30,7 +30,7 @@ import ( "kubesphere.io/kubesphere/pkg/models/devops" "kubesphere.io/kubesphere/pkg/models/kubeconfig" "kubesphere.io/kubesphere/pkg/models/kubectl" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" clientset "kubesphere.io/kubesphere/pkg/simple/client" "kubesphere.io/kubesphere/pkg/utils/k8sutil" "kubesphere.io/kubesphere/pkg/utils/sliceutil" diff --git a/pkg/models/kubeconfig/kubeconfig.go b/pkg/models/kubeconfig/kubeconfig.go index 5babbe346..e1a2bd8ed 100644 --- a/pkg/models/kubeconfig/kubeconfig.go +++ b/pkg/models/kubeconfig/kubeconfig.go @@ -29,12 +29,12 @@ import ( "fmt" "gopkg.in/yaml.v2" "io/ioutil" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/simple/client" "math/big" rd "math/rand" "time" - "github.com/golang/glog" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/api/errors" @@ -111,7 +111,7 @@ func createCRT(RootCa *x509.Certificate, RootKey *rsa.PrivateKey, info CertInfor Crt := newCertificate(info) Key, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { - glog.Error(err) + klog.Error(err) return nil, nil, err } @@ -120,13 +120,13 @@ func createCRT(RootCa *x509.Certificate, RootKey *rsa.PrivateKey, info CertInfor buf, err = x509.CreateCertificate(rand.Reader, Crt, RootCa, &Key.PublicKey, RootKey) if err != nil { - glog.Error(err) + klog.Error(err) return nil, nil, err } pem.Encode(&cert, &pem.Block{Type: "CERTIFICATE", Bytes: buf}) if err != nil { - glog.Error(err) + klog.Error(err) return nil, nil, err } @@ -139,7 +139,7 @@ func createCRT(RootCa *x509.Certificate, RootKey *rsa.PrivateKey, info CertInfor func Parse(crtPath, keyPath string) (rootcertificate *x509.Certificate, rootPrivateKey *rsa.PrivateKey, err error) { rootcertificate, err = parseCrt(crtPath) if err != nil { - glog.Error(err) + klog.Error(err) return nil, nil, err } rootPrivateKey, err = parseKey(keyPath) @@ -149,7 +149,7 @@ func Parse(crtPath, keyPath string) (rootcertificate *x509.Certificate, rootPriv func parseCrt(path string) (*x509.Certificate, error) { buf, err := ioutil.ReadFile(path) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } p := &pem.Block{} @@ -160,7 +160,7 @@ func parseCrt(path string) (*x509.Certificate, error) { func parseKey(path string) (*rsa.PrivateKey, error) { buf, err := ioutil.ReadFile(path) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } p, buf := pem.Decode(buf) @@ -195,12 +195,12 @@ func generateCaAndKey(user, caPath, keyPath string) (string, string, error) { crt, pri, err := Parse(caPath, keyPath) if err != nil { - glog.Error(err) + klog.Error(err) return "", "", err } cert, key, err := createCRT(crt, pri, crtInfo) if err != nil { - glog.Error(err) + klog.Error(err) return "", "", err } @@ -213,7 +213,7 @@ func createKubeConfig(username string) (string, error) { tmpKubeConfig := kubeConfig{ApiVersion: "v1", Kind: "Config"} serverCa, err := ioutil.ReadFile(caPath) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return "", err } base64ServerCa := base64.StdEncoding.EncodeToString(serverCa) @@ -251,7 +251,7 @@ func CreateKubeConfig(username string) error { if errors.IsNotFound(err) { config, err := createKubeConfig(username) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } @@ -259,7 +259,7 @@ func CreateKubeConfig(username string) error { configMap := v1.ConfigMap{TypeMeta: metaV1.TypeMeta{Kind: "Configmap", APIVersion: "v1"}, ObjectMeta: metaV1.ObjectMeta{Name: configName}, Data: data} _, err = k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Create(&configMap) if err != nil && !errors.IsAlreadyExists(err) { - glog.Errorf("create username %s's kubeConfig failed, reason: %v", username, err) + klog.Errorf("create username %s's kubeConfig failed, reason: %v", username, err) return err } } @@ -273,7 +273,7 @@ func GetKubeConfig(username string) (string, error) { configName := fmt.Sprintf("kubeconfig-%s", username) configMap, err := k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Get(configName, metaV1.GetOptions{}) if err != nil { - glog.Errorf("cannot get username %s's kubeConfig, reason: %v", username, err) + klog.Errorf("cannot get username %s's kubeConfig, reason: %v", username, err) return "", err } @@ -281,7 +281,7 @@ func GetKubeConfig(username string) (string, error) { var kubeConfig kubeConfig err = yaml.Unmarshal([]byte(str), &kubeConfig) if err != nil { - glog.Error(err) + klog.Error(err) return "", err } masterURL := client.ClientSets().K8s().Master() @@ -291,7 +291,7 @@ func GetKubeConfig(username string) (string, error) { } data, err := yaml.Marshal(kubeConfig) if err != nil { - glog.Error(err) + klog.Error(err) return "", err } return string(data), nil @@ -308,7 +308,7 @@ func DelKubeConfig(username string) error { deletePolicy := metaV1.DeletePropagationBackground err = k8sClient.CoreV1().ConfigMaps(constants.KubeSphereControlNamespace).Delete(configName, &metaV1.DeleteOptions{PropagationPolicy: &deletePolicy}) if err != nil { - glog.Errorf("delete username %s's kubeConfig failed, reason: %v", username, err) + klog.Errorf("delete username %s's kubeConfig failed, reason: %v", username, err) return err } return nil diff --git a/pkg/models/kubectl/kubectl.go b/pkg/models/kubectl/kubectl.go index f6d3bfa1b..59352a488 100644 --- a/pkg/models/kubectl/kubectl.go +++ b/pkg/models/kubectl/kubectl.go @@ -20,12 +20,12 @@ package kubectl import ( "fmt" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/simple/client" "math/rand" "os" - "github.com/golang/glog" appsv1 "k8s.io/api/apps/v1" "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -53,7 +53,7 @@ func GetKubectlPod(username string) (models.PodInfo, error) { deployName := fmt.Sprintf("kubectl-%s", username) deploy, err := k8sClient.AppsV1().Deployments(namespace).Get(deployName, metav1.GetOptions{}) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return models.PodInfo{}, err } @@ -61,13 +61,13 @@ func GetKubectlPod(username string) (models.PodInfo, error) { labelSelector := labels.Set(selectors).AsSelector().String() podList, err := k8sClient.CoreV1().Pods(namespace).List(metav1.ListOptions{LabelSelector: labelSelector}) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return models.PodInfo{}, err } pod, err := selectCorrectPod(namespace, podList.Items) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return models.PodInfo{}, err } diff --git a/pkg/models/log/logcollector.go b/pkg/models/log/logcollector.go index dcfcb1952..09dfede63 100644 --- a/pkg/models/log/logcollector.go +++ b/pkg/models/log/logcollector.go @@ -19,8 +19,8 @@ package log import ( - "github.com/golang/glog" "k8s.io/apimachinery/pkg/labels" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/utils/stringutils" @@ -35,7 +35,7 @@ func MatchNamespace(nsFilter []string, nsQuery []string, wsFilter []string, wsQu nsLister := informers.SharedInformerFactory().Core().V1().Namespaces().Lister() nsList, err := nsLister.List(labels.Everything()) if err != nil { - glog.Errorf("failed to list namespace, error: %s", err) + klog.Errorf("failed to list namespace, error: %s", err) return true, nil } diff --git a/pkg/models/log/logcrd.go b/pkg/models/log/logcrd.go index 57f472388..4470fc169 100644 --- a/pkg/models/log/logcrd.go +++ b/pkg/models/log/logcrd.go @@ -18,7 +18,6 @@ package log import ( _ "github.com/go-sql-driver/mysql" - "github.com/golang/glog" "github.com/google/uuid" "github.com/json-iterator/go" corev1 "k8s.io/api/core/v1" @@ -26,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/informers" es "kubesphere.io/kubesphere/pkg/simple/client/elasticsearch" fb "kubesphere.io/kubesphere/pkg/simple/client/fluentbit" @@ -77,7 +77,7 @@ func FluentbitOutputInsert(output fb.OutputPlugin) *FluentbitOutputsResult { outputs, err := GetFluentbitOutputFromConfigMap() if err != nil { // If the ConfigMap doesn't exist, a new one will be created later - glog.Errorln(err) + klog.Errorln(err) } // When adding a new output for the first time, one should always set it enabled @@ -120,7 +120,7 @@ func FluentbitOutputUpdate(output fb.OutputPlugin, id string) *FluentbitOutputsR outputs, err := GetFluentbitOutputFromConfigMap() if err != nil { // If the ConfigMap doesn't exist, a new one will be created later - glog.Errorln(err) + klog.Errorln(err) } index := 0 @@ -228,21 +228,21 @@ func updateFluentbitOutputConfigMap(outputs []fb.OutputPlugin) error { var data string data, err := jsonIter.MarshalToString(outputs) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } // Update the ConfigMap config, err := rest.InClusterConfig() if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } // Creates the clientset clientset, err := kubernetes.NewForConfig(config) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } @@ -261,7 +261,7 @@ func updateFluentbitOutputConfigMap(outputs []fb.OutputPlugin) error { _, err = configMapClient.Create(newConfigMap) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } } else { @@ -270,7 +270,7 @@ func updateFluentbitOutputConfigMap(outputs []fb.OutputPlugin) error { configMap.Data = map[string]string{ConfigMapData: data} _, err = configMapClient.Update(configMap) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } } @@ -309,7 +309,7 @@ func syncFluentbitCRDOutputWithConfigMap(outputs []fb.OutputPlugin) error { crdcs, scheme, err := createCRDClientSet() if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } @@ -318,14 +318,14 @@ func syncFluentbitCRDOutputWithConfigMap(outputs []fb.OutputPlugin) error { fluentbit, err := crdclient.Get("fluent-bit") if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } fluentbit.Spec.Output = enabledOutputs _, err = crdclient.Update("fluent-bit", fluentbit) if err != nil { - glog.Errorln(err) + klog.Errorln(err) return err } diff --git a/pkg/models/metrics/metrics.go b/pkg/models/metrics/metrics.go index 1e49a4574..40f817de3 100644 --- a/pkg/models/metrics/metrics.go +++ b/pkg/models/metrics/metrics.go @@ -19,10 +19,8 @@ package metrics import ( - "github.com/golang/glog" "k8s.io/klog" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/simple/client/kubesphere" "net/url" "regexp" "runtime/debug" @@ -158,7 +156,7 @@ func getPodNameRegexInWorkload(res, filter string) string { var dat CommonMetricsResult jsonErr := jsonIter.Unmarshal(data, &dat) if jsonErr != nil { - glog.Errorln("json parse failed", jsonErr.Error(), res) + klog.Errorln("json parse failed", jsonErr.Error(), res) } var podNames []string @@ -183,7 +181,7 @@ func unifyMetricHistoryTimeRange(fmtMetrics *FormatedMetric) { defer func() { if err := recover(); err != nil { - glog.Errorln(err) + klog.Errorln(err) debug.PrintStack() } }() @@ -303,7 +301,7 @@ func GetNodeAddressInfo() *map[string][]v1.NodeAddress { nodes, err := nodeLister.List(labels.Everything()) if err != nil { - glog.Errorln(err.Error()) + klog.Errorln(err.Error()) } var nodeAddress = make(map[string][]v1.NodeAddress) @@ -405,7 +403,7 @@ func makeRequestParamString(rule string, paramValues url.Values) string { defer func() { if err := recover(); err != nil { - glog.Errorln(err) + klog.Errorln(err) debug.PrintStack() } }() @@ -509,7 +507,7 @@ func collectWorkspaceMetric(monitoringRequest *MonitoringRequestParams, ws strin var ch = make(chan *FormatedMetric, ChannelMaxCapacity) namespaceArray, err := workspaces.WorkspaceNamespaces(ws) if err != nil { - glog.Errorln(err) + klog.Errorln(err) } // add by namespace @@ -652,7 +650,7 @@ func GetWorkspaceLevelMetrics(monitoringRequest *MonitoringRequestParams) *Forma if monitoringRequest.WsName != "" { namespaceArray, err := workspaces.WorkspaceNamespaces(monitoringRequest.WsName) if err != nil { - glog.Errorln(err.Error()) + klog.Errorln(err.Error()) } namespaceArray = filterNamespace(monitoringRequest.ResourcesFilter, namespaceArray) @@ -1117,7 +1115,7 @@ func GetAllWorkspacesStatistics() *FormatedLevelMetric { go func() { orgNums, errOrg := workspaces.WorkspaceCount() if errOrg != nil { - glog.Errorln(errOrg.Error()) + klog.Errorln(errOrg.Error()) } orgResultItem = getSpecificMetricItem(timestamp, MetricNameWorkspaceAllOrganizationCount, WorkspaceResourceKindOrganization, orgNums, errOrg) wg.Done() @@ -1126,7 +1124,7 @@ func GetAllWorkspacesStatistics() *FormatedLevelMetric { go func() { devOpsProjectNums, errDevops := workspaces.GetAllDevOpsProjectsNums() if errDevops != nil { - glog.Errorln(errDevops.Error()) + klog.Errorln(errDevops.Error()) } devopsResultItem = getSpecificMetricItem(timestamp, MetricNameWorkspaceAllDevopsCount, WorkspaceResourceKindDevops, devOpsProjectNums, errDevops) wg.Done() @@ -1135,16 +1133,16 @@ func GetAllWorkspacesStatistics() *FormatedLevelMetric { go func() { projNums, errProj := workspaces.GetAllProjectNums() if errProj != nil { - glog.Errorln(errProj.Error()) + klog.Errorln(errProj.Error()) } workspaceProjResultItem = getSpecificMetricItem(timestamp, MetricNameWorkspaceAllProjectCount, WorkspaceResourceKindNamespace, projNums, errProj) wg.Done() }() go func() { - result, errAct := kubesphere.Client().ListUsers() + result, errAct := cs.ClientSets().KubeSphere().ListUsers() if errAct != nil { - glog.Errorln(errAct.Error()) + klog.Errorln(errAct.Error()) } accountResultItem = getSpecificMetricItem(timestamp, MetricNameWorkspaceAllAccountCount, WorkspaceResourceKindAccount, result.TotalCount, errAct) wg.Done() @@ -1178,7 +1176,7 @@ func MonitorOneWorkspaceStatistics(wsName string) *FormatedLevelMetric { namespaces, errNs := workspaces.WorkspaceNamespaces(wsName) if errNs != nil { - glog.Errorln(errNs.Error()) + klog.Errorln(errNs.Error()) } nsMetrics = getSpecificMetricItem(timestamp, MetricNameWorkspaceNamespaceCount, WorkspaceResourceKindNamespace, len(namespaces), errNs) wg.Done() @@ -1187,7 +1185,7 @@ func MonitorOneWorkspaceStatistics(wsName string) *FormatedLevelMetric { go func() { devOpsProjects, errDevOps := workspaces.GetDevOpsProjects(wsName) if errDevOps != nil { - glog.Errorln(errDevOps.Error()) + klog.Errorln(errDevOps.Error()) } // add devops metric devopsMetrics = getSpecificMetricItem(timestamp, MetricNameWorkspaceDevopsCount, WorkspaceResourceKindDevops, len(devOpsProjects), errDevOps) @@ -1197,7 +1195,7 @@ func MonitorOneWorkspaceStatistics(wsName string) *FormatedLevelMetric { go func() { count, errMemb := workspaces.WorkspaceUserCount(wsName) if errMemb != nil { - glog.Errorln(errMemb.Error()) + klog.Errorln(errMemb.Error()) } // add member metric memberMetrics = getSpecificMetricItem(timestamp, MetricNameWorkspaceMemberCount, WorkspaceResourceKindMember, count, errMemb) @@ -1207,7 +1205,7 @@ func MonitorOneWorkspaceStatistics(wsName string) *FormatedLevelMetric { go func() { roles, errRole := workspaces.GetOrgRoles(wsName) if errRole != nil { - glog.Errorln(errRole.Error()) + klog.Errorln(errRole.Error()) } // add role metric roleMetrics = getSpecificMetricItem(timestamp, MetricNameWorkspaceRoleCount, WorkspaceResourceKindRole, len(roles), errRole) diff --git a/pkg/models/metrics/util.go b/pkg/models/metrics/util.go index 250930f95..686201582 100644 --- a/pkg/models/metrics/util.go +++ b/pkg/models/metrics/util.go @@ -19,14 +19,13 @@ package metrics import ( + "k8s.io/klog" "math" "sort" "strconv" "unicode" "runtime/debug" - - "github.com/golang/glog" ) const ( @@ -55,7 +54,7 @@ func (wrapper FormatedMetricDataWrapper) Swap(i, j int) { func Sort(sortMetricName string, sortType string, rawMetrics *FormatedLevelMetric) (*FormatedLevelMetric, int) { defer func() { if err := recover(); err != nil { - glog.Errorln(err) + klog.Errorln(err) debug.PrintStack() } }() @@ -191,7 +190,7 @@ func Page(pageNum string, limitNum string, fmtLevelMetric *FormatedLevelMetric, if pageNum != "" { p, err := strconv.Atoi(pageNum) if err != nil { - glog.Errorln(err) + klog.Errorln(err) } else { if p > 0 { page = p @@ -207,7 +206,7 @@ func Page(pageNum string, limitNum string, fmtLevelMetric *FormatedLevelMetric, if limitNum != "" { l, err := strconv.Atoi(limitNum) if err != nil { - glog.Errorln(err) + klog.Errorln(err) } else { if l > 0 { limit = l @@ -254,7 +253,7 @@ func ReformatJson(metric string, metricsName string, needAddParams map[string]st err := jsonIter.Unmarshal([]byte(metric), &formatMetric) if err != nil { - glog.Errorln("Unmarshal metric json failed", err.Error(), metric) + klog.Errorln("Unmarshal metric json failed", err.Error(), metric) } if formatMetric.MetricName == "" { if metricsName != "" { diff --git a/pkg/models/nodes/nodes.go b/pkg/models/nodes/nodes.go index cd0b85ea7..b05a237c2 100644 --- a/pkg/models/nodes/nodes.go +++ b/pkg/models/nodes/nodes.go @@ -19,12 +19,12 @@ package nodes import ( "fmt" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/simple/client" "math" "strings" "time" - "github.com/golang/glog" appsv1 "k8s.io/api/apps/v1" "k8s.io/api/core/v1" policy "k8s.io/api/policy/v1beta1" @@ -47,11 +47,10 @@ func DrainNode(nodename string) (err error) { } data := []byte(" {\"spec\":{\"unschedulable\":true}}") - nodestatus, err := k8sclient.CoreV1().Nodes().Patch(nodename, types.StrategicMergePatchType, data) + _, err = k8sclient.CoreV1().Nodes().Patch(nodename, types.StrategicMergePatchType, data) if err != nil { return err } - glog.Info(nodestatus) donech := make(chan bool) errch := make(chan error) go drainEviction(nodename, donech, errch) @@ -74,7 +73,7 @@ func drainEviction(nodename string, donech chan bool, errch chan error) { options.FieldSelector = "spec.nodeName=" + nodename podList, err := k8sclient.CoreV1().Pods("").List(options) if err != nil { - glog.Fatal(err) + klog.Fatal(err) errch <- err } options.FieldSelector = "" @@ -82,7 +81,7 @@ func drainEviction(nodename string, donech chan bool, errch chan error) { if err != nil { - glog.Fatal(err) + klog.Fatal(err) errch <- err } @@ -114,7 +113,7 @@ func drainEviction(nodename string, donech chan bool, errch chan error) { if evicerr == nil { donech <- true } else { - glog.Fatal(evicerr) + klog.Fatal(evicerr) errch <- err } } @@ -197,7 +196,7 @@ func evictPods(pods []v1.Pod, GracePeriodSeconds int, getPodFn func(namespace, n } else if apierrors.IsNotFound(err) { count = 0 doneCh <- true - glog.Info(fmt.Sprintf("pod %s evict", pod.Name)) + klog.Info(fmt.Sprintf("pod %s evict", pod.Name)) return } else if apierrors.IsTooManyRequests(err) { count = 0 @@ -213,7 +212,7 @@ func evictPods(pods []v1.Pod, GracePeriodSeconds int, getPodFn func(namespace, n _, err = waitForDelete(podArray, time.Second, time.Duration(math.MaxInt64), getPodFn) if err == nil { doneCh <- true - glog.Info(fmt.Sprintf("pod %s delete", pod.Name)) + klog.Info(fmt.Sprintf("pod %s delete", pod.Name)) } else { errCh <- fmt.Errorf("error when waiting for pod %q terminating: %v", pod.Name, err) } diff --git a/pkg/models/quotas/quotas.go b/pkg/models/quotas/quotas.go index d85686a33..c032b567d 100644 --- a/pkg/models/quotas/quotas.go +++ b/pkg/models/quotas/quotas.go @@ -19,14 +19,14 @@ package quotas import ( - "github.com/golang/glog" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/labels" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/resources" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" ) const ( @@ -76,7 +76,7 @@ func getUsage(namespace, resource string) (int, error) { } if err != nil { - glog.Error(err) + klog.Error(err) return 0, err } @@ -105,7 +105,7 @@ func GetClusterQuotas() (*models.ResourceQuota, error) { func GetNamespaceQuotas(namespace string) (*NamespacedResourceQuota, error) { quota, err := getNamespaceResourceQuota(namespace) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } if quota == nil { @@ -132,7 +132,7 @@ func GetNamespaceQuotas(namespace string) (*NamespacedResourceQuota, error) { if _, ok := quota.Used[v1.ResourceName(key)]; !ok { used, err := getUsage(namespace, val) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -170,7 +170,7 @@ func getNamespaceResourceQuota(namespace string) (*v1.ResourceQuotaStatus, error resourceQuotaLister := informers.SharedInformerFactory().Core().V1().ResourceQuotas().Lister() quotaList, err := resourceQuotaLister.ResourceQuotas(namespace).List(labels.Everything()) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } else if len(quotaList) == 0 { return nil, nil diff --git a/pkg/models/registries/registries.go b/pkg/models/registries/registries.go index f80ed43d4..6fbf5a041 100644 --- a/pkg/models/registries/registries.go +++ b/pkg/models/registries/registries.go @@ -24,8 +24,8 @@ import ( "fmt" "github.com/docker/docker/api/types" "github.com/docker/docker/client" - "github.com/golang/glog" corev1 "k8s.io/api/core/v1" + "k8s.io/klog" log "k8s.io/klog" "kubesphere.io/kubesphere/pkg/informers" ) @@ -58,7 +58,7 @@ func RegistryVerify(authInfo AuthInfo) error { cli, err := client.NewClientWithOpts(client.WithAPIVersionNegotiation()) if err != nil { - glog.Error(err) + klog.Error(err) } config := types.AuthConfig{ diff --git a/pkg/models/resources/clusterroles.go b/pkg/models/resources/clusterroles.go index f0eade05f..09078dec9 100644 --- a/pkg/models/resources/clusterroles.go +++ b/pkg/models/resources/clusterroles.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/k8sutil" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" diff --git a/pkg/models/resources/configmaps.go b/pkg/models/resources/configmaps.go index 5f76bce07..312d989ab 100644 --- a/pkg/models/resources/configmaps.go +++ b/pkg/models/resources/configmaps.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/cronjobs.go b/pkg/models/resources/cronjobs.go index 5092cd551..8a61a776b 100644 --- a/pkg/models/resources/cronjobs.go +++ b/pkg/models/resources/cronjobs.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/daemonsets.go b/pkg/models/resources/daemonsets.go index b8e93311c..9ae1eeef4 100644 --- a/pkg/models/resources/daemonsets.go +++ b/pkg/models/resources/daemonsets.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/deployments.go b/pkg/models/resources/deployments.go index 0feaf68b2..4793802fe 100644 --- a/pkg/models/resources/deployments.go +++ b/pkg/models/resources/deployments.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/extraannotations.go b/pkg/models/resources/extraannotations.go index 54362879c..711c6602d 100644 --- a/pkg/models/resources/extraannotations.go +++ b/pkg/models/resources/extraannotations.go @@ -18,10 +18,10 @@ package resources import ( - "github.com/golang/glog" corev1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/informers" "strconv" ) @@ -46,7 +46,7 @@ func (i extraAnnotationInjector) injectStorageClass(item *storagev1.StorageClass count, err := countPvcByStorageClass(item.Name) if err != nil { - glog.Errorf("inject annotation failed %+v", err) + klog.Errorf("inject annotation failed %+v", err) return item } @@ -65,7 +65,7 @@ func (i extraAnnotationInjector) injectPersistentVolumeClaim(item *corev1.Persis podLister := informers.SharedInformerFactory().Core().V1().Pods().Lister() pods, err := podLister.Pods(item.Namespace).List(labels.Everything()) if err != nil { - glog.Errorf("inject annotation failed %+v", err) + klog.Errorf("inject annotation failed %+v", err) return item } diff --git a/pkg/models/resources/horizontalpodautoscalers.go b/pkg/models/resources/horizontalpodautoscalers.go index b6fce14ce..1b64656d2 100644 --- a/pkg/models/resources/horizontalpodautoscalers.go +++ b/pkg/models/resources/horizontalpodautoscalers.go @@ -21,7 +21,7 @@ import ( autoscalingv2beta2 "k8s.io/api/autoscaling/v2beta2" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/ingresses.go b/pkg/models/resources/ingresses.go index 71211eeb8..28ba94279 100644 --- a/pkg/models/resources/ingresses.go +++ b/pkg/models/resources/ingresses.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/jobs.go b/pkg/models/resources/jobs.go index 050a1f5e2..d9585f20c 100644 --- a/pkg/models/resources/jobs.go +++ b/pkg/models/resources/jobs.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/k8sutil" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" diff --git a/pkg/models/resources/namespaces.go b/pkg/models/resources/namespaces.go index 0007c2306..1ba4e8670 100644 --- a/pkg/models/resources/namespaces.go +++ b/pkg/models/resources/namespaces.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/nodes.go b/pkg/models/resources/nodes.go index ba3673af7..b7d992881 100644 --- a/pkg/models/resources/nodes.go +++ b/pkg/models/resources/nodes.go @@ -21,7 +21,7 @@ import ( "fmt" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/persistentvolumeclaims.go b/pkg/models/resources/persistentvolumeclaims.go index 379b36073..bdbdeaec2 100644 --- a/pkg/models/resources/persistentvolumeclaims.go +++ b/pkg/models/resources/persistentvolumeclaims.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/pods.go b/pkg/models/resources/pods.go index 7670b3019..22299ec36 100644 --- a/pkg/models/resources/pods.go +++ b/pkg/models/resources/pods.go @@ -21,7 +21,7 @@ import ( appsv1 "k8s.io/api/apps/v1" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/resources.go b/pkg/models/resources/resources.go index 85b02dae0..85aa9d9cc 100644 --- a/pkg/models/resources/resources.go +++ b/pkg/models/resources/resources.go @@ -19,9 +19,9 @@ package resources import ( "fmt" - "github.com/golang/glog" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/models" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "strings" ) @@ -121,7 +121,7 @@ func GetResource(namespace, resource, name string) (interface{}, error) { if searcher, ok := resources[resource]; ok { resource, err := searcher.get(namespace, name) if err != nil { - glog.Errorln("get resource", namespace, resource, name, err) + klog.Errorln("get resource", namespace, resource, name, err) return nil, err } return resource, nil @@ -136,19 +136,19 @@ func ListResources(namespace, resource string, conditions *params.Conditions, or // none namespace resource if namespace != "" && sliceutil.HasString(clusterResources, resource) { - glog.Errorln("resources not found", resource) + klog.Errorln("resources not found", resource) return nil, fmt.Errorf("not found") } if searcher, ok := resources[resource]; ok { result, err = searcher.search(namespace, conditions, orderBy, reverse) } else { - glog.Errorln("resources not found", resource) + klog.Errorln("resources not found", resource) return nil, fmt.Errorf("not found") } if err != nil { - glog.Errorln("resources search", err) + klog.Errorln("resources search", err) return nil, err } diff --git a/pkg/models/resources/roles.go b/pkg/models/resources/roles.go index d203834a5..24786904c 100644 --- a/pkg/models/resources/roles.go +++ b/pkg/models/resources/roles.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/s2ibuilder.go b/pkg/models/resources/s2ibuilder.go index 58616d037..4710a6cdf 100644 --- a/pkg/models/resources/s2ibuilder.go +++ b/pkg/models/resources/s2ibuilder.go @@ -23,7 +23,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/s2ibuildertemplate.go b/pkg/models/resources/s2ibuildertemplate.go index dd9b57349..03c6b469c 100644 --- a/pkg/models/resources/s2ibuildertemplate.go +++ b/pkg/models/resources/s2ibuildertemplate.go @@ -21,7 +21,7 @@ import ( "github.com/kubesphere/s2ioperator/pkg/apis/devops/v1alpha1" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/s2irun.go b/pkg/models/resources/s2irun.go index d82cb5481..6d437e225 100644 --- a/pkg/models/resources/s2irun.go +++ b/pkg/models/resources/s2irun.go @@ -25,7 +25,7 @@ import ( "strings" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "k8s.io/apimachinery/pkg/labels" diff --git a/pkg/models/resources/secrets.go b/pkg/models/resources/secrets.go index a864c9fd1..2fe113af3 100644 --- a/pkg/models/resources/secrets.go +++ b/pkg/models/resources/secrets.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/services.go b/pkg/models/resources/services.go index 58878b777..f957d5d2b 100644 --- a/pkg/models/resources/services.go +++ b/pkg/models/resources/services.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/statefulsets.go b/pkg/models/resources/statefulsets.go index 6460ce0f1..fd915dcd6 100644 --- a/pkg/models/resources/statefulsets.go +++ b/pkg/models/resources/statefulsets.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/storageclasses.go b/pkg/models/resources/storageclasses.go index 978d3b5ef..248047978 100644 --- a/pkg/models/resources/storageclasses.go +++ b/pkg/models/resources/storageclasses.go @@ -20,7 +20,7 @@ package resources import ( "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/resources/workspaces.go b/pkg/models/resources/workspaces.go index e152ebdc6..43c92e0d3 100644 --- a/pkg/models/resources/workspaces.go +++ b/pkg/models/resources/workspaces.go @@ -21,7 +21,7 @@ import ( tenantv1alpha1 "kubesphere.io/kubesphere/pkg/apis/tenant/v1alpha1" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/revisions/revisions.go b/pkg/models/revisions/revisions.go index 3455ca492..d3d402ce4 100644 --- a/pkg/models/revisions/revisions.go +++ b/pkg/models/revisions/revisions.go @@ -20,8 +20,8 @@ package revisions import ( "fmt" + "k8s.io/klog" - "github.com/golang/glog" "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/labels" "kubesphere.io/kubesphere/pkg/informers" @@ -31,7 +31,7 @@ func GetDeployRevision(namespace, name, revision string) (*v1.ReplicaSet, error) deploymentLister := informers.SharedInformerFactory().Apps().V1().Deployments().Lister() deploy, err := deploymentLister.Deployments(namespace).Get(name) if err != nil { - glog.Errorf("get deployment %s failed, reason: %s", name, err) + klog.Errorf("get deployment %s failed, reason: %s", name, err) return nil, err } diff --git a/pkg/models/routers/routers.go b/pkg/models/routers/routers.go index 1a01b1aa4..f797c0640 100644 --- a/pkg/models/routers/routers.go +++ b/pkg/models/routers/routers.go @@ -20,10 +20,10 @@ package routers import ( "fmt" - "github.com/golang/glog" "io/ioutil" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/simple/client" "sort" @@ -58,7 +58,7 @@ func init() { routerTemplates = make(map[string]runtime.Object, 2) if err != nil { - glog.Error(err) + klog.Error(err) return } @@ -67,7 +67,7 @@ func init() { obj, _, err := decode([]byte(f), nil, nil) if err != nil { - glog.Error(err) + klog.Error(err) continue } @@ -93,7 +93,7 @@ func getMasterNodeIp() string { return strings.Compare(masters[i].Name, masters[j].Name) > 0 }) if err != nil { - glog.Error(err) + klog.Error(err) return "" } @@ -120,7 +120,7 @@ func addLoadBalancerIp(service *corev1.Service) { if service.Spec.Type != corev1.ServiceTypeLoadBalancer && len(service.Status.LoadBalancer.Ingress) == 0 { rip := getMasterNodeIp() if len(rip) == 0 { - glog.Info("can not get node ip") + klog.Info("can not get node ip") return } @@ -143,7 +143,7 @@ func GetAllRouters() ([]*corev1.Service, error) { } if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -167,7 +167,7 @@ func getRouterService(namespace string) (*corev1.Service, error) { if errors.IsNotFound(err) { return nil, errors.NewNotFound(corev1.Resource("service"), serviceName) } - glog.Error(err) + klog.Error(err) return nil, err } return service, nil @@ -180,7 +180,7 @@ func LoadYamls() ([]string, error) { files, err := ioutil.ReadDir(constants.IngressControllerFolder) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -191,7 +191,7 @@ func LoadYamls() ([]string, error) { content, err := ioutil.ReadFile(constants.IngressControllerFolder + "/" + file.Name()) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } else { yamls = append(yamls, string(content)) @@ -213,13 +213,13 @@ func CreateRouter(namespace string, routerType corev1.ServiceType, annotations m err := createOrUpdateRouterWorkload(namespace, routerType == corev1.ServiceTypeLoadBalancer, injectSidecar) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } router, err := createRouterService(namespace, routerType, annotations) if err != nil { - glog.Error(err) + klog.Error(err) _ = deleteRouterWorkload(namespace) return nil, err } @@ -233,13 +233,13 @@ func CreateRouter(namespace string, routerType corev1.ServiceType, annotations m func DeleteRouter(namespace string) (*corev1.Service, error) { err := deleteRouterWorkload(namespace) if err != nil { - glog.Error(err) + klog.Error(err) } router, err := deleteRouterService(namespace) if err != nil { - glog.Error(err) + klog.Error(err) return router, err } return router, nil @@ -249,7 +249,7 @@ func createRouterService(namespace string, routerType corev1.ServiceType, annota obj, ok := routerTemplates["SERVICE"] if !ok { - glog.Error("service template not loaded") + klog.Error("service template not loaded") return nil, fmt.Errorf("service template not loaded") } @@ -268,7 +268,7 @@ func createRouterService(namespace string, routerType corev1.ServiceType, annota service, err := k8sClient.CoreV1().Services(constants.IngressControllerNamespace).Create(service) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -281,7 +281,7 @@ func updateRouterService(namespace string, routerType corev1.ServiceType, annota service, err := getRouterService(namespace) if err != nil { - glog.Error(err, "get router failed") + klog.Error(err, "get router failed") return service, err } @@ -305,7 +305,7 @@ func deleteRouterService(namespace string) (*corev1.Service, error) { service, err := getRouterService(namespace) if err != nil { - glog.Error(err) + klog.Error(err) return service, err } @@ -317,7 +317,7 @@ func deleteRouterService(namespace string) (*corev1.Service, error) { err = k8sClient.CoreV1().Services(constants.IngressControllerNamespace).Delete(serviceName, &deleteOptions) if err != nil { - glog.Error(err) + klog.Error(err) return service, err } @@ -327,7 +327,7 @@ func deleteRouterService(namespace string) (*corev1.Service, error) { func createOrUpdateRouterWorkload(namespace string, publishService bool, servicemeshEnabled bool) error { obj, ok := routerTemplates["DEPLOYMENT"] if !ok { - glog.Error("Deployment template file not loaded") + klog.Error("Deployment template file not loaded") return fmt.Errorf("deployment template file not loaded") } @@ -395,7 +395,7 @@ func createOrUpdateRouterWorkload(namespace string, publishService bool, service } if err != nil { - glog.Error(err) + klog.Error(err) return err } @@ -410,7 +410,7 @@ func deleteRouterWorkload(namespace string) error { deploymentName := constants.IngressControllerPrefix + namespace err := k8sClient.ExtensionsV1beta1().Deployments(constants.IngressControllerNamespace).Delete(deploymentName, &deleteOptions) if err != nil { - glog.Error(err) + klog.Error(err) } // delete replicaset if there are any @@ -425,13 +425,13 @@ func deleteRouterWorkload(namespace string) error { replicaSets, err := replicaSetLister.ReplicaSets(constants.IngressControllerNamespace).List(selector) if err != nil { - glog.Error(err) + klog.Error(err) } for i := range replicaSets { err = k8sClient.AppsV1().ReplicaSets(constants.IngressControllerNamespace).Delete(replicaSets[i].Name, &deleteOptions) if err != nil { - glog.Error(err) + klog.Error(err) } } @@ -445,7 +445,7 @@ func UpdateRouter(namespace string, routerType corev1.ServiceType, annotations m router, err := getRouterService(namespace) if err != nil { - glog.Error(err) + klog.Error(err) return router, err } @@ -453,14 +453,14 @@ func UpdateRouter(namespace string, routerType corev1.ServiceType, annotations m err = createOrUpdateRouterWorkload(namespace, routerType == corev1.ServiceTypeLoadBalancer, enableServicemesh) if err != nil { - glog.Error(err) + klog.Error(err) return router, err } newRouter, err := updateRouterService(namespace, routerType, annotations) if err != nil { - glog.Error(err) + klog.Error(err) return newRouter, err } diff --git a/pkg/models/status/status.go b/pkg/models/status/status.go index 269726827..e92a11911 100644 --- a/pkg/models/status/status.go +++ b/pkg/models/status/status.go @@ -18,9 +18,9 @@ package status import ( - "github.com/golang/glog" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/models" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "strings" "kubesphere.io/kubesphere/pkg/models/resources" @@ -51,7 +51,7 @@ func GetNamespacesResourceStatus(namespace string) (*WorkLoadStatus, error) { notReadyList, err = resources.ListResources(namespace, resource, ¶ms.Conditions{Match: map[string]string{resources.Status: notReadyStatus}}, "", false, -1, 0) if err != nil { - glog.Errorf("list resources failed: %+v", err) + klog.Errorf("list resources failed: %+v", err) return nil, err } diff --git a/pkg/models/tenant/devops.go b/pkg/models/tenant/devops.go index 6a5c2afae..f63ae9859 100644 --- a/pkg/models/tenant/devops.go +++ b/pkg/models/tenant/devops.go @@ -22,12 +22,13 @@ import ( "github.com/emicklei/go-restful" "github.com/gocraft/dbr" "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" "kubesphere.io/kubesphere/pkg/db" "kubesphere.io/kubesphere/pkg/gojenkins" "kubesphere.io/kubesphere/pkg/gojenkins/utils" "kubesphere.io/kubesphere/pkg/models" "kubesphere.io/kubesphere/pkg/models/devops" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" cs "kubesphere.io/kubesphere/pkg/simple/client" "net/http" "sync" @@ -46,7 +47,7 @@ func ListDevopsProjects(workspace, username string, conditions *params.Condition return nil, err } - query := dbconn.Select(devops.GetColumnsFromStructWithPrefix(devops.DevOpsProjectTableName, devops.DevOpsProject{})...). + query := dbconn.Select(devops.GetColumnsFromStructWithPrefix(devops.DevOpsProjectTableName, v1alpha2.DevOpsProject{})...). From(devops.DevOpsProjectTableName) var sqconditions []dbr.Builder @@ -67,7 +68,7 @@ func ListDevopsProjects(workspace, username string, conditions *params.Condition if keyword := conditions.Match["keyword"]; keyword != "" { sqconditions = append(sqconditions, db.Like(devops.DevOpsProjectNameColumn, keyword)) } - projects := make([]*devops.DevOpsProject, 0) + projects := make([]*v1alpha2.DevOpsProject, 0) if len(sqconditions) > 0 { query.Where(db.And(sqconditions...)) @@ -115,7 +116,7 @@ func GetDevOpsProjectsCount(username string) (uint32, error) { return 0, err } - query := dbconn.Select(devops.GetColumnsFromStructWithPrefix(devops.DevOpsProjectTableName, devops.DevOpsProject{})...). + query := dbconn.Select(devops.GetColumnsFromStructWithPrefix(devops.DevOpsProjectTableName, v1alpha2.DevOpsProject{})...). From(devops.DevOpsProjectTableName) var sqconditions []dbr.Builder @@ -190,7 +191,7 @@ func DeleteDevOpsProject(projectId, username string) error { klog.Errorf("%+v", err) return restful.NewError(utils.GetJenkinsStatusCode(err), err.Error()) } - project := &devops.DevOpsProject{} + project := &v1alpha2.DevOpsProject{} err = devopsdb.Select(devops.DevOpsProjectColumns...). From(devops.DevOpsProjectTableName). Where(db.Eq(devops.DevOpsProjectIdColumn, projectId)). @@ -202,7 +203,7 @@ func DeleteDevOpsProject(projectId, username string) error { return nil } -func CreateDevopsProject(username string, workspace string, req *devops.DevOpsProject) (*devops.DevOpsProject, error) { +func CreateDevopsProject(username string, workspace string, req *v1alpha2.DevOpsProject) (*v1alpha2.DevOpsProject, error) { dp, err := cs.ClientSets().Devops() if err != nil { diff --git a/pkg/models/tenant/namespaces.go b/pkg/models/tenant/namespaces.go index 36ad27d30..5fb4a791e 100644 --- a/pkg/models/tenant/namespaces.go +++ b/pkg/models/tenant/namespaces.go @@ -18,15 +18,15 @@ package tenant import ( - "github.com/golang/glog" "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/models/iam" "kubesphere.io/kubesphere/pkg/models/resources" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" @@ -97,7 +97,7 @@ func (*namespaceSearcher) GetNamespaces(username string) ([]*v1.Namespace, error for _, role := range roles { namespace, err := namespaceLister.Get(role.Namespace) if err != nil { - glog.Errorf("get namespace failed: %+v", err) + klog.Errorf("get namespace failed: %+v", err) return nil, err } if !containsNamespace(namespaces, namespace) { diff --git a/pkg/models/tenant/tenant.go b/pkg/models/tenant/tenant.go index c867c1ac3..45ffd8e03 100644 --- a/pkg/models/tenant/tenant.go +++ b/pkg/models/tenant/tenant.go @@ -24,7 +24,7 @@ import ( "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/models" ws "kubesphere.io/kubesphere/pkg/models/workspaces" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/simple/client" "strconv" ) diff --git a/pkg/models/tenant/workspaces.go b/pkg/models/tenant/workspaces.go index e42271e73..fefc8d9e4 100644 --- a/pkg/models/tenant/workspaces.go +++ b/pkg/models/tenant/workspaces.go @@ -25,7 +25,7 @@ import ( "kubesphere.io/kubesphere/pkg/informers" "kubesphere.io/kubesphere/pkg/models/iam" "kubesphere.io/kubesphere/pkg/models/resources" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" "kubesphere.io/kubesphere/pkg/utils/sliceutil" "sort" "strings" diff --git a/pkg/models/terminal/terminal.go b/pkg/models/terminal/terminal.go index 978c3b113..05c026854 100644 --- a/pkg/models/terminal/terminal.go +++ b/pkg/models/terminal/terminal.go @@ -23,12 +23,12 @@ import ( "encoding/hex" "encoding/json" "fmt" - "github.com/golang/glog" "gopkg.in/igm/sockjs-go.v2/sockjs" "io" "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/tools/remotecommand" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/simple/client" ) @@ -141,7 +141,7 @@ var terminalSessions = make(map[string]TerminalSession) // handleTerminalSession is Called by net/http for any new /api/sockjs connections func HandleTerminalSession(session sockjs.Session) { - glog.Infof("handleTerminalSession, ID:%s", session.ID()) + klog.Infof("handleTerminalSession, ID:%s", session.ID()) var ( buf string err error @@ -151,22 +151,22 @@ func HandleTerminalSession(session sockjs.Session) { ) if buf, err = session.Recv(); err != nil { - glog.Errorf("handleTerminalSession: can't Recv: %v", err) + klog.Errorf("handleTerminalSession: can't Recv: %v", err) return } if err = json.Unmarshal([]byte(buf), &msg); err != nil { - glog.Errorf("handleTerminalSession: can't UnMarshal (%v): %s", err, buf) + klog.Errorf("handleTerminalSession: can't UnMarshal (%v): %s", err, buf) return } if msg.Op != "bind" { - glog.Errorf("handleTerminalSession: expected 'bind' message, got: %s", buf) + klog.Errorf("handleTerminalSession: expected 'bind' message, got: %s", buf) return } if terminalSession, ok = terminalSessions[msg.SessionID]; !ok { - glog.Errorf("handleTerminalSession: can't find session '%s'", msg.SessionID) + klog.Errorf("handleTerminalSession: can't find session '%s'", msg.SessionID) return } @@ -228,7 +228,7 @@ func genTerminalSessionId() (string, error) { } id := make([]byte, hex.EncodedLen(len(bytes))) hex.Encode(id, bytes) - glog.Infof("genTerminalSessionId, id:" + string(id)) + klog.Infof("genTerminalSessionId, id:" + string(id)) return string(id), nil } @@ -245,7 +245,7 @@ func isValidShell(validShells []string, shell string) bool { // WaitingForConnection is called from apihandler.handleAttach as a goroutine // Waits for the SockJS connection to be opened by the client the session to be bound in handleTerminalSession func WaitingForConnection(shell string, namespace, podName, containerName string, sessionId string) { - glog.Infof("WaitingForConnection, ID:%s", sessionId) + klog.Infof("WaitingForConnection, ID:%s", sessionId) select { case <-terminalSessions[sessionId].bound: close(terminalSessions[sessionId].bound) diff --git a/pkg/models/workloads/jobs.go b/pkg/models/workloads/jobs.go index 66f5e6b08..acc60f7aa 100644 --- a/pkg/models/workloads/jobs.go +++ b/pkg/models/workloads/jobs.go @@ -19,11 +19,11 @@ package workloads import ( "fmt" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/simple/client" "strings" "time" - "github.com/golang/glog" "k8s.io/api/batch/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -49,7 +49,7 @@ func JobReRun(namespace, jobName string) error { err = deleteJob(namespace, jobName) if err != nil { - glog.Errorf("failed to rerun job %s, reason: %s", jobName, err) + klog.Errorf("failed to rerun job %s, reason: %s", jobName, err) return fmt.Errorf("failed to rerun job %s", jobName) } @@ -63,7 +63,7 @@ func JobReRun(namespace, jobName string) error { } if err != nil { - glog.Errorf("failed to rerun job %s, reason: %s", jobName, err) + klog.Errorf("failed to rerun job %s, reason: %s", jobName, err) return fmt.Errorf("failed to rerun job %s", jobName) } diff --git a/pkg/models/workspaces/workspaces.go b/pkg/models/workspaces/workspaces.go index 4d2f97e71..c6d085e30 100644 --- a/pkg/models/workspaces/workspaces.go +++ b/pkg/models/workspaces/workspaces.go @@ -19,9 +19,8 @@ package workspaces import ( "fmt" - "github.com/golang/glog" - "github.com/kiali/kiali/log" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/db" "kubesphere.io/kubesphere/pkg/informers" @@ -29,7 +28,7 @@ import ( "kubesphere.io/kubesphere/pkg/models/devops" "kubesphere.io/kubesphere/pkg/models/iam" "kubesphere.io/kubesphere/pkg/models/resources" - "kubesphere.io/kubesphere/pkg/params" + "kubesphere.io/kubesphere/pkg/server/params" clientset "kubesphere.io/kubesphere/pkg/simple/client" "kubesphere.io/kubesphere/pkg/utils/k8sutil" "kubesphere.io/kubesphere/pkg/utils/sliceutil" @@ -95,7 +94,7 @@ func InviteUser(workspaceName string, user *models.User) error { workspaceRole, err := iam.GetUserWorkspaceRole(workspaceName, user.Username) if err != nil && !apierrors.IsNotFound(err) { - glog.Errorf("get workspace role failed: %+v", err) + klog.Errorf("get workspace role failed: %+v", err) return err } @@ -108,7 +107,7 @@ func InviteUser(workspaceName string, user *models.User) error { if currentWorkspaceRoleName != workspaceRoleName && currentWorkspaceRoleName != "" { err := DeleteWorkspaceRoleBinding(workspaceName, user.Username, workspaceRole.Annotations[constants.DisplayNameAnnotationKey]) if err != nil { - glog.Errorf("delete workspace role binding failed: %+v", err) + klog.Errorf("delete workspace role binding failed: %+v", err) return err } } else if currentWorkspaceRoleName != "" { @@ -135,7 +134,7 @@ func CreateWorkspaceRoleBinding(workspace, username string, role string) error { workspaceRoleBinding.Subjects = append(workspaceRoleBinding.Subjects, v1.Subject{APIGroup: "rbac.authorization.k8s.io", Kind: "User", Name: username}) _, err = clientset.ClientSets().K8s().Kubernetes().RbacV1().ClusterRoleBindings().Update(workspaceRoleBinding) if err != nil { - log.Errorf("update workspace role binding failed: %+v", err) + klog.Errorf("update workspace role binding failed: %+v", err) return err } } diff --git a/pkg/server/config/config.go b/pkg/server/config/config.go index cac0fb083..9fd4b57b2 100644 --- a/pkg/server/config/config.go +++ b/pkg/server/config/config.go @@ -9,6 +9,7 @@ import ( "kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/simple/client/devops" "kubesphere.io/kubesphere/pkg/simple/client/k8s" + "kubesphere.io/kubesphere/pkg/simple/client/kubesphere" "kubesphere.io/kubesphere/pkg/simple/client/ldap" "kubesphere.io/kubesphere/pkg/simple/client/mysql" "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" @@ -56,7 +57,11 @@ func InstallAPI(c *restful.Container) { ws.Route(ws.GET("/configz"). To(func(request *restful.Request, response *restful.Response) { - response.WriteAsJson(sharedConfig) + var conf = *sharedConfig + + conf.stripEmptyOptions() + + response.WriteAsJson(conf) }). Doc("Get system components configuration"). Produces(restful.MIME_JSON). @@ -84,10 +89,19 @@ func Load() error { } conf := &Config{} - if err := viper.Unmarshal(&conf); err != nil { + if err := viper.Unmarshal(conf); err != nil { klog.Error(fmt.Errorf("error unmarshal configuration %v", err)) return err } else { + // make sure kubesphere options always exists + if conf.KubeSphereOptions == nil { + conf.KubeSphereOptions = kubesphere.NewKubeSphereOptions() + } else { + ksOptions := kubesphere.NewKubeSphereOptions() + conf.KubeSphereOptions.ApplyTo(ksOptions) + conf.KubeSphereOptions = ksOptions + } + conf.Apply(shadowConfig) sharedConfig = conf } @@ -122,6 +136,7 @@ type Config struct { S3Options *s2is3.S3Options `json:"s3,omitempty" yaml:"s3,omitempty" mapstructure:"s3"` OpenPitrixOptions *openpitrix.OpenPitrixOptions `json:"openpitrix,omitempty" yaml:"openpitrix,omitempty" mapstructure:"openpitrix"` MonitoringOptions *prometheus.PrometheusOptions `json:"monitoring,omitempty" yaml:"monitoring,omitempty" mapstructure:"monitoring"` + KubeSphereOptions *kubesphere.KubeSphereOptions `json:"-" yaml:"kubesphere,omitempty" mapstructure:"kubesphere"` } func newConfig() *Config { @@ -136,6 +151,7 @@ func newConfig() *Config { S3Options: s2is3.NewS3Options(), OpenPitrixOptions: openpitrix.NewOpenPitrixOptions(), MonitoringOptions: prometheus.NewPrometheusOptions(), + KubeSphereOptions: kubesphere.NewKubeSphereOptions(), } } @@ -146,6 +162,10 @@ func Get() *Config { func (c *Config) Apply(conf *Config) { shadowConfig = conf + if conf.KubeSphereOptions != nil { + conf.KubeSphereOptions.ApplyTo(c.KubeSphereOptions) + } + if conf.MonitoringOptions != nil { conf.MonitoringOptions.ApplyTo(c.MonitoringOptions) } @@ -185,3 +205,45 @@ func (c *Config) Apply(conf *Config) { conf.MySQLOptions.ApplyTo(c.MySQLOptions) } } + +func (c *Config) stripEmptyOptions() { + if c.MySQLOptions != nil && c.MySQLOptions.Host == "" { + c.MySQLOptions = nil + } + + if c.RedisOptions != nil && c.RedisOptions.Host == "" { + c.RedisOptions = nil + } + + if c.DevopsOptions != nil && c.DevopsOptions.Host == "" { + c.DevopsOptions = nil + } + + if c.MonitoringOptions != nil && c.MonitoringOptions.Endpoint == "" && + c.MonitoringOptions.SecondaryEndpoint == "" { + c.MonitoringOptions = nil + } + + if c.SonarQubeOptions != nil && c.SonarQubeOptions.Host == "" { + c.SonarQubeOptions = nil + } + + if c.LdapOptions != nil && c.LdapOptions.Host == "" { + c.LdapOptions = nil + } + + if c.OpenPitrixOptions != nil && c.OpenPitrixOptions.APIServer == "" { + c.OpenPitrixOptions = nil + } + + if c.ServiceMeshOptions != nil && c.ServiceMeshOptions.IstioPilotHost == "" && + c.ServiceMeshOptions.ServicemeshPrometheusHost == "" && + c.ServiceMeshOptions.JaegerQueryHost == "" { + c.ServiceMeshOptions = nil + } + + if c.S3Options != nil && c.S3Options.Endpoint == "" { + c.S3Options = nil + } + +} diff --git a/pkg/server/config/config_test.go b/pkg/server/config/config_test.go index 61d36d784..89e84cfa6 100644 --- a/pkg/server/config/config_test.go +++ b/pkg/server/config/config_test.go @@ -6,6 +6,7 @@ import ( "io/ioutil" "kubesphere.io/kubesphere/pkg/simple/client/devops" "kubesphere.io/kubesphere/pkg/simple/client/k8s" + "kubesphere.io/kubesphere/pkg/simple/client/kubesphere" "kubesphere.io/kubesphere/pkg/simple/client/ldap" "kubesphere.io/kubesphere/pkg/simple/client/mysql" "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" @@ -14,8 +15,8 @@ import ( "kubesphere.io/kubesphere/pkg/simple/client/s2is3" "kubesphere.io/kubesphere/pkg/simple/client/servicemesh" "kubesphere.io/kubesphere/pkg/simple/client/sonarqube" + "kubesphere.io/kubesphere/pkg/utils/reflectutils" "os" - "reflect" "testing" "time" ) @@ -82,6 +83,10 @@ func newTestConfig() *Config { Endpoint: "http://prometheus.kubesphere-monitoring-system.svc", SecondaryEndpoint: "http://prometheus.kubesphere-monitoring-system.svc", }, + KubeSphereOptions: &kubesphere.KubeSphereOptions{ + APIServer: "http://ks-apiserver.kubesphere-system.svc", + AccountServer: "http://ks-account.kubesphere-system.svc", + }, } return conf } @@ -115,6 +120,7 @@ func cleanTestConfig(t *testing.T) { func TestGet(t *testing.T) { conf := newTestConfig() saveTestConfig(t, conf) + //defer cleanTestConfig(t) err := Load() if err != nil { @@ -122,8 +128,49 @@ func TestGet(t *testing.T) { } conf2 := Get() - if !reflect.DeepEqual(conf2, conf) { - t.Fatalf("Get %v\n expected %v\n", conf2, conf) + if diff := reflectutils.Equal(conf, conf2); diff != nil { + t.Fatal(diff) } - cleanTestConfig(t) +} + +func TestKubeSphereOptions(t *testing.T) { + conf := newTestConfig() + + t.Run("save nil kubesphere options", func(t *testing.T) { + savedConf := *conf + savedConf.KubeSphereOptions = nil + saveTestConfig(t, &savedConf) + defer cleanTestConfig(t) + + err := Load() + if err != nil { + t.Fatal(err) + } + loadedConf := Get() + + if diff := reflectutils.Equal(conf, loadedConf); diff != nil { + t.Fatal(diff) + } + }) + + t.Run("save partially kubesphere options", func(t *testing.T) { + savedConf := *conf + savedConf.KubeSphereOptions.APIServer = "http://example.com" + savedConf.KubeSphereOptions.AccountServer = "" + + saveTestConfig(t, &savedConf) + defer cleanTestConfig(t) + + err := Load() + if err != nil { + t.Fatal(err) + } + loadedConf := Get() + + savedConf.KubeSphereOptions.AccountServer = "http://ks-account.kubesphere-system.svc" + + if diff := reflectutils.Equal(&savedConf, loadedConf); diff != nil { + t.Fatal(diff) + } + }) } diff --git a/pkg/errors/errors.go b/pkg/server/errors/errors.go similarity index 100% rename from pkg/errors/errors.go rename to pkg/server/errors/errors.go diff --git a/pkg/filter/logging.go b/pkg/server/filter/logging.go similarity index 100% rename from pkg/filter/logging.go rename to pkg/server/filter/logging.go diff --git a/pkg/options/options.go b/pkg/server/options/options.go similarity index 100% rename from pkg/options/options.go rename to pkg/server/options/options.go diff --git a/pkg/params/params.go b/pkg/server/params/params.go similarity index 100% rename from pkg/params/params.go rename to pkg/server/params/params.go diff --git a/pkg/server/server.go b/pkg/server/server.go index f79f7bd7d..d6a1aaea3 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -3,7 +3,7 @@ package server import ( "bytes" "fmt" - "github.com/golang/glog" + "k8s.io/klog" "net/http" "runtime" ) @@ -18,7 +18,7 @@ func LogStackOnRecover(panicReason interface{}, httpWriter http.ResponseWriter) } buffer.WriteString(fmt.Sprintf(" %s:%d\r\n", file, line)) } - glog.Error(buffer.String()) + klog.Error(buffer.String()) httpWriter.WriteHeader(http.StatusInternalServerError) httpWriter.Write([]byte("recover from panic situation")) } diff --git a/pkg/simple/client/elasticsearch/esclient.go b/pkg/simple/client/elasticsearch/esclient.go index a6d527e18..2bf2218bc 100644 --- a/pkg/simple/client/elasticsearch/esclient.go +++ b/pkg/simple/client/elasticsearch/esclient.go @@ -15,7 +15,7 @@ package esclient import ( "encoding/json" "fmt" - "github.com/golang/glog" + "k8s.io/klog" "net/http" "strconv" "strings" @@ -64,7 +64,7 @@ func (cfg *Config) WriteESConfigs() { config = cfg if err := detectVersionMajor(config); err != nil { - glog.Errorln(err) + klog.Errorln(err) client = nil return } @@ -250,7 +250,7 @@ func parseQueryResult(operation int, param QueryParameters, body []byte) *QueryR var response Response err := jsonIter.Unmarshal(body, &response) if err != nil { - glog.Errorln(err) + klog.Errorln(err) queryResult.Status = http.StatusInternalServerError queryResult.Error = err.Error() return &queryResult @@ -261,13 +261,13 @@ func parseQueryResult(operation int, param QueryParameters, body []byte) *QueryR err := "The query failed with no response" queryResult.Status = response.Status queryResult.Error = err - glog.Errorln(err) + klog.Errorln(err) return &queryResult } if response.Shards.Successful != response.Shards.Total { //Elastic some shards error - glog.Warningf("Not all shards succeed, successful shards: %d, skipped shards: %d, failed shards: %d", + klog.Warningf("Not all shards succeed, successful shards: %d, skipped shards: %d, failed shards: %d", response.Shards.Successful, response.Shards.Skipped, response.Shards.Failed) } @@ -294,7 +294,7 @@ func parseQueryResult(operation int, param QueryParameters, body []byte) *QueryR var statisticsResponse StatisticsResponseAggregations err := jsonIter.Unmarshal(response.Aggregations, &statisticsResponse) if err != nil && response.Aggregations != nil { - glog.Errorln(err) + klog.Errorln(err) queryResult.Status = http.StatusInternalServerError queryResult.Error = err.Error() return &queryResult @@ -311,7 +311,7 @@ func parseQueryResult(operation int, param QueryParameters, body []byte) *QueryR var histogramAggregations HistogramAggregations err := jsonIter.Unmarshal(response.Aggregations, &histogramAggregations) if err != nil && response.Aggregations != nil { - glog.Errorln(err) + klog.Errorln(err) queryResult.Status = http.StatusInternalServerError queryResult.Error = err.Error() return &queryResult @@ -361,7 +361,7 @@ func Query(param QueryParameters) *QueryResult { operation, query, err := createQueryRequest(param) if err != nil { - glog.Errorln(err) + klog.Errorln(err) queryResult.Status = http.StatusInternalServerError queryResult.Error = err.Error() return queryResult @@ -369,7 +369,7 @@ func Query(param QueryParameters) *QueryResult { body, err := client.Search(query) if err != nil { - glog.Errorln(err) + klog.Errorln(err) queryResult = new(QueryResult) queryResult.Status = http.StatusInternalServerError queryResult.Error = err.Error() diff --git a/pkg/simple/client/factory.go b/pkg/simple/client/factory.go index 598b94cbb..165b607d5 100644 --- a/pkg/simple/client/factory.go +++ b/pkg/simple/client/factory.go @@ -5,6 +5,7 @@ import ( goredis "github.com/go-redis/redis" "kubesphere.io/kubesphere/pkg/simple/client/devops" "kubesphere.io/kubesphere/pkg/simple/client/k8s" + "kubesphere.io/kubesphere/pkg/simple/client/kubesphere" "kubesphere.io/kubesphere/pkg/simple/client/ldap" "kubesphere.io/kubesphere/pkg/simple/client/mysql" "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" @@ -33,6 +34,7 @@ type ClientSetOptions struct { s3Options *s2is3.S3Options openPitrixOptions *openpitrix.OpenPitrixOptions prometheusOptions *prometheus.PrometheusOptions + kubesphereOptions *kubesphere.KubeSphereOptions } func NewClientSetOptions() *ClientSetOptions { @@ -46,6 +48,7 @@ func NewClientSetOptions() *ClientSetOptions { s3Options: s2is3.NewS3Options(), openPitrixOptions: openpitrix.NewOpenPitrixOptions(), prometheusOptions: prometheus.NewPrometheusOptions(), + kubesphereOptions: kubesphere.NewKubeSphereOptions(), } } @@ -94,6 +97,11 @@ func (c *ClientSetOptions) SetSonarQubeOptions(options *sonarqube.SonarQubeOptio return c } +func (c *ClientSetOptions) SetKubeSphereOptions(options *kubesphere.KubeSphereOptions) *ClientSetOptions { + c.kubesphereOptions = options + return c +} + // ClientSet provide best of effort service to initialize clients, // but there is no guarantee to return a valid client instance, // so do validity check before use @@ -111,6 +119,7 @@ type ClientSet struct { s3Client *s2is3.S3Client prometheusClient *prometheus.PrometheusClient openpitrixClient *openpitrix.OpenPitrixClient + kubesphereClient *kubesphere.KubeSphereClient } var mutex sync.Mutex @@ -129,6 +138,10 @@ func NewClientSetFactory(c *ClientSetOptions, stopCh <-chan struct{}) *ClientSet sharedClientSet.k8sClient = k8s.NewKubernetesClientOrDie(c.kubernetesOptions) } + if c.kubesphereOptions != nil { + sharedClientSet.kubesphereClient = kubesphere.NewKubeSphereClient(c.kubesphereOptions) + } + return sharedClientSet } @@ -318,3 +331,7 @@ func (cs *ClientSet) Prometheus() (*prometheus.PrometheusClient, error) { return cs.prometheusClient, nil } } + +func (cs *ClientSet) KubeSphere() *kubesphere.KubeSphereClient { + return cs.kubesphereClient +} diff --git a/pkg/simple/client/kubesphere/kubesphereclient.go b/pkg/simple/client/kubesphere/kubesphere.go similarity index 68% rename from pkg/simple/client/kubesphere/kubesphereclient.go rename to pkg/simple/client/kubesphere/kubesphere.go index f116f3201..c7024e77f 100644 --- a/pkg/simple/client/kubesphere/kubesphereclient.go +++ b/pkg/simple/client/kubesphere/kubesphere.go @@ -20,23 +20,14 @@ package kubesphere import ( "bytes" "encoding/json" - "flag" "fmt" - "github.com/golang/glog" "io/ioutil" + "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/api/devops/v1alpha2" "kubesphere.io/kubesphere/pkg/constants" "kubesphere.io/kubesphere/pkg/models" - "kubesphere.io/kubesphere/pkg/models/devops" "net/http" "strings" - "sync" -) - -var ( - accountAPIServer string - ksAPIServer string - once sync.Once - c client ) type Interface interface { @@ -45,24 +36,23 @@ type Interface interface { DescribeGroup(name string) (*models.Group, error) DeleteGroup(name string) error ListUsers() (*models.PageableResponse, error) - ListWorkspaceDevOpsProjects(workspace string) (*devops.PageableDevOpsProject, error) + ListWorkspaceDevOpsProjects(workspace string) (*v1alpha2.PageableDevOpsProject, error) DeleteWorkspaceDevOpsProjects(workspace, devops string) error } -type client struct { - client http.Client +type KubeSphereClient struct { + client *http.Client + + apiServer string + accountServer string } -func init() { - flag.StringVar(&accountAPIServer, "ks-account-api-server", "http://ks-account.kubesphere-system.svc", "kubesphere account api server") - flag.StringVar(&ksAPIServer, "ks-api-server", "http://ks-apiserver.kubesphere-system.svc", "kubesphere api server") -} - -func Client() Interface { - once.Do(func() { - c = client{client: http.Client{}} - }) - return c +func NewKubeSphereClient(options *KubeSphereOptions) *KubeSphereClient { + return &KubeSphereClient{ + client: &http.Client{}, + apiServer: options.APIServer, + accountServer: options.AccountServer, + } } type Error struct { @@ -74,16 +64,16 @@ func (e Error) Error() string { return fmt.Sprintf("status: %d,message: %s", e.status, e.message) } -func (c client) CreateGroup(group *models.Group) (*models.Group, error) { +func (c *KubeSphereClient) CreateGroup(group *models.Group) (*models.Group, error) { data, err := json.Marshal(group) if err != nil { return nil, err } - req, err := http.NewRequest(http.MethodPost, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups", accountAPIServer), bytes.NewReader(data)) + req, err := http.NewRequest(http.MethodPost, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups", c.accountServer), bytes.NewReader(data)) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } req.Header.Add("Content-Type", "application/json") @@ -91,14 +81,14 @@ func (c client) CreateGroup(group *models.Group) (*models.Group, error) { resp, err := c.client.Do(req) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } defer resp.Body.Close() data, err = ioutil.ReadAll(resp.Body) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -109,25 +99,25 @@ func (c client) CreateGroup(group *models.Group) (*models.Group, error) { err = json.Unmarshal(data, group) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } return group, nil } -func (c client) UpdateGroup(group *models.Group) (*models.Group, error) { +func (c *KubeSphereClient) UpdateGroup(group *models.Group) (*models.Group, error) { data, err := json.Marshal(group) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } - req, err := http.NewRequest(http.MethodPut, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups/%s", accountAPIServer, group.Name), bytes.NewReader(data)) + req, err := http.NewRequest(http.MethodPut, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups/%s", c.accountServer, group.Name), bytes.NewReader(data)) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -141,7 +131,7 @@ func (c client) UpdateGroup(group *models.Group) (*models.Group, error) { data, err = ioutil.ReadAll(resp.Body) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -152,32 +142,32 @@ func (c client) UpdateGroup(group *models.Group) (*models.Group, error) { err = json.Unmarshal(data, group) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } return group, nil } -func (c client) DeleteGroup(name string) error { - req, err := http.NewRequest(http.MethodDelete, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups/%s", accountAPIServer, name), nil) +func (c *KubeSphereClient) DeleteGroup(name string) error { + req, err := http.NewRequest(http.MethodDelete, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups/%s", c.accountServer, name), nil) if err != nil { - glog.Error(err) + klog.Error(err) return err } resp, err := c.client.Do(req) if err != nil { - glog.Error(err) + klog.Error(err) return err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { - glog.Error(err) + klog.Error(err) return err } @@ -188,24 +178,24 @@ func (c client) DeleteGroup(name string) error { return nil } -func (c client) DescribeGroup(name string) (*models.Group, error) { - req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups/%s", accountAPIServer, name), nil) +func (c *KubeSphereClient) DescribeGroup(name string) (*models.Group, error) { + req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/groups/%s", c.accountServer, name), nil) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } resp, err := c.client.Do(req) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -217,31 +207,31 @@ func (c client) DescribeGroup(name string) (*models.Group, error) { err = json.Unmarshal(data, &group) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } return &group, nil } -func (c client) ListUsers() (*models.PageableResponse, error) { - req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/users", accountAPIServer), nil) +func (c *KubeSphereClient) ListUsers() (*models.PageableResponse, error) { + req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/kapis/iam.kubesphere.io/v1alpha2/users", c.accountServer), nil) if err != nil { return nil, err } - req.Header.Add("Authorization", accountAPIServer) + req.Header.Add("Authorization", c.accountServer) resp, err := c.client.Do(req) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -253,78 +243,78 @@ func (c client) ListUsers() (*models.PageableResponse, error) { err = json.Unmarshal(data, &result) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } return &result, nil } -func (c client) ListWorkspaceDevOpsProjects(workspace string) (*devops.PageableDevOpsProject, error) { - req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/kapis/tenant.kubesphere.io/v1alpha2/workspaces/%s/devops", ksAPIServer, workspace), nil) +func (c *KubeSphereClient) ListWorkspaceDevOpsProjects(workspace string) (*v1alpha2.PageableDevOpsProject, error) { + req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/kapis/tenant.kubesphere.io/v1alpha2/workspaces/%s/devops", c.apiServer, workspace), nil) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } req.Header.Add(constants.UserNameHeader, constants.AdminUserName) - glog.Info(req.Method, req.URL) + klog.Info(req.Method, req.URL) resp, err := c.client.Do(req) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } if resp.StatusCode > http.StatusOK { - glog.Error(req.Method, req.URL, resp.StatusCode, string(data)) + klog.Error(req.Method, req.URL, resp.StatusCode, string(data)) return nil, Error{resp.StatusCode, string(data)} } - var result devops.PageableDevOpsProject + var result v1alpha2.PageableDevOpsProject err = json.Unmarshal(data, &result) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } return &result, nil } -func (c client) DeleteWorkspaceDevOpsProjects(workspace, devops string) error { - req, err := http.NewRequest(http.MethodDelete, fmt.Sprintf("%s/kapis/tenant.kubesphere.io/v1alpha2/workspaces/%s/devops/%s", ksAPIServer, workspace, devops), nil) +func (c *KubeSphereClient) DeleteWorkspaceDevOpsProjects(workspace, devops string) error { + req, err := http.NewRequest(http.MethodDelete, fmt.Sprintf("%s/kapis/tenant.kubesphere.io/v1alpha2/workspaces/%s/devops/%s", c.apiServer, workspace, devops), nil) if err != nil { - glog.Error(err) + klog.Error(err) return err } req.Header.Add(constants.UserNameHeader, constants.AdminUserName) - glog.Info(req.Method, req.URL) + klog.Info(req.Method, req.URL) resp, err := c.client.Do(req) if err != nil { - glog.Error(err) + klog.Error(err) return err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { - glog.Error(err) + klog.Error(err) return err } if resp.StatusCode > http.StatusOK { - glog.Error(req.Method, req.URL, resp.StatusCode, string(data)) + klog.Error(req.Method, req.URL, resp.StatusCode, string(data)) return Error{resp.StatusCode, string(data)} } diff --git a/pkg/simple/client/kubesphere/options.go b/pkg/simple/client/kubesphere/options.go index 3d8743f5b..51c8cf4d9 100644 --- a/pkg/simple/client/kubesphere/options.go +++ b/pkg/simple/client/kubesphere/options.go @@ -1 +1,40 @@ package kubesphere + +import "github.com/spf13/pflag" + +type KubeSphereOptions struct { + APIServer string + AccountServer string +} + +// NewKubeSphereOptions create a default options +func NewKubeSphereOptions() *KubeSphereOptions { + return &KubeSphereOptions{ + APIServer: "http://ks-apiserver.kubesphere-system.svc", + AccountServer: "http://ks-account.kubesphere-system.svc", + } +} + +func (s *KubeSphereOptions) ApplyTo(options *KubeSphereOptions) { + if s.AccountServer != "" { + options.AccountServer = s.AccountServer + } + + if s.APIServer != "" { + options.APIServer = s.APIServer + } +} + +func (s *KubeSphereOptions) Validate() []error { + errs := []error{} + + return errs +} + +func (s *KubeSphereOptions) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&s.APIServer, "kubesphere-apiserver-host", s.APIServer, ""+ + "KubeSphere apiserver host address.") + + fs.StringVar(&s.AccountServer, "kubesphere-account-host", s.AccountServer, ""+ + "KubeSphere account server host address.") +} diff --git a/pkg/simple/client/mysql/event.go b/pkg/simple/client/mysql/event.go index 3a2f9f57a..674fc5ed1 100644 --- a/pkg/simple/client/mysql/event.go +++ b/pkg/simple/client/mysql/event.go @@ -14,7 +14,7 @@ limitations under the License. package mysql import ( - "github.com/golang/glog" + "k8s.io/klog" ) // EventReceiver is a sentinel EventReceiver; use it if the caller doesn't supply one @@ -38,8 +38,8 @@ func (n *EventReceiver) EventErr(eventName string, err error) error { // EventErrKv receives a notification of an error if one occurs along with // optional key/value data func (n *EventReceiver) EventErrKv(eventName string, err error, kvs map[string]string) error { - glog.Errorf("%+v", err) - glog.Errorf("%s: %+v", eventName, kvs) + klog.Errorf("%+v", err) + klog.Errorf("%s: %+v", eventName, kvs) return err } @@ -51,5 +51,5 @@ func (n *EventReceiver) Timing(eventName string, nanoseconds int64) { // TimingKv receives the time an event took to happen along with optional key/value data func (n *EventReceiver) TimingKv(eventName string, nanoseconds int64, kvs map[string]string) { // TODO: Change logger level to debug - glog.Infof("%s spend %.2fms: %+v", eventName, float32(nanoseconds)/1000000, kvs) + klog.Infof("%s spend %.2fms: %+v", eventName, float32(nanoseconds)/1000000, kvs) } diff --git a/pkg/simple/client/openpitrix/applications.go b/pkg/simple/client/openpitrix/applications.go index d6d458c28..a959aeef9 100644 --- a/pkg/simple/client/openpitrix/applications.go +++ b/pkg/simple/client/openpitrix/applications.go @@ -20,8 +20,8 @@ package openpitrix import ( "encoding/json" "fmt" - "github.com/golang/glog" "io/ioutil" + "k8s.io/klog" "net/http" "strconv" "strings" @@ -38,14 +38,14 @@ func (c *OpenPitrixClient) GetAppInfo(appId string) (string, string, string, err url := fmt.Sprintf("%s/v1/apps?app_id=%s", c.apiServer, appId) resp, err := c.makeHttpRequest("GET", url, "") if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, Unknown, Unknown, err } var apps appList err = json.Unmarshal(resp, &apps) if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, Unknown, Unknown, err } @@ -61,7 +61,7 @@ func (c *OpenPitrixClient) GetCluster(clusterId string) (*Cluster, error) { resp, err := c.makeHttpRequest("GET", url, "") if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -69,7 +69,7 @@ func (c *OpenPitrixClient) GetCluster(clusterId string) (*Cluster, error) { err = json.Unmarshal(resp, &clusterList) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -102,7 +102,7 @@ func (c *OpenPitrixClient) ListClusters(runtimeId, searchWord, status string, li resp, err := c.makeHttpRequest("GET", url, "") if err != nil { - glog.Errorf("request %s failed, reason: %s", url, err) + klog.Errorf("request %s failed, reason: %s", url, err) return nil, err } @@ -120,14 +120,14 @@ func (c *OpenPitrixClient) GetRepo(repoId string) (string, error) { url := fmt.Sprintf("%s/v1/repos?repo_id=%s", c.apiServer, repoId) resp, err := c.makeHttpRequest("GET", url, "") if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, err } var repos repoList err = json.Unmarshal(resp, &repos) if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, err } @@ -142,14 +142,14 @@ func (c *OpenPitrixClient) GetVersion(versionId string) (string, error) { versionUrl := fmt.Sprintf("%s/v1/app_versions?version_id=%s", c.apiServer, versionId) resp, err := c.makeHttpRequest("GET", versionUrl, "") if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, err } var versions VersionList err = json.Unmarshal(resp, &versions) if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, err } @@ -164,14 +164,14 @@ func (c *OpenPitrixClient) GetRuntime(runtimeId string) (string, error) { versionUrl := fmt.Sprintf("%s/v1/runtimes?runtime_id=%s", c.apiServer, runtimeId) resp, err := c.makeHttpRequest("GET", versionUrl, "") if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, err } var runtimes runtimeList err = json.Unmarshal(resp, &runtimes) if err != nil { - glog.Error(err) + klog.Error(err) return Unknown, err } @@ -189,14 +189,14 @@ func (c *OpenPitrixClient) CreateCluster(request CreateClusterRequest) error { data, err := json.Marshal(request) if err != nil { - glog.Error(err) + klog.Error(err) return err } data, err = c.makeHttpRequest("POST", versionUrl, string(data)) if err != nil { - glog.Error(err) + klog.Error(err) return err } @@ -210,14 +210,14 @@ func (c *OpenPitrixClient) DeleteCluster(request DeleteClusterRequest) error { data, err := json.Marshal(request) if err != nil { - glog.Error(err) + klog.Error(err) return err } data, err = c.makeHttpRequest("POST", versionUrl, string(data)) if err != nil { - glog.Error(err) + klog.Error(err) return err } @@ -237,7 +237,7 @@ func (c *OpenPitrixClient) makeHttpRequest(method, url, data string) ([]byte, er req.Header.Add("Authorization", c.token) if err != nil { - glog.Error(err) + klog.Error(err) return nil, err } @@ -245,7 +245,7 @@ func (c *OpenPitrixClient) makeHttpRequest(method, url, data string) ([]byte, er if err != nil { err := fmt.Errorf("Request to %s failed, method: %s,token: %s, reason: %s ", url, method, c.apiServer, err) - glog.Error(err) + klog.Error(err) return nil, err } diff --git a/pkg/simple/client/prometheus/prometheus.go b/pkg/simple/client/prometheus/prometheus.go index 6ababf0d7..126f55136 100644 --- a/pkg/simple/client/prometheus/prometheus.go +++ b/pkg/simple/client/prometheus/prometheus.go @@ -18,8 +18,8 @@ package prometheus import ( - "github.com/golang/glog" "io/ioutil" + "k8s.io/klog" "net/http" "time" ) @@ -52,14 +52,14 @@ func (c *PrometheusClient) sendMonitoringRequest(endpoint string, queryType stri epurl := endpoint + queryType + params response, err := c.client.Get(epurl) if err != nil { - glog.Error(err) + klog.Error(err) } else { defer response.Body.Close() contents, err := ioutil.ReadAll(response.Body) if err != nil { - glog.Error(err) + klog.Error(err) } return string(contents) } diff --git a/pkg/simple/client/s2is3/options.go b/pkg/simple/client/s2is3/options.go index 5979c6b51..0fbd15189 100644 --- a/pkg/simple/client/s2is3/options.go +++ b/pkg/simple/client/s2is3/options.go @@ -9,8 +9,8 @@ import ( type S3Options struct { Endpoint string `json:"endpoint,omitempty" yaml:"endpoint,omitempty"` Region string `json:"region,omitempty" yaml:"region,omitempty"` - DisableSSL bool `json:"disableSSL,omitempty" yaml:"disableSSL,omitempty"` - ForcePathStyle bool `json:"forcePathStyle,omitempty" yaml:"forePathStyle,omitempty"` + DisableSSL bool `json:"disableSSL" yaml:"disableSSL"` + ForcePathStyle bool `json:"forcePathStyle" yaml:"forePathStyle"` AccessKeyID string `json:"accessKeyID,omitempty" yaml:"accessKeyID,omitempty"` SecretAccessKey string `json:"secretAccessKey,omitempty" yaml:"secretAccessKey,omitempty"` SessionToken string `json:"sessionToken,omitempty" yaml:"sessionToken,omitempty"` diff --git a/pkg/utils/hashutil/MD5.go b/pkg/utils/hashutil/MD5.go index cd7c03f61..b68f0469d 100644 --- a/pkg/utils/hashutil/MD5.go +++ b/pkg/utils/hashutil/MD5.go @@ -3,8 +3,8 @@ package hashutil import ( "code.cloudfoundry.org/bytefmt" "encoding/hex" - "github.com/golang/glog" "io" + "k8s.io/klog" "kubesphere.io/kubesphere/pkg/utils/readerutils" ) @@ -18,7 +18,7 @@ func GetMD5(reader io.ReadCloser) (string, error) { if err == io.EOF { break } - glog.Error(err) + klog.Error(err) return "", err } } diff --git a/pkg/utils/jsonutil/jsonutils.go b/pkg/utils/jsonutil/jsonutils.go index 59cfd5aef..74af82b9d 100644 --- a/pkg/utils/jsonutil/jsonutils.go +++ b/pkg/utils/jsonutil/jsonutils.go @@ -19,9 +19,8 @@ package jsonutil import ( "encoding/json" + "k8s.io/klog" "strings" - - "github.com/golang/glog" ) type JsonRawMessage []byte @@ -30,7 +29,7 @@ func (m JsonRawMessage) Find(key string) JsonRawMessage { var objmap map[string]json.RawMessage err := json.Unmarshal(m, &objmap) if err != nil { - glog.Errorf("Resolve JSON Key failed, find key =%s, err=%s", + klog.Errorf("Resolve JSON Key failed, find key =%s, err=%s", key, err) return nil } @@ -41,7 +40,7 @@ func (m JsonRawMessage) ToList() []JsonRawMessage { var lists []json.RawMessage err := json.Unmarshal(m, &lists) if err != nil { - glog.Errorf("Resolve JSON List failed, err=%s", + klog.Errorf("Resolve JSON List failed, err=%s", err) return nil } diff --git a/pkg/utils/reflectutils/deep.go b/pkg/utils/reflectutils/deep.go new file mode 100644 index 000000000..8f5488af7 --- /dev/null +++ b/pkg/utils/reflectutils/deep.go @@ -0,0 +1,376 @@ +// Package deep provides function deep.Equal which is like reflect.DeepEqual but +// returns a list of differences. This is helpful when comparing complex types +// like structures and maps. +package reflectutils + +import ( + "errors" + "fmt" + "log" + "reflect" + "strings" +) + +var ( + // FloatPrecision is the number of decimal places to round float values + // to when comparing. + FloatPrecision = 10 + + // MaxDiff specifies the maximum number of differences to return. + MaxDiff = 10 + + // MaxDepth specifies the maximum levels of a struct to recurse into, + // if greater than zero. If zero, there is no limit. + MaxDepth = 0 + + // LogErrors causes errors to be logged to STDERR when true. + LogErrors = false + + // CompareUnexportedFields causes unexported struct fields, like s in + // T{s int}, to be compared when true. + CompareUnexportedFields = false +) + +var ( + // ErrMaxRecursion is logged when MaxDepth is reached. + ErrMaxRecursion = errors.New("recursed to MaxDepth") + + // ErrTypeMismatch is logged when Equal passed two different types of values. + ErrTypeMismatch = errors.New("variables are different reflect.Type") + + // ErrNotHandled is logged when a primitive Go kind is not handled. + ErrNotHandled = errors.New("cannot compare the reflect.Kind") +) + +type cmp struct { + diff []string + buff []string + floatFormat string +} + +var errorType = reflect.TypeOf((*error)(nil)).Elem() + +// Equal compares variables a and b, recursing into their structure up to +// MaxDepth levels deep (if greater than zero), and returns a list of differences, +// or nil if there are none. Some differences may not be found if an error is +// also returned. +// +// If a type has an Equal method, like time.Equal, it is called to check for +// equality. +// +// When comparing a struct, if a field has the tag `deep:"-"` then it will be +// ignored. +func Equal(a, b interface{}) []string { + aVal := reflect.ValueOf(a) + bVal := reflect.ValueOf(b) + c := &cmp{ + diff: []string{}, + buff: []string{}, + floatFormat: fmt.Sprintf("%%.%df", FloatPrecision), + } + if a == nil && b == nil { + return nil + } else if a == nil && b != nil { + c.saveDiff("", b) + } else if a != nil && b == nil { + c.saveDiff(a, "") + } + if len(c.diff) > 0 { + return c.diff + } + + c.equals(aVal, bVal, 0) + if len(c.diff) > 0 { + return c.diff // diffs + } + return nil // no diffs +} + +func (c *cmp) equals(a, b reflect.Value, level int) { + if MaxDepth > 0 && level > MaxDepth { + logError(ErrMaxRecursion) + return + } + + // Check if one value is nil, e.g. T{x: *X} and T.x is nil + if !a.IsValid() || !b.IsValid() { + if a.IsValid() && !b.IsValid() { + c.saveDiff(a.Type(), "") + } else if !a.IsValid() && b.IsValid() { + c.saveDiff("", b.Type()) + } + return + } + + // If different types, they can't be equal + aType := a.Type() + bType := b.Type() + if aType != bType { + c.saveDiff(aType, bType) + logError(ErrTypeMismatch) + return + } + + // Primitive https://golang.org/pkg/reflect/#Kind + aKind := a.Kind() + bKind := b.Kind() + + // Do a and b have underlying elements? Yes if they're ptr or interface. + aElem := aKind == reflect.Ptr || aKind == reflect.Interface + bElem := bKind == reflect.Ptr || bKind == reflect.Interface + + // If both types implement the error interface, compare the error strings. + // This must be done before dereferencing because the interface is on a + // pointer receiver. Re https://github.com/go-test/deep/issues/31, a/b might + // be primitive kinds; see TestErrorPrimitiveKind. + if aType.Implements(errorType) && bType.Implements(errorType) { + if (!aElem || !a.IsNil()) && (!bElem || !b.IsNil()) { + aString := a.MethodByName("Error").Call(nil)[0].String() + bString := b.MethodByName("Error").Call(nil)[0].String() + if aString != bString { + c.saveDiff(aString, bString) + return + } + } + } + + // Dereference pointers and interface{} + if aElem || bElem { + if aElem { + a = a.Elem() + } + if bElem { + b = b.Elem() + } + c.equals(a, b, level+1) + return + } + + switch aKind { + + ///////////////////////////////////////////////////////////////////// + // Iterable kinds + ///////////////////////////////////////////////////////////////////// + + case reflect.Struct: + /* + The variables are structs like: + type T struct { + FirstName string + LastName string + } + Type = .T, Kind = reflect.Struct + + Iterate through the fields (FirstName, LastName), recurse into their values. + */ + + // Types with an Equal() method, like time.Time, only if struct field + // is exported (CanInterface) + if eqFunc := a.MethodByName("Equal"); eqFunc.IsValid() && eqFunc.CanInterface() { + // Handle https://github.com/go-test/deep/issues/15: + // Don't call T.Equal if the method is from an embedded struct, like: + // type Foo struct { time.Time } + // First, we'll encounter Equal(Ttime, time.Time) but if we pass b + // as the 2nd arg we'll panic: "Call using pkg.Foo as type time.Time" + // As far as I can tell, there's no way to see that the method is from + // time.Time not Foo. So we check the type of the 1st (0) arg and skip + // unless it's b type. Later, we'll encounter the time.Time anonymous/ + // embedded field and then we'll have Equal(time.Time, time.Time). + funcType := eqFunc.Type() + if funcType.NumIn() == 1 && funcType.In(0) == bType { + retVals := eqFunc.Call([]reflect.Value{b}) + if !retVals[0].Bool() { + c.saveDiff(a, b) + } + return + } + } + + for i := 0; i < a.NumField(); i++ { + if aType.Field(i).PkgPath != "" && !CompareUnexportedFields { + continue // skip unexported field, e.g. s in type T struct {s string} + } + + if aType.Field(i).Tag.Get("deep") == "-" { + continue // field wants to be ignored + } + + c.push(aType.Field(i).Name) // push field name to buff + + // Get the Value for each field, e.g. FirstName has Type = string, + // Kind = reflect.String. + af := a.Field(i) + bf := b.Field(i) + + // Recurse to compare the field values + c.equals(af, bf, level+1) + + c.pop() // pop field name from buff + + if len(c.diff) >= MaxDiff { + break + } + } + case reflect.Map: + /* + The variables are maps like: + map[string]int{ + "foo": 1, + "bar": 2, + } + Type = map[string]int, Kind = reflect.Map + + Or: + type T map[string]int{} + Type = .T, Kind = reflect.Map + + Iterate through the map keys (foo, bar), recurse into their values. + */ + + if a.IsNil() || b.IsNil() { + if a.IsNil() && !b.IsNil() { + c.saveDiff("", b) + } else if !a.IsNil() && b.IsNil() { + c.saveDiff(a, "") + } + return + } + + if a.Pointer() == b.Pointer() { + return + } + + for _, key := range a.MapKeys() { + c.push(fmt.Sprintf("map[%s]", key)) + + aVal := a.MapIndex(key) + bVal := b.MapIndex(key) + if bVal.IsValid() { + c.equals(aVal, bVal, level+1) + } else { + c.saveDiff(aVal, "") + } + + c.pop() + + if len(c.diff) >= MaxDiff { + return + } + } + + for _, key := range b.MapKeys() { + if aVal := a.MapIndex(key); aVal.IsValid() { + continue + } + + c.push(fmt.Sprintf("map[%s]", key)) + c.saveDiff("", b.MapIndex(key)) + c.pop() + if len(c.diff) >= MaxDiff { + return + } + } + case reflect.Array: + n := a.Len() + for i := 0; i < n; i++ { + c.push(fmt.Sprintf("array[%d]", i)) + c.equals(a.Index(i), b.Index(i), level+1) + c.pop() + if len(c.diff) >= MaxDiff { + break + } + } + case reflect.Slice: + if a.IsNil() || b.IsNil() { + if a.IsNil() && !b.IsNil() { + c.saveDiff("", b) + } else if !a.IsNil() && b.IsNil() { + c.saveDiff(a, "") + } + return + } + + aLen := a.Len() + bLen := b.Len() + + if a.Pointer() == b.Pointer() && aLen == bLen { + return + } + + n := aLen + if bLen > aLen { + n = bLen + } + for i := 0; i < n; i++ { + c.push(fmt.Sprintf("slice[%d]", i)) + if i < aLen && i < bLen { + c.equals(a.Index(i), b.Index(i), level+1) + } else if i < aLen { + c.saveDiff(a.Index(i), "") + } else { + c.saveDiff("", b.Index(i)) + } + c.pop() + if len(c.diff) >= MaxDiff { + break + } + } + + ///////////////////////////////////////////////////////////////////// + // Primitive kinds + ///////////////////////////////////////////////////////////////////// + + case reflect.Float32, reflect.Float64: + // Avoid 0.04147685731961082 != 0.041476857319611 + // 6 decimal places is close enough + aval := fmt.Sprintf(c.floatFormat, a.Float()) + bval := fmt.Sprintf(c.floatFormat, b.Float()) + if aval != bval { + c.saveDiff(a.Float(), b.Float()) + } + case reflect.Bool: + if a.Bool() != b.Bool() { + c.saveDiff(a.Bool(), b.Bool()) + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if a.Int() != b.Int() { + c.saveDiff(a.Int(), b.Int()) + } + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + if a.Uint() != b.Uint() { + c.saveDiff(a.Uint(), b.Uint()) + } + case reflect.String: + if a.String() != b.String() { + c.saveDiff(a.String(), b.String()) + } + + default: + logError(ErrNotHandled) + } +} + +func (c *cmp) push(name string) { + c.buff = append(c.buff, name) +} + +func (c *cmp) pop() { + if len(c.buff) > 0 { + c.buff = c.buff[0 : len(c.buff)-1] + } +} + +func (c *cmp) saveDiff(aval, bval interface{}) { + if len(c.buff) > 0 { + varName := strings.Join(c.buff, ".") + c.diff = append(c.diff, fmt.Sprintf("%s: %v != %v", varName, aval, bval)) + } else { + c.diff = append(c.diff, fmt.Sprintf("%v != %v", aval, bval)) + } +} + +func logError(err error) { + if LogErrors { + log.Println(err) + } +}