Skip to content

Commit 865f47a

Browse files
committed
ProviderID based changes added
1 parent b6a8d3c commit 865f47a

File tree

4 files changed

+24
-26
lines changed

4 files changed

+24
-26
lines changed

pkg/cloud/metadata_k8s.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,12 @@ import (
2020
"context"
2121
"fmt"
2222
"os"
23+
"strings"
2324

2425
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2526
"k8s.io/client-go/kubernetes"
2627
"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"
3229
)
3330

3431
type KubernetesAPIClient func() (kubernetes.Interface, error)
@@ -54,27 +51,29 @@ func KubernetesAPIInstanceInfo(clientset kubernetes.Interface) (*Metadata, error
5451
if nodeName == "" {
5552
return nil, fmt.Errorf("CSI_NODE_NAME env var not set")
5653
}
54+
return GetInstanceInfoFromProviderID(clientset, nodeName)
55+
}
56+
57+
func GetInstanceInfoFromProviderID(clientset kubernetes.Interface, nodeName string) (*Metadata, error) {
5758
// get node with k8s API
5859
node, err := clientset.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{})
5960
if err != nil {
6061
return nil, fmt.Errorf("error getting Node %s: %v", nodeName, err)
6162
}
6263

63-
// Get node labels
64-
labels := node.GetLabels()
65-
keysList := []string{CloudInstanceIDLabel, PvmInstanceIdLabel}
6664
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)
7772
}
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)
7877
}
7978

8079
return &instanceInfo, nil

tests/e2e/dynamic_provisioning.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ var _ = Describe("[powervs-csi-e2e]Dynamic Provisioning", func() {
331331
},
332332
}
333333

334-
cloudInstanceId, err := testsuites.GetCloudInstanceIdFromNodeLabels(cs)
334+
cloudInstanceId, err := testsuites.GetCloudInstanceIdFromNodeSpec(cs)
335335
if err != nil {
336336
Skip(fmt.Sprintf("Could not get cloudInstanceId : %v", err))
337337
}

tests/e2e/pre_provisioning.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ var _ = Describe("[powervs-csi-e2e]Pre-Provisioned", func() {
7070
Skip(fmt.Sprintf("env %q not set", apiKeyEnv))
7171
}
7272
var err error
73-
cloudInstanceId, err := testsuites.GetCloudInstanceIdFromNodeLabels(cs)
73+
cloudInstanceId, err := testsuites.GetCloudInstanceIdFromNodeSpec(cs)
7474
if err != nil {
7575
Skip(fmt.Sprintf("Could not get cloudInstanceId : %v", err))
7676
}

tests/e2e/testsuites/testsuites.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -544,15 +544,14 @@ func podLogs(client clientset.Interface, name, namespace string) ([]byte, error)
544544
}
545545

546546
// Method to get cloudInstanceId from Node Labels
547-
func GetCloudInstanceIdFromNodeLabels(client clientset.Interface) (string, error) {
547+
func GetCloudInstanceIdFromNodeSpec(client clientset.Interface) (string, error) {
548548
nodes, err := client.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{})
549549
if err != nil {
550550
return "", fmt.Errorf("error getting cloudInstanceId: %+v", err)
551551
}
552-
553-
if cloudInstanceId, ok := nodes.Items[0].ObjectMeta.Labels[powervscloud.CloudInstanceIDLabel]; ok {
554-
return cloudInstanceId, nil
552+
instanceInfo, err := powervscloud.GetInstanceInfoFromProviderID(client, nodes.Items[0].Name)
553+
if err != nil {
554+
return "", fmt.Errorf("error getting Node Info From Provider ID: %+v", err)
555555
}
556-
557-
return "", fmt.Errorf("error getting cloudInstanceId")
556+
return instanceInfo.GetCloudInstanceId(), nil
558557
}

0 commit comments

Comments
 (0)