Skip to content

Commit 334c624

Browse files
authored
fix: avoid not found error mishandled (#23) (#25)
Signed-off-by: Patrik Cyvoct <[email protected]>
1 parent e751fad commit 334c624

File tree

5 files changed

+58
-128
lines changed

5 files changed

+58
-128
lines changed

scaleway/baremetal.go

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121

2222
scwbaremetal "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1alpha1"
2323
"github.com/scaleway/scaleway-sdk-go/scw"
24-
"golang.org/x/xerrors"
2524
v1 "k8s.io/api/core/v1"
2625
"k8s.io/apimachinery/pkg/types"
2726
cloudprovider "k8s.io/cloud-provider"
@@ -191,11 +190,10 @@ func (b *baremetal) getServerOfferName(server *scwbaremetal.Server) (string, err
191190
Zone: server.Zone,
192191
})
193192
if err != nil {
194-
var respErr *scw.ResponseError
195-
if xerrors.As(err, &respErr) {
196-
if respErr.StatusCode == 404 || respErr.StatusCode == 400 {
197-
return "UNKNOWN", nil
198-
}
193+
switch err.(type) {
194+
case *scw.ResourceNotFoundError:
195+
return "UNKNOWN", nil
196+
default:
199197
return "", err
200198
}
201199
}
@@ -217,13 +215,12 @@ func (b *baremetal) getServerByName(name string) (*scwbaremetal.Server, error) {
217215
Name: &name,
218216
}, scw.WithAllPages())
219217
if err != nil {
220-
var respErr *scw.ResponseError
221-
if xerrors.As(err, &respErr) {
222-
if respErr.StatusCode == 404 || respErr.StatusCode == 400 {
223-
continue
224-
}
218+
switch err.(type) {
219+
case *scw.ResourceNotFoundError:
220+
continue
221+
default:
222+
return nil, err
225223
}
226-
return nil, err
227224
}
228225

229226
for _, srv := range resp.Servers {
@@ -258,13 +255,12 @@ func (b *baremetal) getServerByProviderID(providerID string) (*scwbaremetal.Serv
258255
Zone: scw.Zone(zone),
259256
})
260257
if err != nil {
261-
var respErr *scw.ResponseError
262-
if xerrors.As(err, &respErr) {
263-
if respErr.StatusCode == 404 || respErr.StatusCode == 400 {
264-
return nil, cloudprovider.InstanceNotFound
265-
}
258+
switch err.(type) {
259+
case *scw.ResourceNotFoundError:
260+
return nil, cloudprovider.InstanceNotFound
261+
default:
262+
return nil, err
266263
}
267-
return nil, err
268264
}
269265
return server, nil
270266
}

scaleway/baremetal_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func (f *fakeBaremetalAPI) ListServers(req *scwbaremetal.ListServersRequest, opt
156156
func (f *fakeBaremetalAPI) GetServer(req *scwbaremetal.GetServerRequest, opts ...scw.RequestOption) (*scwbaremetal.Server, error) {
157157
server, ok := f.Servers[req.ServerID]
158158
if !ok {
159-
return nil, &scw.ResponseError{StatusCode: 404}
159+
return nil, &scw.ResourceNotFoundError{}
160160
}
161161

162162
server.ID = req.ServerID
@@ -166,7 +166,7 @@ func (f *fakeBaremetalAPI) GetServer(req *scwbaremetal.GetServerRequest, opts ..
166166
func (f *fakeBaremetalAPI) GetOffer(req *scwbaremetal.GetOfferRequest, opts ...scw.RequestOption) (*scwbaremetal.Offer, error) {
167167
offer, ok := f.Offers[req.OfferID]
168168
if !ok {
169-
return nil, &scw.ResponseError{StatusCode: 404}
169+
return nil, &scw.ResourceNotFoundError{}
170170
}
171171

172172
offer.ID = req.OfferID

scaleway/instances.go

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222

2323
scwinstance "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
2424
"github.com/scaleway/scaleway-sdk-go/scw"
25-
"golang.org/x/xerrors"
2625
v1 "k8s.io/api/core/v1"
2726
"k8s.io/apimachinery/pkg/types"
2827
cloudprovider "k8s.io/cloud-provider"
@@ -203,13 +202,12 @@ func (i *instances) getServerByName(name string) (*scwinstance.Server, error) {
203202
}, scw.WithAllPages())
204203

205204
if err != nil {
206-
var respErr *scw.ResponseError
207-
if xerrors.As(err, &respErr) {
208-
if respErr.StatusCode == 404 || respErr.StatusCode == 400 {
209-
continue
210-
}
205+
switch err.(type) {
206+
case *scw.ResourceNotFoundError:
207+
continue
208+
default:
209+
return nil, err
211210
}
212-
return nil, err
213211
}
214212

215213
for _, srv := range resp.Servers {
@@ -245,13 +243,12 @@ func (i *instances) getServerByProviderID(providerID string) (*scwinstance.Serve
245243
Zone: scw.Zone(zone),
246244
})
247245
if err != nil {
248-
var respErr *scw.ResponseError
249-
if xerrors.As(err, &respErr) {
250-
if respErr.StatusCode == 404 || respErr.StatusCode == 400 {
251-
return nil, cloudprovider.InstanceNotFound
252-
}
246+
switch err.(type) {
247+
case *scw.ResourceNotFoundError:
248+
return nil, cloudprovider.InstanceNotFound
249+
default:
250+
return nil, err
253251
}
254-
return nil, err
255252
}
256253

257254
return resp.Server, nil

scaleway/instances_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ func (f *fakeInstanceAPI) ListServers(req *scwinstance.ListServersRequest, opts
137137
func (f *fakeInstanceAPI) GetServer(req *scwinstance.GetServerRequest, opts ...scw.RequestOption) (*scwinstance.GetServerResponse, error) {
138138
server, ok := f.Servers[req.ServerID]
139139
if !ok {
140-
return nil, &scw.ResponseError{StatusCode: 404}
140+
return nil, &scw.ResourceNotFoundError{}
141141
}
142142

143143
server.ID = req.ServerID

scaleway/loadbalancers.go

Lines changed: 31 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@ package scaleway
1919
import (
2020
"context"
2121
"fmt"
22-
"net/http"
2322
"os"
2423
"strconv"
2524
"strings"
2625
"time"
2726

2827
scwlb "github.com/scaleway/scaleway-sdk-go/api/lb/v1"
2928
"github.com/scaleway/scaleway-sdk-go/scw"
30-
"golang.org/x/xerrors"
3129
v1 "k8s.io/api/core/v1"
3230
"k8s.io/klog"
3331
)
@@ -312,13 +310,8 @@ func (l *loadbalancers) deleteLoadBalancer(ctx context.Context, lb *scwlb.LB, se
312310

313311
err := l.api.DeleteLB(request)
314312
if err != nil {
315-
klog.Errorf("error creating load balancer: %v", err)
316-
var respErr *scw.ResponseError
317-
if xerrors.As(err, &respErr) {
318-
return fmt.Errorf("error on call DeleteLb with LbID %s: error %d with message %s", lb.ID, respErr.StatusCode, respErr.Message)
319-
}
320-
321-
return err
313+
klog.Errorf("error deleting load balancer %s: %v", lb.ID, err)
314+
return fmt.Errorf("error deleting load balancer %s: %v", lb.ID, err)
322315
}
323316

324317
return nil
@@ -375,13 +368,13 @@ func (l *loadbalancers) fetchLoadBalancer(ctx context.Context, clusterName strin
375368
Region: region,
376369
})
377370
if err != nil {
378-
var respErr *scw.ResponseError
379-
if xerrors.As(err, &respErr) && respErr.StatusCode == http.StatusNotFound {
371+
switch err.(type) {
372+
case *scw.ResourceNotFoundError:
380373
return nil, LoadBalancerNotFound
374+
default:
375+
klog.Errorf("an error occurred while fetching loadbalancer '%s/%s' for service '%s/%s'", region, loadBalancerID, service.Namespace, service.Name)
376+
return nil, err
381377
}
382-
383-
klog.Errorf("an error occurred while fetching loadbalancer '%s/%s' for service '%s/%s'", region, loadBalancerID, service.Namespace, service.Name)
384-
return nil, err
385378
}
386379

387380
return resp, nil
@@ -401,13 +394,12 @@ func (l *loadbalancers) getLoadbalancerByName(ctx context.Context, service *v1.S
401394
Region: region,
402395
}, scw.WithAllPages())
403396
if err != nil {
404-
var respErr *scw.ResponseError
405-
if xerrors.As(err, &respErr) {
406-
if respErr.StatusCode == 404 || respErr.StatusCode == 400 {
407-
continue
408-
}
397+
switch err.(type) {
398+
case *scw.ResourceNotFoundError:
399+
continue
400+
default:
401+
return nil, err
409402
}
410-
return nil, err
411403
}
412404

413405
for _, lb := range resp.LBs {
@@ -482,12 +474,7 @@ func (l *loadbalancers) createLoadBalancer(ctx context.Context, clusterName stri
482474
lb, err := l.api.CreateLB(&request)
483475
if err != nil {
484476
klog.Errorf("error creating load balancer for service %s: %v", service.Name, err)
485-
var respErr *scw.ResponseError
486-
if xerrors.As(err, &respErr) {
487-
return nil, fmt.Errorf("error on call CreateLb with name %s: error %d with message %s", lbName, respErr.StatusCode, respErr.Message)
488-
}
489-
490-
return nil, fmt.Errorf("error on call CreateLb with name %s: %s", lbName, err.Error())
477+
return nil, fmt.Errorf("error creating load balancer for service %s: %v", service.Name, err)
491478
}
492479

493480
// annotate newly created loadBalancer
@@ -528,12 +515,7 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
528515
}, scw.WithAllPages())
529516

530517
if err != nil {
531-
var respErr *scw.ResponseError
532-
if xerrors.As(err, &respErr) {
533-
return fmt.Errorf("error on call ListFrontends with LbID %s: error %d with message %s", loadbalancer.ID, respErr.StatusCode, respErr.Message)
534-
}
535-
536-
return err
518+
return fmt.Errorf("error updating load balancer %s: %v", loadbalancer.ID, err)
537519
}
538520

539521
frontends := respFrontends.Frontends
@@ -558,12 +540,7 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
558540
})
559541

560542
if err != nil {
561-
var respErr *scw.ResponseError
562-
if xerrors.As(err, &respErr) {
563-
return fmt.Errorf("error on call DeleteFrontend with FrontendID %s: error %d with message %s", frontend.ID, respErr.StatusCode, respErr.Message)
564-
}
565-
566-
return err
543+
return fmt.Errorf("error deleting frontend %s: %v", frontend.ID, err)
567544
}
568545
} else {
569546
portFrontends[frontend.InboundPort] = frontend
@@ -576,12 +553,7 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
576553
}, scw.WithAllPages())
577554

578555
if err != nil {
579-
var respErr *scw.ResponseError
580-
if xerrors.As(err, &respErr) {
581-
return fmt.Errorf("error on call ListBackends with LoadBalancerID %s: error %d with message %s", loadbalancer.ID, respErr.StatusCode, respErr.Message)
582-
}
583-
584-
return err
556+
return fmt.Errorf("error listing backend for load balancer %s: %v", loadbalancer.ID, err)
585557
}
586558

587559
backends := respBackends.Backends
@@ -604,12 +576,7 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
604576
})
605577

606578
if err != nil {
607-
var respErr *scw.ResponseError
608-
if xerrors.As(err, &respErr) {
609-
return fmt.Errorf("error on call DeleteBackend with BackendID %s: error %d with message %s", backend.ID, respErr.StatusCode, respErr.Message)
610-
}
611-
612-
return err
579+
return fmt.Errorf("error deleing backend %s: %v", backend.ID, err)
613580
}
614581
} else {
615582
portBackends[backend.ForwardPort] = backend
@@ -629,13 +596,8 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
629596
updateBackendRequest.ForwardPort = port.NodePort
630597
_, err = l.api.UpdateBackend(updateBackendRequest)
631598
if err != nil {
632-
klog.Errorf("error updating backend: %v", err)
633-
var respErr *scw.ResponseError
634-
if xerrors.As(err, &respErr) {
635-
return fmt.Errorf("error on call UpdateBackend with BackendID %s: error %d with message %s", backend.ID, respErr.StatusCode, respErr.Message)
636-
}
637-
638-
return err
599+
klog.Errorf("error updating backend %s: %v", backend.ID, err)
600+
return fmt.Errorf("error updating backend %s: %v", backend.ID, err)
639601
}
640602

641603
updateHealthCheckRequest, err := l.makeUpdateHealthCheckRequest(backend, port.NodePort, service, nodes)
@@ -646,13 +608,8 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
646608

647609
_, err = l.api.UpdateHealthCheck(updateHealthCheckRequest)
648610
if err != nil {
649-
klog.Errorf("error updating healthcheck: %v", err)
650-
var respErr *scw.ResponseError
651-
if xerrors.As(err, &respErr) {
652-
return fmt.Errorf("error on call UpdateHealthCheck with BackendID %s: error %d with message %s", backend.ID, respErr.StatusCode, respErr.Message)
653-
}
654-
655-
return err
611+
klog.Errorf("error updating healthcheck for backend %s: %v", backend.ID, err)
612+
return fmt.Errorf("error updating healthcheck for backend %s: %v", backend.ID, err)
656613
}
657614

658615
var serverIPs []string
@@ -669,12 +626,8 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
669626

670627
respBackend, err := l.api.SetBackendServers(setBackendServersRequest)
671628
if err != nil {
672-
klog.Errorf("error setting backend servers: %v", err)
673-
var respErr *scw.ResponseError
674-
if xerrors.As(err, &respErr) {
675-
return fmt.Errorf("error on call SetBackendServers with BackendID %s: error %d with message %s", backend.ID, respErr.StatusCode, respErr.Message)
676-
}
677-
return err
629+
klog.Errorf("error setting backend servers for backend %s: %v", backend.ID, err)
630+
return fmt.Errorf("error setting backend servers for backend %s: %v", backend.ID, err)
678631
}
679632

680633
portBackends[backend.ForwardPort] = respBackend
@@ -687,12 +640,8 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
687640

688641
respBackend, err := l.api.CreateBackend(request)
689642
if err != nil {
690-
klog.Errorf("error creating backend: %v", err)
691-
var respErr *scw.ResponseError
692-
if xerrors.As(err, &respErr) {
693-
return fmt.Errorf("error on call CreateBackend with LoadBalancerID %s: error %d with message %s", loadbalancer.ID, respErr.StatusCode, respErr.Message)
694-
}
695-
return err
643+
klog.Errorf("error creating backend on load balancer %s: %v", loadbalancer.ID, err)
644+
return fmt.Errorf("error creating backend on load balancer %s: %v", loadbalancer.ID, err)
696645
}
697646

698647
portBackends[port.NodePort] = respBackend
@@ -712,12 +661,8 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
712661
})
713662

714663
if err != nil {
715-
klog.Errorf("error updating frontend: %v", err)
716-
var respErr *scw.ResponseError
717-
if xerrors.As(err, &respErr) {
718-
return fmt.Errorf("error on call UpdateFrontend with FrontendID %s and Backend ID %s: error %d with message %s", frontend.ID, portBackends[port.NodePort].ID, respErr.StatusCode, respErr.Message)
719-
}
720-
return err
664+
klog.Errorf("error updating frontend %s: %v", frontend.ID, err)
665+
return fmt.Errorf("error updating frontend %s: %v", frontend.ID, err)
721666
}
722667

723668
frontendID = frontend.ID
@@ -732,12 +677,8 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
732677
})
733678

734679
if err != nil {
735-
klog.Errorf("error creating frontend: %v", err)
736-
var respErr *scw.ResponseError
737-
if xerrors.As(err, &respErr) {
738-
return fmt.Errorf("error on call CreateFronted with LbID %s and Backend ID %s: error %d with message %s", loadbalancer.ID, portBackends[port.NodePort].ID, respErr.StatusCode, respErr.Message)
739-
}
740-
return err
680+
klog.Errorf("error creating frontend on load balancer %s: %v", loadbalancer.ID, err)
681+
return fmt.Errorf("error creating frontend on load balancer %s: %v", loadbalancer.ID, err)
741682
}
742683

743684
frontendID = resp.ID
@@ -818,12 +759,8 @@ func (l *loadbalancers) updateLoadBalancer(ctx context.Context, loadbalancer *sc
818759
Type: loadBalancerType,
819760
})
820761
if err != nil {
821-
klog.Errorf("error updating lb: %v", err)
822-
var respErr *scw.ResponseError
823-
if xerrors.As(err, &respErr) {
824-
return fmt.Errorf("Unable to migrate loadbalancer %s error %d with message %s", loadbalancer.ID, respErr.StatusCode, respErr.Message)
825-
}
826-
return err
762+
klog.Errorf("error updating load balancer %s: %v", loadbalancer.ID, err)
763+
return fmt.Errorf("error updating load balancer %s: %v", loadbalancer.ID, err)
827764
}
828765
}
829766

0 commit comments

Comments
 (0)