@@ -20,15 +20,12 @@ import (
20
20
"context"
21
21
"fmt"
22
22
"os"
23
+ "strings"
23
24
24
25
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25
26
"k8s.io/client-go/kubernetes"
26
27
"k8s.io/client-go/rest"
27
- )
28
-
29
- const (
30
- CloudInstanceIDLabel = "powervs.kubernetes.io/cloud-instance-id"
31
- PvmInstanceIdLabel = "powervs.kubernetes.io/pvm-instance-id"
28
+ "k8s.io/klog/v2"
32
29
)
33
30
34
31
type KubernetesAPIClient func () (kubernetes.Interface , error )
@@ -54,27 +51,29 @@ func KubernetesAPIInstanceInfo(clientset kubernetes.Interface) (*Metadata, error
54
51
if nodeName == "" {
55
52
return nil , fmt .Errorf ("CSI_NODE_NAME env var not set" )
56
53
}
54
+ return GetInstanceInfoFromProviderID (clientset , nodeName )
55
+ }
56
+
57
+ func GetInstanceInfoFromProviderID (clientset kubernetes.Interface , nodeName string ) (* Metadata , error ) {
57
58
// get node with k8s API
58
59
node , err := clientset .CoreV1 ().Nodes ().Get (context .TODO (), nodeName , metav1.GetOptions {})
59
60
if err != nil {
60
61
return nil , fmt .Errorf ("error getting Node %s: %v" , nodeName , err )
61
62
}
62
63
63
- // Get node labels
64
- labels := node .GetLabels ()
65
- keysList := []string {CloudInstanceIDLabel , PvmInstanceIdLabel }
66
64
instanceInfo := Metadata {}
67
- for _ , key := range keysList {
68
- if val , ok := labels [key ]; ok {
69
- switch key {
70
- case CloudInstanceIDLabel :
71
- instanceInfo .cloudInstanceId = val
72
- case PvmInstanceIdLabel :
73
- instanceInfo .pvmInstanceId = val
74
- }
75
- } else {
76
- return nil , fmt .Errorf ("error getting label %s for node Node %s" , key , nodeName )
65
+ // ProviderID format: ibmpowervs://<region>/<zone>/<service_instance_id>/<powervs_machine_id>
66
+ if node .Spec .ProviderID != "" {
67
+ providerId := node .Spec .ProviderID
68
+ klog .Infof ("Node Name: %s, Provider ID: %s" , nodeName , providerId )
69
+ data := strings .Split (providerId , "/" )
70
+ if len (data ) != ProviderIDValidLength {
71
+ return nil , fmt .Errorf ("invalid ProviderID format - %v, expected format - ibmpowervs://<region>/<zone>/<service_instance_id>/<powervs_machine_id>" , providerId )
77
72
}
73
+ instanceInfo .cloudInstanceId = data [4 ]
74
+ instanceInfo .pvmInstanceId = data [5 ]
75
+ } else {
76
+ return nil , fmt .Errorf ("ProviderID is empty for the node: %s" , nodeName )
78
77
}
79
78
80
79
return & instanceInfo , nil
0 commit comments