@@ -10,6 +10,7 @@ import (
10
10
"github.com/IBM/ibm-object-csi-driver-operator/controllers/internal/crutils"
11
11
"github.com/IBM/ibm-object-csi-driver-operator/controllers/util"
12
12
"github.com/go-logr/logr"
13
+ openshiftclient "github.com/openshift/client-go/config/clientset/versioned"
13
14
corev1 "k8s.io/api/core/v1"
14
15
rbacv1 "k8s.io/api/rbac/v1"
15
16
storagev1 "k8s.io/api/storage/v1"
@@ -18,6 +19,7 @@ import (
18
19
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19
20
"k8s.io/apimachinery/pkg/types"
20
21
"k8s.io/client-go/kubernetes"
22
+ "k8s.io/client-go/rest"
21
23
"sigs.k8s.io/controller-runtime/pkg/client"
22
24
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
23
25
)
@@ -34,9 +36,10 @@ type ControllerHelper struct {
34
36
}
35
37
36
38
// NewControllerHelper ...
37
- func NewControllerHelper (client client.Client ) * ControllerHelper {
39
+ func NewControllerHelper (client client.Client , logger logr. Logger ) * ControllerHelper {
38
40
return & ControllerHelper {
39
41
Client : client ,
42
+ Log : logger ,
40
43
}
41
44
}
42
45
@@ -251,17 +254,24 @@ func (ch *ControllerHelper) getAccessorAndFinalizerName(instance crutils.Instanc
251
254
return accessor , finalizerName , nil
252
255
}
253
256
254
- // Check the platform, if IBM Cloud then get Region and IaaS provider
255
- func (ch * ControllerHelper ) GetIBMClusterInfo (clientset * kubernetes.Clientset ) error {
257
+ // Check the platform, if IBMCloud then get Region and IaaS provider
258
+ // If not IBMCloud, check if it is unmanaged/IPI cluster
259
+ func (ch * ControllerHelper ) GetClusterInfo (inConfig rest.Config ) error {
260
+ logger := ch .Log .WithName ("getClusterInfo" )
261
+ logger .Info ("Checking cluster platform..." )
262
+
256
263
var listOptions = & client.ListOptions {}
257
264
var err error
258
265
nodes := corev1.NodeList {}
259
266
260
- logger := ch .Log .WithName ("getClusterInfo" )
261
- logger .Info ("Checking cluster platform..." )
267
+ k8sClient , err := kubernetes .NewForConfig (& inConfig )
268
+ if err != nil {
269
+ logger .Error (err , "Unable to load cluster config" )
270
+ return err
271
+ }
262
272
263
- if clientset != nil {
264
- list , err := clientset .CoreV1 ().Nodes ().List (context .TODO (), metav1.ListOptions {})
273
+ if k8sClient != nil {
274
+ list , err := k8sClient .CoreV1 ().Nodes ().List (context .TODO (), metav1.ListOptions {})
265
275
if err == nil {
266
276
nodes = * list
267
277
}
@@ -273,21 +283,74 @@ func (ch *ControllerHelper) GetIBMClusterInfo(clientset *kubernetes.Clientset) e
273
283
return err
274
284
}
275
285
276
- logger .Info ("Get cluster region..." )
286
+ logger .Info ("Get IBM cluster region..." )
277
287
if val , ok := nodes .Items [0 ].Labels ["ibm-cloud.kubernetes.io/region" ]; ok {
278
288
ch .Region = val
279
- logger .Info ("Detected IBM Cluster region: " , ch .Region )
289
+ logger .Info ("Detected" , "IBM Cluster region: " , ch .Region )
290
+ } else {
291
+ logger .Info ("Node label 'ibm-cloud.kubernetes.io/region' not found" )
280
292
}
281
293
282
- logger .Info ("Get cluster IaaS Provider..." )
294
+ logger .Info ("Get IBM cluster IaaS Provider..." )
283
295
if val , ok := nodes .Items [0 ].Labels ["ibm-cloud.kubernetes.io/iaas-provider" ]; ok {
284
- logger .Info ("Detected IBM IaaS provider: " , val )
296
+ logger .Info ("Detected" , " IBM IaaS provider: " , val )
285
297
if val == "g2" {
286
298
ch .IaaSProvider = constants .IaasIBMVPC
287
299
} else {
288
300
ch .IaaSProvider = constants .IaasIBMClassic
289
301
}
290
- logger .Info ("Detected endpoint type: " , ch .IaaSProvider )
302
+ logger .Info ("Detected" , "endpoint type: " , ch .IaaSProvider )
303
+ } else {
304
+ logger .Info ("Node label 'ibm-cloud.kubernetes.io/iaas-provider' not found" )
305
+ }
306
+
307
+ if ch .Region == "" || ch .IaaSProvider == "" {
308
+ // check if it is unmanaged cluster
309
+ logger .Info ("Region or IaaSProvider not set. checking if it is unmanaged cluster" )
310
+
311
+ ocClient , err := openshiftclient .NewForConfig (& inConfig )
312
+ if err != nil {
313
+ logger .Error (err , "Unable to load cluster config" )
314
+ return err
315
+ }
316
+
317
+ infra , err := ocClient .ConfigV1 ().Infrastructures ().Get (context .TODO (), "cluster" , metav1.GetOptions {})
318
+ if err != nil {
319
+ logger .Error (err , "Failed to get infrastructure" )
320
+ return err
321
+ }
322
+
323
+ logger .Info ("cluster infrastructure" , "platformStatus:" , infra .Status .PlatformStatus )
324
+
325
+ platformType := infra .Status .PlatformStatus .Type
326
+ logger .Info ("Detected" , "infra cloud provider platform: " , platformType )
327
+
328
+ if platformType == constants .InfraProviderPlatformIBM {
329
+ logger .Info ("Get cluster region..." )
330
+ region := infra .Status .PlatformStatus .IBMCloud .Location
331
+ if region != "" {
332
+ ch .Region = region
333
+ logger .Info ("Detected" , "Cluster region: " , ch .Region )
334
+ } else {
335
+ logger .Info ("cluster region not found" )
336
+ }
337
+
338
+ logger .Info ("Get cluster Provider..." )
339
+ providerType := infra .Status .PlatformStatus .IBMCloud .ProviderType
340
+ if providerType != "" {
341
+ logger .Info ("Detected" , "IaaS provider: " , providerType )
342
+ if providerType == constants .InfraProviderType {
343
+ ch .IaaSProvider = constants .IaasIBMVPC
344
+ } else {
345
+ ch .IaaSProvider = constants .IaasIBMClassic
346
+ }
347
+ logger .Info ("Detected" , "endpoint type: " , ch .IaaSProvider )
348
+ } else {
349
+ logger .Info ("cluster IaaS provider not found" )
350
+ }
351
+ } else {
352
+ logger .Info ("cloud provider is not IBMCloud" )
353
+ }
291
354
}
292
355
return nil
293
356
}
0 commit comments