@@ -38,11 +38,14 @@ import (
38
38
"k8s.io/client-go/dynamic"
39
39
kubeclient "k8s.io/client-go/kubernetes"
40
40
"k8s.io/client-go/rest"
41
+ "k8s.io/client-go/tools/cache"
41
42
"k8s.io/client-go/tools/clientcmd"
42
43
43
44
fedcorev1a1 "github.com/kubewharf/kubeadmiral/pkg/apis/core/v1alpha1"
44
45
fedclient "github.com/kubewharf/kubeadmiral/pkg/client/clientset/versioned"
46
+ fedinformers "github.com/kubewharf/kubeadmiral/pkg/client/informers/externalversions"
45
47
"github.com/kubewharf/kubeadmiral/pkg/controllers/common"
48
+ "github.com/kubewharf/kubeadmiral/pkg/util/informermanager"
46
49
"github.com/kubewharf/kubeadmiral/test/e2e/framework/clusterprovider"
47
50
)
48
51
83
86
hostFedClient fedclient.Interface
84
87
hostDynamicClient dynamic.Interface
85
88
hostDiscoveryClient discovery.DiscoveryInterface
89
+ ftcManager informermanager.FederatedTypeConfigManager
86
90
clusterKubeClients sync.Map
87
91
clusterFedClients sync.Map
88
92
clusterDynamicClients sync.Map
@@ -93,7 +97,12 @@ func init() {
93
97
flag .StringVar (& master , "master" , "" , "The address of the host Kubernetes cluster." )
94
98
flag .StringVar (& kubeconfig , "kubeconfig" , "" , "The path of the kubeconfig for the host Kubernetes cluster." )
95
99
flag .Float64Var (& kubeAPIQPS , "kube-api-qps" , 500 , "The maximum QPS from each Kubernetes client." )
96
- flag .IntVar (& kubeAPIBurst , "kube-api-burst" , 1000 , "The maximum burst for throttling requests from each Kubernetes client." )
100
+ flag .IntVar (
101
+ & kubeAPIBurst ,
102
+ "kube-api-burst" ,
103
+ 1000 ,
104
+ "The maximum burst for throttling requests from each Kubernetes client." ,
105
+ )
97
106
98
107
flag .StringVar (& clusterProvider , "cluster-provider" , "kwok" , "The cluster provider [kwok,kind] to use." )
99
108
flag .StringVar (
@@ -102,11 +111,26 @@ func init() {
102
111
"kindest/node:v1.20.15@sha256:a32bf55309294120616886b5338f95dd98a2f7231519c7dedcec32ba29699394" ,
103
112
"The node image to use for creating kind test clusters, it should include the image digest." ,
104
113
)
105
- flag .StringVar (& kwokImagePrefix , "kwok-image-prefix" , "registry.k8s.io" , "The image prefix used by kwok to pull kubernetes images." )
106
- flag .StringVar (& kwokKubeVersion , "kwok-kube-version" , "v1.20.15" , "The kubernetes version to be used for kwok member clusters" )
114
+ flag .StringVar (
115
+ & kwokImagePrefix ,
116
+ "kwok-image-prefix" ,
117
+ "registry.k8s.io" ,
118
+ "The image prefix used by kwok to pull kubernetes images." ,
119
+ )
120
+ flag .StringVar (
121
+ & kwokKubeVersion ,
122
+ "kwok-kube-version" ,
123
+ "v1.20.15" ,
124
+ "The kubernetes version to be used for kwok member clusters" ,
125
+ )
107
126
108
127
flag .BoolVar (& preserveClusters , "preserve-clusters" , false , "If set, clusters created during testing are preserved" )
109
- flag .BoolVar (& preserveNamespace , "preserve-namespaces" , false , "If set, namespaces created during testing are preserved" )
128
+ flag .BoolVar (
129
+ & preserveNamespace ,
130
+ "preserve-namespaces" ,
131
+ false ,
132
+ "If set, namespaces created during testing are preserved" ,
133
+ )
110
134
}
111
135
112
136
var _ = ginkgo .SynchronizedBeforeSuite (
@@ -125,7 +149,7 @@ var _ = ginkgo.SynchronizedBeforeSuite(
125
149
126
150
return bytes
127
151
},
128
- func (data []byte ) {
152
+ func (ctx context. Context , data []byte ) {
129
153
params := []string {}
130
154
err := json .Unmarshal (data , & params )
131
155
gomega .Expect (err ).ToNot (gomega .HaveOccurred ())
@@ -150,6 +174,21 @@ var _ = ginkgo.SynchronizedBeforeSuite(
150
174
hostDiscoveryClient , err = discovery .NewDiscoveryClientForConfig (restConfig )
151
175
gomega .Expect (err ).ShouldNot (gomega .HaveOccurred ())
152
176
177
+ fedInformerFactory := fedinformers .NewSharedInformerFactory (hostFedClient , 0 )
178
+ manager := informermanager .NewInformerManager (
179
+ hostDynamicClient ,
180
+ fedInformerFactory .Core ().V1alpha1 ().FederatedTypeConfigs (),
181
+ nil ,
182
+ )
183
+ ftcManager = manager
184
+
185
+ fedInformerFactory .Start (ctx .Done ())
186
+ manager .Start (ctx )
187
+
188
+ if ! cache .WaitForNamedCacheSync ("host-informer-manager" , ctx .Done (), ftcManager .HasSynced ) {
189
+ ginkgo .Fail ("failed to wait for host informer manager cache sync" )
190
+ }
191
+
153
192
clusterKubeClients = sync.Map {}
154
193
clusterFedClients = sync.Map {}
155
194
clusterDynamicClients = sync.Map {}
@@ -170,7 +209,9 @@ var _ = ginkgo.SynchronizedBeforeSuite(
170
209
defaultClusterWaitTimeout ,
171
210
)
172
211
default :
173
- ginkgo .Fail (fmt .Sprintf ("invalid cluster provider, %s or %s accepted" , KwokClusterProvider , KindClusterProvider ))
212
+ ginkgo .Fail (
213
+ fmt .Sprintf ("invalid cluster provider, %s or %s accepted" , KwokClusterProvider , KindClusterProvider ),
214
+ )
174
215
}
175
216
},
176
217
)
@@ -231,12 +272,19 @@ func (*framework) HostDiscoveryClient() discovery.DiscoveryInterface {
231
272
return hostDiscoveryClient
232
273
}
233
274
275
+ func (* framework ) FTCManager () informermanager.FederatedTypeConfigManager {
276
+ return ftcManager
277
+ }
278
+
234
279
func (f * framework ) TestNamespace () * corev1.Namespace {
235
280
gomega .Expect (f .namespace ).ToNot (gomega .BeNil (), MessageUnexpectedError )
236
281
return f .namespace
237
282
}
238
283
239
- func (f * framework ) NewCluster (ctx context.Context , clusterModifiers ... ClusterModifier ) (* fedcorev1a1.FederatedCluster , * corev1.Secret ) {
284
+ func (f * framework ) NewCluster (
285
+ ctx context.Context ,
286
+ clusterModifiers ... ClusterModifier ,
287
+ ) (* fedcorev1a1.FederatedCluster , * corev1.Secret ) {
240
288
clusterName := strings .ToLower (fmt .Sprintf ("%s-%s" , f .name , rand .String (12 )))
241
289
cluster , secret := f .clusterProvider .NewCluster (ctx , clusterName )
242
290
0 commit comments