@@ -94,20 +94,10 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR
9494 return nil , status .Error (codes .DeadlineExceeded , fmt .Sprintf ("failed waiting for server to be ACTIVE: %v" , err ))
9595 }
9696
97- nics , err := p .client . GetNICsForServer (ctx , projectID , providerSpec . Region , server .ID )
97+ nics , err := p .patchNetworkInterfaces (ctx , projectID , server .ID , providerSpec )
9898 if err != nil {
99- klog .Errorf ("Failed to get NICs for server %q: %v" , req .Machine .Name , err )
100- return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to get NICs for server: %v" , err ))
101- }
102-
103- if len (nics ) == 0 {
104- klog .Errorf ("No NICs found for server %q (ID: %s)" , req .Machine .Name , server .ID )
105- return nil , status .Error (codes .Unavailable , fmt .Sprintf ("no NICs found for server %q" , server .ID ))
106- }
107-
108- if err := p .patchNetworkInterface (ctx , projectID , nics , providerSpec ); err != nil {
109- klog .Errorf ("Failed to patch network interface for server %q: %v" , req .Machine .Name , err )
110- return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to patch network interface for server: %v" , err ))
99+ klog .Errorf ("Failed to patch NICs for server %q: %v" , req .Machine .Name , err )
100+ return nil , status .Error (codes .Unavailable , fmt .Sprintf ("failed to patch NICs for server: %v" , err ))
111101 }
112102
113103 // Generate ProviderID in format: stackit://<projectId>/<serverId>
@@ -265,17 +255,28 @@ func (p *Provider) getServerByName(ctx context.Context, projectID, region, serve
265255 return nil , nil
266256}
267257
268- func (p * Provider ) patchNetworkInterface (ctx context.Context , projectID string , nics []* client.NIC , providerSpec * api.ProviderSpec ) error {
258+ func (p * Provider ) patchNetworkInterfaces (ctx context.Context , projectID , serverID string , providerSpec * api.ProviderSpec ) ([]* client.NIC , error ) {
259+ nics , err := p .client .GetNICsForServer (ctx , projectID , providerSpec .Region , serverID )
260+ if err != nil {
261+ return nil , fmt .Errorf ("failed to get NICs for server %q: %w" , serverID , err )
262+ }
263+
264+ if len (nics ) == 0 {
265+ return nil , fmt .Errorf ("no NICs found for server %q" , serverID )
266+ }
267+
269268 if len (providerSpec .AllowedAddresses ) == 0 {
270- return nil
269+ return nics , nil
271270 }
272271
272+ result := make ([]* client.NIC , 0 , len (nics ))
273273 for _ , nic := range nics {
274274 // if networking is not set, server is inside the default network
275275 // just patch the interface since the server should only have one
276276 if providerSpec .Networking != nil {
277277 // only process interfaces that are either in the configured network (NetworkID) or are defined in NICIDs
278278 if providerSpec .Networking .NetworkID != nic .NetworkID && ! slices .Contains (providerSpec .Networking .NICIDs , nic .ID ) {
279+ result = append (result , nic )
279280 continue
280281 }
281282 }
@@ -290,17 +291,20 @@ func (p *Provider) patchNetworkInterface(ctx context.Context, projectID string,
290291 }
291292
292293 if ! updateNic {
294+ result = append (result , nic )
293295 continue
294296 }
295297
296- if _ , err := p .client .UpdateNIC (ctx , projectID , providerSpec .Region , nic .NetworkID , nic .ID , nic .AllowedAddresses ); err != nil {
297- return fmt .Errorf ("failed to update allowed addresses for NIC %s: %w" , nic .ID , err )
298+ updatedNic , err := p .client .UpdateNIC (ctx , projectID , providerSpec .Region , nic .NetworkID , nic .ID , nic .AllowedAddresses )
299+ if err != nil {
300+ return nil , fmt .Errorf ("failed to update allowed addresses for NIC %s: %w" , nic .ID , err )
298301 }
299302
300303 klog .V (2 ).Infof ("Updated allowed addresses for NIC %s to %v" , nic .ID , nic .AllowedAddresses )
304+ result = append (result , updatedNic )
301305 }
302306
303- return nil
307+ return result , nil
304308}
305309
306310func (p * Provider ) WaitUntilServerRunning (ctx context.Context , projectID , region , serverID string ) error {
0 commit comments