@@ -28,8 +28,6 @@ import (
2828// Error codes:
2929// - InvalidArgument: Invalid ProviderSpec or missing required fields
3030// - Internal: Failed to create server or communicate with STACKIT API
31- //
32- //nolint:gocyclo,funlen//TODO:refactor
3331func (p * Provider ) CreateMachine (ctx context.Context , req * driver.CreateMachineRequest ) (* driver.CreateMachineResponse , error ) {
3432 // Log messages to track request
3533 klog .V (2 ).Infof ("Machine creation request has been received for %q" , req .Machine .Name )
@@ -62,6 +60,39 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR
6260 return nil , status .Error (codes .Internal , fmt .Sprintf ("failed to initialize STACKIT client: %v" , err ))
6361 }
6462
63+ // check if server already exists
64+ server , err := p .getServerByName (ctx , projectID , providerSpec .Region , req .Machine .Name )
65+ if err != nil {
66+ klog .Errorf ("Failed to fetch server for machine %q: %v" , req .Machine .Name , err )
67+ return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to fetch server: %v" , err ))
68+ }
69+
70+ if server == nil {
71+ // Call STACKIT API to create server
72+ server , err = p .client .CreateServer (ctx , projectID , providerSpec .Region , p .createServerRequest (req , providerSpec ))
73+ if err != nil {
74+ klog .Errorf ("Failed to create server for machine %q: %v" , req .Machine .Name , err )
75+ return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to create server: %v" , err ))
76+ }
77+ }
78+
79+ if err := p .patchNetworkInterface (ctx , projectID , server .ID , providerSpec ); err != nil {
80+ klog .Errorf ("Failed to patch network interface for server %q: %v" , req .Machine .Name , err )
81+ return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to patch network interface for server: %v" , err ))
82+ }
83+
84+ // Generate ProviderID in format: stackit://<projectId>/<serverId>
85+ providerID := fmt .Sprintf ("%s://%s/%s" , StackitProviderName , projectID , server .ID )
86+ klog .V (2 ).Infof ("Successfully created server %q with ID %q for machine %q" , server .Name , server .ID , req .Machine .Name )
87+
88+ return & driver.CreateMachineResponse {
89+ ProviderID : providerID ,
90+ NodeName : req .Machine .Name ,
91+ }, nil
92+ }
93+
94+ //nolint:gocyclo // TODO: will be fixed next PR
95+ func (p * Provider ) createServerRequest (req * driver.CreateMachineRequest , providerSpec * api.ProviderSpec ) * client.CreateServerRequest {
6596 // Build labels: merge ProviderSpec labels with MCM-specific labels
6697 labels := make (map [string ]string )
6798 // Start with user-provided labels from ProviderSpec
@@ -172,35 +203,7 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR
172203 createReq .Metadata = providerSpec .Metadata
173204 }
174205
175- // check if server already exists
176- server , err := p .getServerByName (ctx , projectID , providerSpec .Region , req .Machine .Name )
177- if err != nil {
178- klog .Errorf ("Failed to fetch server for machine %q: %v" , req .Machine .Name , err )
179- return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to fetch server: %v" , err ))
180- }
181-
182- if server == nil {
183- // Call STACKIT API to create server
184- server , err = p .client .CreateServer (ctx , projectID , providerSpec .Region , createReq )
185- if err != nil {
186- klog .Errorf ("Failed to create server for machine %q: %v" , req .Machine .Name , err )
187- return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to create server: %v" , err ))
188- }
189- }
190-
191- if err := p .patchNetworkInterface (ctx , projectID , server .ID , providerSpec ); err != nil {
192- klog .Errorf ("Failed to patch network interface for server %q: %v" , req .Machine .Name , err )
193- return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to patch network interface for server: %v" , err ))
194- }
195-
196- // Generate ProviderID in format: stackit://<projectId>/<serverId>
197- providerID := fmt .Sprintf ("%s://%s/%s" , StackitProviderName , projectID , server .ID )
198- klog .V (2 ).Infof ("Successfully created server %q with ID %q for machine %q" , server .Name , server .ID , req .Machine .Name )
199-
200- return & driver.CreateMachineResponse {
201- ProviderID : providerID ,
202- NodeName : req .Machine .Name ,
203- }, nil
206+ return createReq
204207}
205208
206209func (p * Provider ) getServerByName (ctx context.Context , projectID , region , serverName string ) (* client.Server , error ) {
0 commit comments