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:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user