From 73f18ba0d5a4fafd7822f6930c9ea256c9ef8151 Mon Sep 17 00:00:00 2001 From: Felix Breuer Date: Mon, 26 Jan 2026 09:28:38 +0100 Subject: [PATCH] Decode secret (#94) * use stackitProviderName everywhere Signed-off-by: Felix Breuer * extract secret extraction into function Signed-off-by: Felix Breuer --------- Signed-off-by: Felix Breuer --- pkg/provider/create.go | 10 +++++++++- pkg/provider/delete.go | 2 +- pkg/provider/list.go | 2 +- pkg/provider/status.go | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/pkg/provider/create.go b/pkg/provider/create.go index c0578267..020e2c7e 100644 --- a/pkg/provider/create.go +++ b/pkg/provider/create.go @@ -5,6 +5,7 @@ import ( "encoding/base64" "fmt" "slices" + "strings" "github.com/gardener/machine-controller-manager/pkg/util/provider/driver" "github.com/gardener/machine-controller-manager/pkg/util/provider/machinecodes/codes" @@ -56,7 +57,7 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR // Initialize client on first use (lazy initialization) if err := p.ensureClient(serviceAccountKey); err != nil { - return nil, status.Error(codes.Internal, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) + return nil, status.Error(codes.Unauthenticated, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) } // check if server already exists @@ -71,6 +72,13 @@ func (p *Provider) CreateMachine(ctx context.Context, req *driver.CreateMachineR server, err = p.client.CreateServer(ctx, projectID, providerSpec.Region, p.createServerRequest(req, providerSpec)) if err != nil { klog.Errorf("Failed to create server for machine %q: %v", req.Machine.Name, err) + + // Check for resource exhaustion errors to avoid spamming the API + errMsg := strings.ToLower(err.Error()) + if strings.Contains(errMsg, "no valid host") || strings.Contains(errMsg, "quota exceeded") { + return nil, status.Error(codes.ResourceExhausted, fmt.Sprintf("failed to create server: %v", err)) + } + return nil, status.Error(codes.Unavailable, fmt.Sprintf("failed to create server: %v", err)) } } diff --git a/pkg/provider/delete.go b/pkg/provider/delete.go index 90f78cc5..1f86ff83 100644 --- a/pkg/provider/delete.go +++ b/pkg/provider/delete.go @@ -31,7 +31,7 @@ func (p *Provider) DeleteMachine(ctx context.Context, req *driver.DeleteMachineR // Initialize client on first use (lazy initialization) if err := p.ensureClient(serviceAccountKey); err != nil { - return nil, status.Error(codes.Internal, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) + return nil, status.Error(codes.Unauthenticated, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) } var projectID, serverID string diff --git a/pkg/provider/list.go b/pkg/provider/list.go index 1d421ba0..b6cfa2bd 100644 --- a/pkg/provider/list.go +++ b/pkg/provider/list.go @@ -31,7 +31,7 @@ func (p *Provider) ListMachines(ctx context.Context, req *driver.ListMachinesReq // Initialize client on first use (lazy initialization) if err := p.ensureClient(serviceAccountKey); err != nil { - return nil, status.Error(codes.Internal, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) + return nil, status.Error(codes.Unauthenticated, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) } // Decode ProviderSpec from MachineClass diff --git a/pkg/provider/status.go b/pkg/provider/status.go index dce58a9b..6bcf868c 100644 --- a/pkg/provider/status.go +++ b/pkg/provider/status.go @@ -43,7 +43,7 @@ func (p *Provider) GetMachineStatus(ctx context.Context, req *driver.GetMachineS // Initialize client on first use (lazy initialization) if err := p.ensureClient(serviceAccountKey); err != nil { - return nil, status.Error(codes.Internal, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) + return nil, status.Error(codes.Unauthenticated, fmt.Sprintf("failed to initialize STACKIT client: %v", err)) } // Parse ProviderID to extract projectID and serverID