code refactor (#1924)

* code refactor

Signed-off-by: hongming <talonwan@yunify.com>

* code refactor

Signed-off-by: hongming <talonwan@yunify.com>
This commit is contained in:
hongming
2020-02-26 10:08:13 +08:00
committed by GitHub
parent 570ef8b60a
commit a9e1183f3c
14 changed files with 176 additions and 183 deletions

View File

@@ -156,7 +156,7 @@ func (am *amOperator) GetUserRoles(namespace, username string) ([]*rbacv1.Role,
roles := make([]*rbacv1.Role, 0)
for _, roleBinding := range roleBindings {
if k8sutil.ContainsUser(roleBinding.Subjects, username) {
if ContainsUser(roleBinding.Subjects, username) {
if roleBinding.RoleRef.Kind == ClusterRoleKind {
clusterRole, err := clusterRoleLister.Get(roleBinding.RoleRef.Name)
if err != nil {
@@ -207,7 +207,7 @@ func (am *amOperator) GetUserClusterRoles(username string) (*rbacv1.ClusterRole,
clusterRoles := make([]*rbacv1.ClusterRole, 0)
userFacingClusterRole := &rbacv1.ClusterRole{}
for _, clusterRoleBinding := range clusterRoleBindings {
if k8sutil.ContainsUser(clusterRoleBinding.Subjects, username) {
if ContainsUser(clusterRoleBinding.Subjects, username) {
clusterRole, err := clusterRoleLister.Get(clusterRoleBinding.RoleRef.Name)
if err != nil {
if apierrors.IsNotFound(err) {
@@ -307,7 +307,7 @@ func (am *amOperator) GetWorkspaceRoleMap(username string) (map[string]string, e
for _, roleBinding := range clusterRoleBindings {
if workspace := k8sutil.GetControlledWorkspace(roleBinding.OwnerReferences); workspace != "" &&
k8sutil.ContainsUser(roleBinding.Subjects, username) {
ContainsUser(roleBinding.Subjects, username) {
result[workspace] = roleBinding.RoleRef.Name
}
}
@@ -588,7 +588,7 @@ func (am *amOperator) CreateClusterRoleBinding(username string, clusterRoleName
return nil
}
if !k8sutil.ContainsUser(found.Subjects, username) {
if !ContainsUser(found.Subjects, username) {
found.Subjects = clusterRoleBinding.Subjects
_, err = client.ClientSets().K8s().Kubernetes().RbacV1().ClusterRoleBindings().Update(found)
if err != nil {

View File

@@ -179,3 +179,34 @@ func hasString(slice []string, value string) bool {
}
return false
}
func ContainsUser(subjects interface{}, username string) bool {
switch subjects.(type) {
case []*rbacv1.Subject:
for _, subject := range subjects.([]*rbacv1.Subject) {
if subject.Kind == rbacv1.UserKind && subject.Name == username {
return true
}
}
case []rbacv1.Subject:
for _, subject := range subjects.([]rbacv1.Subject) {
if subject.Kind == rbacv1.UserKind && subject.Name == username {
return true
}
}
case []User:
for _, u := range subjects.([]User) {
if u.Username == username {
return true
}
}
case []*User:
for _, u := range subjects.([]*User) {
if u.Username == username {
return true
}
}
}
return false
}

View File

@@ -23,7 +23,6 @@ import (
"github.com/json-iterator/go"
"k8s.io/klog"
"kubesphere.io/kubesphere/pkg/api/monitoring/v1alpha2"
"kubesphere.io/kubesphere/pkg/models/workspaces"
cs "kubesphere.io/kubesphere/pkg/simple/client"
"net/url"
"regexp"
@@ -665,40 +664,40 @@ func GetClusterStatistics() *Response {
wg := sync.WaitGroup{}
wg.Add(4)
go func() {
num, err := workspaces.WorkspaceCount()
if err != nil {
klog.Errorln(err)
workspaceStats.Status = "error"
} else {
workspaceStats.withMetricResult(now, num)
}
wg.Done()
}()
//go func() {
// num, err := workspaces.WorkspaceCount()
// if err != nil {
// klog.Errorln(err)
// workspaceStats.Status = "error"
// } else {
// workspaceStats.withMetricResult(now, num)
// }
// wg.Done()
//}()
go func() {
num, err := workspaces.GetAllDevOpsProjectsNums()
if err != nil {
if _, notEnabled := err.(cs.ClientSetNotEnabledError); !notEnabled {
klog.Errorln(err)
}
devopsStats.Status = "error"
} else {
devopsStats.withMetricResult(now, num)
}
wg.Done()
}()
//go func() {
//num, err := workspaces.GetAllDevOpsProjectsNums()
//if err != nil {
// if _, notEnabled := err.(cs.ClientSetNotEnabledError); !notEnabled {
// klog.Errorln(err)
// }
// devopsStats.Status = "error"
//} else {
// devopsStats.withMetricResult(now, num)
//}
// wg.Done()
//}()
go func() {
num, err := workspaces.GetAllProjectNums()
if err != nil {
klog.Errorln(err)
namespaceStats.Status = "error"
} else {
namespaceStats.withMetricResult(now, num)
}
wg.Done()
}()
//go func() {
//num, err := workspaces.GetAllProjectNums()
//if err != nil {
// klog.Errorln(err)
// namespaceStats.Status = "error"
//} else {
// namespaceStats.withMetricResult(now, num)
//}
// wg.Done()
//}()
go func() {
ret, err := cs.ClientSets().KubeSphere().ListUsers()
@@ -723,7 +722,7 @@ func GetClusterStatistics() *Response {
func GetWorkspaceStatistics(workspaceName string) *Response {
now := time.Now().Unix()
//now := time.Now().Unix()
var metricsArray []APIResponse
namespaceStats := APIResponse{MetricName: MetricWorkspaceNamespaceCount}
@@ -734,51 +733,51 @@ func GetWorkspaceStatistics(workspaceName string) *Response {
wg := sync.WaitGroup{}
wg.Add(4)
go func() {
num, err := workspaces.WorkspaceNamespaceCount(workspaceName)
if err != nil {
klog.Errorln(err)
namespaceStats.Status = "error"
} else {
namespaceStats.withMetricResult(now, num)
}
wg.Done()
}()
//go func() {
// num, err := workspaces.WorkspaceNamespaceCount(workspaceName)
// if err != nil {
// klog.Errorln(err)
// namespaceStats.Status = "error"
// } else {
// namespaceStats.withMetricResult(now, num)
// }
// wg.Done()
//}()
go func() {
num, err := workspaces.GetDevOpsProjectsCount(workspaceName)
if err != nil {
if _, notEnabled := err.(cs.ClientSetNotEnabledError); !notEnabled {
klog.Errorln(err)
}
devopsStats.Status = "error"
} else {
devopsStats.withMetricResult(now, num)
}
wg.Done()
}()
//go func() {
// num, err := workspaces.GetDevOpsProjectsCount(workspaceName)
// if err != nil {
// if _, notEnabled := err.(cs.ClientSetNotEnabledError); !notEnabled {
// klog.Errorln(err)
// }
// devopsStats.Status = "error"
// } else {
// devopsStats.withMetricResult(now, num)
// }
// wg.Done()
//}()
go func() {
num, err := workspaces.WorkspaceUserCount(workspaceName)
if err != nil {
klog.Errorln(err)
memberStats.Status = "error"
} else {
memberStats.withMetricResult(now, num)
}
wg.Done()
}()
//go func() {
//num, err := workspaces.WorkspaceUserCount(workspaceName)
//if err != nil {
// klog.Errorln(err)
// memberStats.Status = "error"
//} else {
// memberStats.withMetricResult(now, num)
//}
// wg.Done()
//}()
go func() {
num, err := workspaces.GetOrgRolesCount(workspaceName)
if err != nil {
klog.Errorln(err)
roleStats.Status = "error"
} else {
roleStats.withMetricResult(now, num)
}
wg.Done()
}()
//go func() {
//num, err := workspaces.GetOrgRolesCount(workspaceName)
// if err != nil {
// klog.Errorln(err)
// roleStats.Status = "error"
// } else {
// roleStats.withMetricResult(now, num)
// }
// wg.Done()
//}()
wg.Wait()

View File

@@ -35,7 +35,6 @@ import (
"kubesphere.io/kubesphere/pkg/server/params"
clientset "kubesphere.io/kubesphere/pkg/simple/client"
"kubesphere.io/kubesphere/pkg/simple/client/mysql"
"kubesphere.io/kubesphere/pkg/utils/k8sutil"
"kubesphere.io/kubesphere/pkg/utils/sliceutil"
"sort"
"strings"
@@ -164,7 +163,7 @@ func (w *workspaceOperator) createWorkspaceRoleBinding(workspace, username strin
return err
}
if !k8sutil.ContainsUser(workspaceRoleBinding.Subjects, username) {
if !iam.ContainsUser(workspaceRoleBinding.Subjects, username) {
workspaceRoleBinding = workspaceRoleBinding.DeepCopy()
workspaceRoleBinding.Subjects = append(workspaceRoleBinding.Subjects, v1.Subject{APIGroup: "rbac.authorization.k8s.io", Kind: "User", Name: username})
_, err = w.client.RbacV1().ClusterRoleBindings().Update(workspaceRoleBinding)