@@ -18,6 +18,13 @@ import (
1818 "k8s.io/klog/v2"
1919)
2020
21+ const (
22+ StackitProviderName = "stackit"
23+ StackitMachineLabel = "mcm.gardener.cloud/machine"
24+ StackitMachineClassLabel = "mcm.gardener.cloud/machineclass"
25+ StackitRoleLabel = "mcm.gardener.cloud/role"
26+ )
27+
2128// CreateMachine handles a machine creation request by creating a STACKIT server
2229//
2330// This method creates a new server in STACKIT infrastructure based on the ProviderSpec
@@ -38,6 +45,12 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR
3845 klog .V (2 ).Infof ("Machine creation request has been received for %q" , req .Machine .Name )
3946 defer klog .V (2 ).Infof ("Machine creation request has been processed for %q" , req .Machine .Name )
4047
48+ // Check if incoming provider in the MachineClass is a provider we support
49+ if req .MachineClass .Provider != StackitProviderName {
50+ err := fmt .Errorf ("requested for Provider '%s', we only support '%s'" , req .MachineClass .Provider , StackitProviderName )
51+ return nil , status .Error (codes .InvalidArgument , err .Error ())
52+ }
53+
4154 // Decode ProviderSpec from MachineClass
4255 providerSpec , err := decodeProviderSpec (req .MachineClass )
4356 if err != nil {
@@ -68,9 +81,9 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR
6881 }
6982 }
7083 // Add MCM-specific labels for server identification and orphan VM detection
71- labels ["mcm.gardener.cloud/machine" ] = req .Machine .Name
72- labels ["mcm.gardener.cloud/machineclass" ] = req .MachineClass .Name
73- labels ["mcm.gardener.cloud/role" ] = "node"
84+ labels [StackitMachineLabel ] = req .Machine .Name
85+ labels [StackitMachineClassLabel ] = req .MachineClass .Name
86+ labels [StackitRoleLabel ] = "node"
7487
7588 // Create server request
7689 createReq := & CreateServerRequest {
@@ -177,7 +190,7 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR
177190 }
178191
179192 // Generate ProviderID in format: stackit://<projectId>/<serverId>
180- providerID := fmt .Sprintf ("stackit ://%s/%s" , projectID , server .ID )
193+ providerID := fmt .Sprintf ("%s ://%s/%s" , StackitProviderName , projectID , server .ID )
181194
182195 // NodeName is the machine name (will register with this name in Kubernetes)
183196 nodeName := req .Machine .Name
@@ -351,7 +364,8 @@ func (p *Provider) ListMachines(ctx context.Context, req *driver.ListMachinesReq
351364 }
352365
353366 // Call STACKIT API to list all servers
354- servers , err := p .client .ListServers (ctx , projectID , providerSpec .Region )
367+ labelSelector := fmt .Sprintf ("%s=%s" , StackitMachineClassLabel , req .MachineClass .Name )
368+ servers , err := p .client .ListServers (ctx , projectID , providerSpec .Region , labelSelector )
355369 if err != nil {
356370 klog .Errorf ("Failed to list servers for MachineClass %q: %v" , req .MachineClass .Name , err )
357371 return nil , status .Error (codes .Internal , fmt .Sprintf ("failed to list servers: %v" , err ))
@@ -361,26 +375,16 @@ func (p *Provider) ListMachines(ctx context.Context, req *driver.ListMachinesReq
361375 // We use the "mcm.gardener.cloud/machineclass" label to identify which servers belong to this MachineClass
362376 machineList := make (map [string ]string )
363377 for _ , server := range servers {
364- // Skip servers without labels
365- if server .Labels == nil {
366- continue
367- }
378+ // Generate ProviderID in format: stackit://<projectId>/<serverId>
379+ providerID := fmt .Sprintf ("stackit://%s/%s" , projectID , server .ID )
368380
369- // Check if server has the matching MachineClass label
370- if machineClassLabel , ok := server .Labels ["mcm.gardener.cloud/machineclass" ]; ok {
371- if machineClassLabel == req .MachineClass .Name {
372- // Generate ProviderID in format: stackit://<projectId>/<serverId>
373- providerID := fmt .Sprintf ("stackit://%s/%s" , projectID , server .ID )
374-
375- // Get machine name from labels (fallback to server name if not found)
376- machineName := server .Name
377- if machineLabel , ok := server .Labels ["mcm.gardener.cloud/machine" ]; ok {
378- machineName = machineLabel
379- }
380-
381- machineList [providerID ] = machineName
382- }
381+ // Get machine name from labels (fallback to server name if not found)
382+ machineName := server .Name
383+ if machineLabel , ok := server .Labels [StackitMachineLabel ]; ok {
384+ machineName = machineLabel
383385 }
386+
387+ machineList [providerID ] = machineName
384388 }
385389
386390 klog .V (2 ).Infof ("Found %d machines for MachineClass %q" , len (machineList ), req .MachineClass .Name )
0 commit comments