/
error.go
128 lines (107 loc) · 2.77 KB
/
error.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package s3bucket
import (
"strings"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/giantswarm/microerror"
)
var executionFailedError = µerror.Error{
Kind: "executionFailedError",
}
var invalidConfigError = µerror.Error{
Kind: "invalidConfigError",
}
// IsInvalidConfig asserts invalidConfigError.
func IsInvalidConfig(err error) bool {
return microerror.Cause(err) == invalidConfigError
}
var notFoundError = µerror.Error{
Kind: "notFoundError",
}
// IsNotFound asserts notFoundError.
func IsNotFound(err error) bool {
return microerror.Cause(err) == notFoundError
}
var bucketNotFoundError = µerror.Error{
Kind: "bucketNotFoundError",
}
// IsBucketNotFound asserts bucket not found error from upstream's API code.
func IsBucketNotFound(err error) bool {
c := microerror.Cause(err)
aerr, ok := c.(awserr.Error)
if !ok {
return false
}
// hack for HeadBucket request that returns a wrong error code
if aerr.Code() == "NotFound" {
return true
}
if aerr.Code() == s3.ErrCodeNoSuchBucket {
return true
}
if c == bucketNotFoundError {
return true
}
return false
}
// IsBucketAlreadyExists asserts bucket already exists error from upstream's
// API code.
func IsBucketAlreadyExists(err error) bool {
aerr, ok := err.(awserr.Error)
if !ok {
return false
}
if aerr.Code() == s3.ErrCodeBucketAlreadyExists {
return true
}
return false
}
// IsBucketAlreadyOwnedByYou asserts bucket already owned by you error from
// upstream's API code.
func IsBucketAlreadyOwnedByYou(err error) bool {
aerr, ok := err.(awserr.Error)
if !ok {
return false
}
if aerr.Code() == s3.ErrCodeBucketAlreadyOwnedByYou {
return true
}
return false
}
// IsAccessDenied asserts access denied error on s3 bucket operation.
func IsAccessDenied(err error) bool {
if err != nil {
return strings.Contains(err.Error(), "AccessDenied")
}
return false
}
var bucketNotEmptyError = µerror.Error{
Kind: "bucketNotEmptyError",
}
// IsBucketNotEmpty asserts bucketNotEmptyError. It also checks for
// BucketNotEmpty error codes from the AWS SDK. An error we expect looks like
// the one below.
//
// BucketNotEmpty: The bucket you tried to delete is not empty\n\tstatus code: 409, request id: 4B2CDF3222517C9D, host id: mOJAOuJsV/3CEeAkyTw1k3s5HLFsa5PHMkUfZv5lqtOKxiR67jclbqIHrzvtDa7E676h908MIY0=
//
func IsBucketNotEmpty(err error) bool {
c := microerror.Cause(err)
aerr, ok := c.(awserr.Error)
if !ok {
return false
}
if aerr.Code() == "BucketNotEmpty" {
return true
}
if c == bucketNotEmptyError {
return true
}
return false
}
var wrongTypeError = µerror.Error{
Kind: "wrongTypeError",
}
// IsWrongType asserts wrongTypeError.
func IsWrongType(err error) bool {
return microerror.Cause(err) == wrongTypeError
}