Skip to content

Commit db3221c

Browse files
authored
shorten create function (#93)
Signed-off-by: Felix Breuer <f.breuer94@gmail.com>
1 parent 654269f commit db3221c

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed

pkg/provider/create.go

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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
3331
func (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

206209
func (p *Provider) getServerByName(ctx context.Context, projectID, region, serverName string) (*client.Server, error) {

0 commit comments

Comments
 (0)