forked from kubernetes-sigs/cluster-api-provider-openstack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
errors.go
99 lines (81 loc) · 2.72 KB
/
errors.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
Copyright 2020 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package errors
import (
"errors"
"net/http"
"github.com/gophercloud/gophercloud"
)
func IsRetryable(err error) bool {
var errUnexpectedResponseCode gophercloud.ErrUnexpectedResponseCode
if errors.As(err, &errUnexpectedResponseCode) {
statusCode := errUnexpectedResponseCode.GetStatusCode()
return statusCode >= 500 && statusCode != http.StatusNotImplemented
}
return false
}
func IsNotFound(err error) bool {
// Gophercloud is not consistent in how it returns 404 errors. Sometimes
// it returns a pointer to the error, sometimes it returns the error
// directly.
// Some discussion here: https://github.com/gophercloud/gophercloud/issues/2279
var errDefault404 gophercloud.ErrDefault404
var pErrDefault404 *gophercloud.ErrDefault404
var errNotFound gophercloud.ErrResourceNotFound
var pErrNotFound *gophercloud.ErrResourceNotFound
if errors.As(err, &errDefault404) || errors.As(err, &pErrDefault404) || errors.As(err, &errNotFound) || errors.As(err, &pErrNotFound) {
return true
}
var errUnexpectedResponseCode gophercloud.ErrUnexpectedResponseCode
if errors.As(err, &errUnexpectedResponseCode) {
if errUnexpectedResponseCode.Actual == http.StatusNotFound {
return true
}
}
return false
}
func IsInvalidError(err error) bool {
var errDefault400 gophercloud.ErrDefault400
if errors.As(err, &errDefault400) {
return true
}
var errUnexpectedResponseCode gophercloud.ErrUnexpectedResponseCode
if errors.As(err, &errUnexpectedResponseCode) {
if errUnexpectedResponseCode.Actual == http.StatusBadRequest {
return true
}
}
return false
}
func IsConflict(err error) bool {
var errDefault409 gophercloud.ErrDefault409
if errors.As(err, &errDefault409) {
return true
}
var errUnexpectedResponseCode gophercloud.ErrUnexpectedResponseCode
if errors.As(err, &errUnexpectedResponseCode) {
if errUnexpectedResponseCode.Actual == http.StatusConflict {
return true
}
}
return false
}
func IsNotImplementedError(err error) bool {
var errUnexpectedResponseCode gophercloud.ErrUnexpectedResponseCode
if errors.As(err, &errUnexpectedResponseCode) {
if errUnexpectedResponseCode.Actual == http.StatusNotImplemented {
return true
}
}
return false
}