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] +}
