Skip to content

Commit 355235c

Browse files
committed
WIP
1 parent ab9c7bd commit 355235c

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

pkg/provider/core.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ import (
2222
)
2323

2424
const (
25-
StackitProviderName = "stackit"
26-
StackitMachineLabel = "mcm.gardener.cloud/machine"
27-
StackitMachineClassLabel = "mcm.gardener.cloud/machineclass"
28-
StackitRoleLabel = "mcm.gardener.cloud/role"
25+
StackitProviderName = "stackit"
26+
StackitMachineLabel = "mcm.gardener.cloud/machine"
27+
StackitMachineClassLabel = "mcm.gardener.cloud/machineclass"
28+
StackitRoleLabel = "mcm.gardener.cloud/role"
29+
portDeletionAnnotationPrefix = "stackit.cloud/cleanup-port-on-deletion-"
2930
)
3031

3132
// CreateMachine handles a machine creation request by creating a STACKIT server
@@ -357,6 +358,27 @@ func (p *Provider) DeleteMachine(ctx context.Context, req *driver.DeleteMachineR
357358
return nil, status.Error(codes.Internal, fmt.Sprintf("failed to delete server: %v", err))
358359
}
359360

361+
for annotation, value := range req.Machine.Annotations {
362+
if strings.HasPrefix(annotation, portDeletionAnnotationPrefix) {
363+
splitted := strings.Split(value, "/")
364+
if len(splitted) != 2 {
365+
continue
366+
}
367+
klog.V(2).Infof("Found migrated nic %s for machine %q, triggering deletion", splitted[1], req.Machine.Name)
368+
err = p.client.DeleteNic(ctx, projectID, providerSpec.Region, splitted[0], splitted[1])
369+
if err != nil {
370+
// Check if server was not found (404) - this is OK for idempotency
371+
if errors.Is(err, ErrNicNotFound) {
372+
klog.V(2).Infof("Nic %q already deleted for machine %q (idempotent)", serverID[1], req.Machine.Name)
373+
return &driver.DeleteMachineResponse{}, nil
374+
}
375+
// All other errors are internal errors
376+
klog.Errorf("Failed to delete nic for machine %q: %v", req.Machine.Name, err)
377+
return nil, status.Error(codes.Internal, fmt.Sprintf("failed to delete nic: %v", err))
378+
}
379+
}
380+
}
381+
360382
klog.V(2).Infof("Successfully deleted server %q for machine %q", serverID, req.Machine.Name)
361383

362384
return &driver.DeleteMachineResponse{}, nil

pkg/provider/sdk_client.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ func NewStackitClient(serviceAccountKey string) (*SdkStackitClient, error) {
4141
var (
4242
// ErrServerNotFound indicates the server was not found (404)
4343
ErrServerNotFound = errors.New("server not found")
44+
ErrNicNotFound = errors.New("nic not found")
4445
)
4546

4647
// createIAASClient creates a new STACKIT SDK IAAS API client
@@ -320,6 +321,18 @@ func (c *SdkStackitClient) GetNICsForServer(ctx context.Context, projectID, regi
320321
return nics, nil
321322
}
322323

324+
func (c *SdkStackitClient) DeleteNic(ctx context.Context, projectID, region, networkID, nicID string) error {
325+
err := c.iaasClient.DeleteNic(ctx, projectID, region, networkID, nicID).Execute()
326+
if err != nil {
327+
// Check if error is 404 Not Found - this is OK (idempotent)
328+
if isNotFoundError(err) {
329+
return fmt.Errorf("%w: %v", ErrNicNotFound, err)
330+
}
331+
return fmt.Errorf("SDK DeleteNic failed: %w", err)
332+
}
333+
return nil
334+
}
335+
323336
func (c *SdkStackitClient) UpdateNIC(ctx context.Context, projectID, region, networkID, nicID string, allowedAddresses []string) (*NIC, error) {
324337
addresses := make([]iaas.AllowedAddressesInner, len(allowedAddresses))
325338

pkg/provider/stackit_client.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ type StackitClient interface {
3030
ListServers(ctx context.Context, projectID, region string, labelSelector map[string]string) ([]*Server, error)
3131
// GetNICsForServer retrieves a network interfaces for a given server
3232
GetNICsForServer(ctx context.Context, projectID, region, serverID string) ([]*NIC, error)
33+
// DeleteNic delete a given nic by ID
34+
DeleteNic(ctx context.Context, projectID, region, networkID, nicID string) error
3335
// UpdateNIC updates a network interface
3436
UpdateNIC(ctx context.Context, projectID, region, networkID, nicID string, allowedAddresses []string) (*NIC, error)
3537
}

0 commit comments

Comments
 (0)