Skip to content

Commit f1269df

Browse files
authored
fix, typo and discovery client (#29)
1 parent b0ae0c6 commit f1269df

File tree

5 files changed

+71
-61
lines changed

5 files changed

+71
-61
lines changed

multicluster/controller/controller.go

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,17 @@ import (
3737
"kusionstack.io/kube-utils/multicluster/metrics"
3838
)
3939

40-
type ClusterManagermentType string
40+
type ClusterManagementType string
4141

4242
const (
43-
OpenClusterManagement ClusterManagermentType = "OpenClusterManagement"
44-
TestCluterManagement ClusterManagermentType = "TestCluterManagement"
43+
OpenClusterManagement ClusterManagementType = "OpenClusterManagement"
44+
TestCluterManagement ClusterManagementType = "TestCluterManagement"
4545
)
4646

4747
type Controller struct {
48-
config *rest.Config
49-
clusterManagermentType ClusterManagermentType
50-
clusterManagermentGVR schema.GroupVersionResource
48+
config *rest.Config
49+
clusterManagementType ClusterManagementType
50+
clusterManagementGVR schema.GroupVersionResource
5151

5252
client dynamic.Interface // client to get cluster info
5353
informerFactory dynamicinformer.DynamicSharedInformerFactory
@@ -67,51 +67,51 @@ type Controller struct {
6767
}
6868

6969
type ControllerConfig struct {
70-
Config *rest.Config // config for cluster managerment
71-
ClusterManagermentType ClusterManagermentType
72-
ClusterManagermentGVR *schema.GroupVersionResource
73-
ResyncPeriod time.Duration // resync period for cluster managerment
74-
Log logr.Logger
70+
Config *rest.Config // config for cluster management
71+
ClusterManagementType ClusterManagementType
72+
ClusterManagementGVR *schema.GroupVersionResource
73+
ResyncPeriod time.Duration // resync period for cluster management
74+
Log logr.Logger
7575

7676
// for test
7777
RestConfigForCluster func(cluster string) *rest.Config
7878
}
7979

8080
// NewController creates a new Controller which will process events about cluster.
8181
func NewController(cfg *ControllerConfig) (*Controller, error) {
82-
var clusterManagermentGVR schema.GroupVersionResource
83-
switch cfg.ClusterManagermentType {
82+
var clusterManagementGVR schema.GroupVersionResource
83+
switch cfg.ClusterManagementType {
8484
case OpenClusterManagement:
85-
if cfg.ClusterManagermentGVR == nil {
86-
return nil, fmt.Errorf("ClusterManagermentGVR must be set when use %s", cfg.ClusterManagermentType)
85+
if cfg.ClusterManagementGVR == nil {
86+
return nil, fmt.Errorf("ClusterManagementGVR must be set when use %s", cfg.ClusterManagementType)
8787
}
88-
clusterManagermentGVR = *cfg.ClusterManagermentGVR
88+
clusterManagementGVR = *cfg.ClusterManagementGVR
8989
case TestCluterManagement:
90-
if cfg.ClusterManagermentGVR == nil || cfg.RestConfigForCluster == nil {
91-
return nil, fmt.Errorf("ClusterManagermentGVR and RestConfigForCluster must be set when use %s", cfg.ClusterManagermentType)
90+
if cfg.ClusterManagementGVR == nil || cfg.RestConfigForCluster == nil {
91+
return nil, fmt.Errorf("ClusterManagementGVR and RestConfigForCluster must be set when use %s", cfg.ClusterManagementType)
9292
}
93-
clusterManagermentGVR = *cfg.ClusterManagermentGVR
93+
clusterManagementGVR = *cfg.ClusterManagementGVR
9494
default:
95-
return nil, fmt.Errorf("not support cluster managerment type: %v", cfg.ClusterManagermentType)
95+
return nil, fmt.Errorf("not support cluster management type: %v", cfg.ClusterManagementType)
9696
}
9797

9898
client, err := dynamic.NewForConfig(cfg.Config)
9999
if err != nil {
100100
return nil, err
101101
}
102102
informerFactory := dynamicinformer.NewDynamicSharedInformerFactory(client, cfg.ResyncPeriod)
103-
informer := informerFactory.ForResource(clusterManagermentGVR).Informer()
103+
informer := informerFactory.ForResource(clusterManagementGVR).Informer()
104104

105105
return &Controller{
106-
config: cfg.Config,
107-
client: client,
108-
informerFactory: informerFactory,
109-
clusterManagermentType: cfg.ClusterManagermentType,
110-
clusterManagermentGVR: clusterManagermentGVR,
111-
informer: informer,
112-
workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), clusterManagermentGVR.Resource),
113-
syncedCh: make(chan struct{}),
114-
log: cfg.Log,
106+
config: cfg.Config,
107+
client: client,
108+
informerFactory: informerFactory,
109+
clusterManagementType: cfg.ClusterManagementType,
110+
clusterManagementGVR: clusterManagementGVR,
111+
informer: informer,
112+
workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), clusterManagementGVR.Resource),
113+
syncedCh: make(chan struct{}),
114+
log: cfg.Log,
115115

116116
restConfigForCluster: cfg.RestConfigForCluster,
117117
}, nil
@@ -228,7 +228,7 @@ func (c *Controller) eventHandler(key string) error {
228228
return nil
229229
}
230230

231-
_, err = c.client.Resource(c.clusterManagermentGVR).Namespace(namespace).Get(context.Background(), name, metav1.GetOptions{})
231+
_, err = c.client.Resource(c.clusterManagementGVR).Namespace(namespace).Get(context.Background(), name, metav1.GetOptions{})
232232
if err != nil {
233233
if errors.IsNotFound(err) {
234234
c.deleteHandler(name)
@@ -249,10 +249,10 @@ func (c *Controller) eventHandler(key string) error {
249249

250250
// RestConfigForCluster returns the rest config for the mangered cluster.
251251
func (c *Controller) RestConfigForCluster(cluster string) *rest.Config {
252-
switch c.clusterManagermentType {
252+
switch c.clusterManagementType {
253253
case OpenClusterManagement:
254254
clusterConfig := *c.config
255-
clusterConfig.Host = fmt.Sprintf("%s/apis/%s/%s/%s/%s/proxy", clusterConfig.Host, c.clusterManagermentGVR.Group, c.clusterManagermentGVR.Version, c.clusterManagermentGVR.Resource, cluster)
255+
clusterConfig.Host = fmt.Sprintf("%s/apis/%s/%s/%s/%s/proxy", clusterConfig.Host, c.clusterManagementGVR.Group, c.clusterManagementGVR.Version, c.clusterManagementGVR.Resource, cluster)
256256
return &clusterConfig
257257
case TestCluterManagement:
258258
return c.restConfigForCluster(cluster)

multicluster/manager.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ func setOptionsDefaults(opts Options) Options {
5959
}
6060

6161
type ManagerConfig struct {
62-
FedConfig *rest.Config
63-
ClusterScheme *runtime.Scheme
64-
ClusterManagermentGVR *schema.GroupVersionResource
65-
ClusterManagermentType controller.ClusterManagermentType
62+
FedConfig *rest.Config
63+
ClusterScheme *runtime.Scheme
64+
ClusterManagementGVR *schema.GroupVersionResource
65+
ClusterManagementType controller.ClusterManagementType
6666

6767
ResyncPeriod time.Duration
6868
ClusterFilter func(string) bool // select cluster
@@ -78,7 +78,7 @@ type Manager struct {
7878

7979
clusterCacheManager ClusterCacheManager
8080
clusterClientManager ClusterClientManager
81-
controller *controller.Controller // controller for cluster managerment
81+
controller *controller.Controller // controller for cluster management
8282

8383
resyncPeriod time.Duration
8484
hasCluster map[string]struct{} // whether cluster has been added
@@ -119,17 +119,17 @@ func NewManager(cfg *ManagerConfig, opts Options) (manager *Manager, newCacheFun
119119
}
120120
}
121121

122-
clusterManagermentType := controller.OpenClusterManagement
123-
if cfg.ClusterManagermentType != "" {
124-
clusterManagermentType = cfg.ClusterManagermentType
122+
clusterManagementType := controller.OpenClusterManagement
123+
if cfg.ClusterManagementType != "" {
124+
clusterManagementType = cfg.ClusterManagementType
125125
}
126126

127127
controller, err := controller.NewController(&controller.ControllerConfig{
128-
Config: cfg.FedConfig,
129-
ResyncPeriod: cfg.ResyncPeriod,
130-
ClusterManagermentType: clusterManagermentType,
131-
ClusterManagermentGVR: cfg.ClusterManagermentGVR,
132-
Log: log,
128+
Config: cfg.FedConfig,
129+
ResyncPeriod: cfg.ResyncPeriod,
130+
ClusterManagementType: clusterManagementType,
131+
ClusterManagementGVR: cfg.ClusterManagementGVR,
132+
Log: log,
133133

134134
RestConfigForCluster: cfg.RestConfigForCluster,
135135
})

multicluster/manager_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ import (
2323

2424
. "github.com/onsi/ginkgo"
2525
. "github.com/onsi/gomega"
26+
"k8s.io/apimachinery/pkg/util/sets"
2627

2728
appsv1 "k8s.io/api/apps/v1"
2829
corev1 "k8s.io/api/core/v1"
2930
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3031
"k8s.io/apimachinery/pkg/types"
31-
"k8s.io/apimachinery/pkg/util/sets"
3232
"sigs.k8s.io/controller-runtime/pkg/cache"
3333
"sigs.k8s.io/controller-runtime/pkg/client"
3434
"sigs.k8s.io/controller-runtime/pkg/client/fake"
@@ -199,11 +199,11 @@ var _ = Describe("multicluster with 1 fed and 4 clusters", func() {
199199
apiResourceSets := sets.NewString()
200200
for _, apiResourceList := range apiResourceLists {
201201
for _, apiResource := range apiResourceList.APIResources {
202-
groupVersionKind := fmt.Sprintf("%s/%s", apiResourceList.GroupVersion, apiResource.Kind)
203-
apiResourceSets.Insert(groupVersionKind)
202+
groupVersionName := fmt.Sprintf("%s/%s", apiResourceList.GroupVersion, apiResource.Name)
203+
apiResourceSets.Insert(groupVersionName)
204204
}
205205
}
206-
Expect(apiResourceSets.HasAll("apps/v1/Deployment", "v1/ConfigMap")).To(Equal(true))
206+
Expect(apiResourceSets.HasAll("apps/v1/deployments", "apps/v1/deployments/status", "v1/configmaps")).To(Equal(true))
207207
})
208208

209209
It("multiClusterClient update the deployment status of cluster1", func() {

multicluster/multi_cluster_client.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -497,10 +497,11 @@ func (c *cachedMultiClusterDiscoveryClient) ServerGroupsAndResources() ([]*metav
497497
// If there are multiple clusters, we need to get the intersection of groups and resources
498498
var (
499499
groupVersionCount = make(map[string]int)
500-
groupVersionKindCount = make(map[string]int)
500+
groupVersionNameCount = make(map[string]int)
501501

502-
apiGroupsRes []*metav1.APIGroup
503-
apiResourceListsRes []*metav1.APIResourceList
502+
apiGroupsRes []*metav1.APIGroup
503+
apiResourceListsRes []*metav1.APIResourceList
504+
groupVersionToResources = make(map[string][]metav1.APIResource)
504505
)
505506
for _, cachedClient := range allDiscoveryClient {
506507
apiGroups, apiResourceLists, err := cachedClient.ServerGroupsAndResources()
@@ -524,21 +525,30 @@ func (c *cachedMultiClusterDiscoveryClient) ServerGroupsAndResources() ([]*metav
524525

525526
for _, apiResourceList := range apiResourceLists {
526527
for _, apiResource := range apiResourceList.APIResources {
527-
groupVersionKind := fmt.Sprintf("%s/%s", apiResourceList.GroupVersion, apiResource.Kind)
528+
groupVersionName := fmt.Sprintf("%s/%s", apiResourceList.GroupVersion, apiResource.Name)
528529

529-
if _, ok := groupVersionKindCount[groupVersionKind]; !ok {
530-
groupVersionKindCount[groupVersionKind] = 1
530+
if _, ok := groupVersionNameCount[groupVersionName]; !ok {
531+
groupVersionNameCount[groupVersionName] = 1
531532
} else {
532-
groupVersionKindCount[groupVersionKind]++
533+
groupVersionNameCount[groupVersionName]++
533534

534-
if groupVersionKindCount[groupVersionKind] == len(allDiscoveryClient) { // all clusters have this GroupVersion and Kind
535-
apiResourceListsRes = append(apiResourceListsRes, apiResourceList)
535+
if groupVersionNameCount[groupVersionName] == len(allDiscoveryClient) { // all clusters have this GroupVersion and Name
536+
groupVersionToResources[apiResourceList.GroupVersion] = append(groupVersionToResources[apiResourceList.GroupVersion], apiResource)
536537
}
537538
}
538539
}
539540
}
540541
}
541542

543+
for groupVersion, resources := range groupVersionToResources {
544+
apiResourceList := metav1.APIResourceList{
545+
TypeMeta: metav1.TypeMeta{Kind: "APIResourceList", APIVersion: "v1"},
546+
GroupVersion: groupVersion,
547+
}
548+
apiResourceList.APIResources = append(apiResourceList.APIResources, resources...)
549+
apiResourceListsRes = append(apiResourceListsRes, &apiResourceList)
550+
}
551+
542552
return apiGroupsRes, apiResourceListsRes, nil
543553
}
544554

multicluster/suite_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,12 @@ var _ = BeforeSuite(func() {
140140
return fedConfig
141141
}
142142
},
143-
ClusterManagermentGVR: &schema.GroupVersionResource{
143+
ClusterManagementGVR: &schema.GroupVersionResource{
144144
Group: "apps",
145145
Version: "v1",
146146
Resource: "deployments",
147147
},
148-
ClusterManagermentType: controller.TestCluterManagement,
148+
ClusterManagementType: controller.TestCluterManagement,
149149
}, Options{})
150150
Expect(err).NotTo(HaveOccurred())
151151
Expect(manager).NotTo(BeNil())

0 commit comments

Comments
 (0)