From 0aad4ec0bb2877dcc0f90b7f5ddd879d4e6670a5 Mon Sep 17 00:00:00 2001 From: Aurelien GASTON Date: Mon, 9 Sep 2024 10:25:41 +0200 Subject: [PATCH] fix: missing required providerID on external nodes --- scaleway/servers.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scaleway/servers.go b/scaleway/servers.go index d182bb7..8fd7308 100644 --- a/scaleway/servers.go +++ b/scaleway/servers.go @@ -211,6 +211,8 @@ func (s *servers) InstanceShutdown(ctx context.Context, node *v1.Node) (bool, er // translated into specific fields in the Node object on registration. // Use the node.name or node.spec.providerID field to find the node in the cloud provider. func (s *servers) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprovider.InstanceMetadata, error) { + providerID := node.Spec.ProviderID + if address, ok := node.Labels[nodeLabelNodePublicIP]; ok { addresses := []v1.NodeAddress{ {Type: v1.NodeExternalIP, Address: address}, @@ -222,17 +224,22 @@ func (s *servers) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudpr } } + if providerID == "" { + providerID = fmt.Sprintf("scaleway://external/%s", node.GetUID()) + } + return &cloudprovider.InstanceMetadata{ + ProviderID: providerID, NodeAddresses: addresses, }, nil } - if node.Spec.ProviderID == "" { + if providerID == "" { metadata, err := s.instances.InstanceMetadata(ctx, node) if err == cloudprovider.InstanceNotFound { return s.baremetal.InstanceMetadata(ctx, node) } return metadata, err } - return s.getImplementationByProviderID(node.Spec.ProviderID).InstanceMetadata(ctx, node) + return s.getImplementationByProviderID(providerID).InstanceMetadata(ctx, node) }