This is an automated email from the ASF dual-hosted git repository.

vishesh pushed a commit to branch fix-provider-id
in repository 
https://gitbox.apache.org/repos/asf/cloudstack-kubernetes-provider.git

commit d2ddd95922fd1d511ecb04e55c37a783200d26dc
Author: vishesh92 <[email protected]>
AuthorDate: Tue Nov 25 18:02:36 2025 +0100

    Fix usage of provider ID
---
 cloudstack.go           |  2 +-
 cloudstack_instances.go | 26 ++++++++++++++++++++++----
 2 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/cloudstack.go b/cloudstack.go
index 8d78a861..a384cbd9 100644
--- a/cloudstack.go
+++ b/cloudstack.go
@@ -200,7 +200,7 @@ func (cs *CSCloud) GetZoneByProviderID(ctx context.Context, 
providerID string) (
        zone := cloudprovider.Zone{}
 
        instance, count, err := cs.client.VirtualMachine.GetVirtualMachineByID(
-               providerID,
+               cs.getInstanceIDFromProviderID(providerID),
                cloudstack.WithProject(cs.projectID),
        )
        if err != nil {
diff --git a/cloudstack_instances.go b/cloudstack_instances.go
index 91d65751..48f1e7c6 100644
--- a/cloudstack_instances.go
+++ b/cloudstack_instances.go
@@ -24,6 +24,7 @@ import (
        "errors"
        "fmt"
        "regexp"
+       "strings"
 
        "github.com/apache/cloudstack-go/v2/cloudstack"
        corev1 "k8s.io/api/core/v1"
@@ -53,7 +54,7 @@ func (cs *CSCloud) NodeAddresses(ctx context.Context, name 
types.NodeName) ([]co
 // NodeAddressesByProviderID returns the addresses of the specified instance.
 func (cs *CSCloud) NodeAddressesByProviderID(ctx context.Context, providerID 
string) ([]corev1.NodeAddress, error) {
        instance, count, err := cs.client.VirtualMachine.GetVirtualMachineByID(
-               providerID,
+               cs.getInstanceIDFromProviderID(providerID),
                cloudstack.WithProject(cs.projectID),
        )
        if err != nil {
@@ -125,7 +126,7 @@ func (cs *CSCloud) InstanceType(ctx context.Context, name 
types.NodeName) (strin
 // InstanceTypeByProviderID returns the type of the specified instance.
 func (cs *CSCloud) InstanceTypeByProviderID(ctx context.Context, providerID 
string) (string, error) {
        instance, count, err := cs.client.VirtualMachine.GetVirtualMachineByID(
-               providerID,
+               cs.getInstanceIDFromProviderID(providerID),
                cloudstack.WithProject(cs.projectID),
        )
        if err != nil {
@@ -151,7 +152,7 @@ func (cs *CSCloud) CurrentNodeName(ctx context.Context, 
hostname string) (types.
 // InstanceExistsByProviderID returns if the instance still exists.
 func (cs *CSCloud) InstanceExistsByProviderID(ctx context.Context, providerID 
string) (bool, error) {
        _, count, err := cs.client.VirtualMachine.GetVirtualMachineByID(
-               providerID,
+               cs.getInstanceIDFromProviderID(providerID),
                cloudstack.WithProject(cs.projectID),
        )
        if err != nil {
@@ -185,6 +186,11 @@ func (cs *CSCloud) InstanceShutdown(ctx context.Context, 
node *corev1.Node) (boo
 
 func (cs *CSCloud) InstanceMetadata(ctx context.Context, node *corev1.Node) 
(*cloudprovider.InstanceMetadata, error) {
 
+       instanceID, err := cs.InstanceID(ctx, types.NodeName(node.Name))
+       if err != nil {
+               return nil, err
+       }
+
        instanceType, err := cs.InstanceType(ctx, types.NodeName(node.Name))
        if err != nil {
                return nil, err
@@ -201,10 +207,22 @@ func (cs *CSCloud) InstanceMetadata(ctx context.Context, 
node *corev1.Node) (*cl
        }
 
        return &cloudprovider.InstanceMetadata{
-               ProviderID:    cs.ProviderName(),
+               ProviderID:    cs.getProviderIDFromInstanceID(instanceID),
                InstanceType:  instanceType,
                NodeAddresses: addresses,
                Zone:          cs.zone,
                Region:        zone.Region,
        }, nil
 }
+
+func (cs *CSCloud) getProviderIDFromInstanceID(instanceID string) string {
+       return fmt.Sprintf("%s://%s", cs.ProviderName(), instanceID)
+}
+
+func (cs *CSCloud) getInstanceIDFromProviderID(providerID string) string {
+       parts := strings.Split(providerID, "://")
+       if len(parts) == 1 {
+               return providerID
+       }
+       return parts[1]
+}

Reply via email to