Skip to content

Commit 93759f9

Browse files
authored
fix: handle all types of 404 (#37) (#38)
Signed-off-by: Patrik Cyvoct <[email protected]>
1 parent 29b38e8 commit 93759f9

File tree

4 files changed

+36
-29
lines changed

4 files changed

+36
-29
lines changed

scaleway/baremetal.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,10 @@ func (b *baremetal) getServerOfferName(server *scwbaremetal.Server) (string, err
190190
Zone: server.Zone,
191191
})
192192
if err != nil {
193-
switch err.(type) {
194-
case *scw.ResourceNotFoundError:
193+
if is404Error(err) {
195194
return "UNKNOWN", nil
196-
default:
197-
return "", err
198195
}
196+
return "", err
199197
}
200198

201199
return offer.Name, nil
@@ -215,12 +213,10 @@ func (b *baremetal) getServerByName(name string) (*scwbaremetal.Server, error) {
215213
Name: &name,
216214
}, scw.WithAllPages())
217215
if err != nil {
218-
switch err.(type) {
219-
case *scw.ResourceNotFoundError:
216+
if is404Error(err) {
220217
continue
221-
default:
222-
return nil, err
223218
}
219+
return nil, err
224220
}
225221

226222
for _, srv := range resp.Servers {
@@ -255,12 +251,10 @@ func (b *baremetal) getServerByProviderID(providerID string) (*scwbaremetal.Serv
255251
Zone: scw.Zone(zone),
256252
})
257253
if err != nil {
258-
switch err.(type) {
259-
case *scw.ResourceNotFoundError:
254+
if is404Error(err) {
260255
return nil, cloudprovider.InstanceNotFound
261-
default:
262-
return nil, err
263256
}
257+
return nil, err
264258
}
265259
return server, nil
266260
}

scaleway/instances.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,10 @@ func (i *instances) getServerByName(name string) (*scwinstance.Server, error) {
202202
}, scw.WithAllPages())
203203

204204
if err != nil {
205-
switch err.(type) {
206-
case *scw.ResourceNotFoundError:
205+
if is404Error(err) {
207206
continue
208-
default:
209-
return nil, err
210207
}
208+
return nil, err
211209
}
212210

213211
for _, srv := range resp.Servers {
@@ -243,12 +241,10 @@ func (i *instances) getServerByProviderID(providerID string) (*scwinstance.Serve
243241
Zone: scw.Zone(zone),
244242
})
245243
if err != nil {
246-
switch err.(type) {
247-
case *scw.ResourceNotFoundError:
244+
if is404Error(err) {
248245
return nil, cloudprovider.InstanceNotFound
249-
default:
250-
return nil, err
251246
}
247+
return nil, err
252248
}
253249

254250
return resp.Server, nil

scaleway/loadbalancers.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -382,13 +382,11 @@ func (l *loadbalancers) fetchLoadBalancer(ctx context.Context, clusterName strin
382382
Region: region,
383383
})
384384
if err != nil {
385-
switch err.(type) {
386-
case *scw.ResourceNotFoundError:
385+
if is404Error(err) {
387386
return nil, LoadBalancerNotFound
388-
default:
389-
klog.Errorf("an error occurred while fetching loadbalancer '%s/%s' for service '%s/%s'", region, loadBalancerID, service.Namespace, service.Name)
390-
return nil, err
391387
}
388+
klog.Errorf("an error occurred while fetching loadbalancer '%s/%s' for service '%s/%s'", region, loadBalancerID, service.Namespace, service.Name)
389+
return nil, err
392390
}
393391

394392
return resp, nil
@@ -408,12 +406,10 @@ func (l *loadbalancers) getLoadbalancerByName(ctx context.Context, service *v1.S
408406
Region: region,
409407
}, scw.WithAllPages())
410408
if err != nil {
411-
switch err.(type) {
412-
case *scw.ResourceNotFoundError:
409+
if is404Error(err) {
413410
continue
414-
default:
415-
return nil, err
416411
}
412+
return nil, err
417413
}
418414

419415
for _, lb := range resp.LBs {

scaleway/utils.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package scaleway
2+
3+
import (
4+
"net/http"
5+
6+
"github.com/scaleway/scaleway-sdk-go/scw"
7+
)
8+
9+
// is404Error returns true if err is an HTTP 404 error
10+
func is404Error(err error) bool {
11+
switch newErr := err.(type) {
12+
case *scw.ResourceNotFoundError:
13+
return true
14+
case *scw.ResponseError:
15+
if newErr.StatusCode == http.StatusNotFound {
16+
return true
17+
}
18+
}
19+
20+
return false
21+
}

0 commit comments

Comments
 (0)