This repository has been archived by the owner on Apr 21, 2021. It is now read-only.
forked from giantswarm/aws-operator
/
bucket.go
95 lines (78 loc) · 2 KB
/
bucket.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
package aws
import (
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/s3"
microerror "github.com/giantswarm/microkit/error"
"github.com/juju/errgo"
)
type Bucket struct {
Name string
AWSEntity
}
func (b *Bucket) CreateIfNotExists() (bool, error) {
if err := b.CreateOrFail(); err != nil {
underlying := errgo.Cause(err)
if awserr, ok := underlying.(awserr.Error); ok {
if awserr.Code() == s3.ErrCodeBucketAlreadyOwnedByYou {
return false, nil
}
}
return false, microerror.MaskAny(err)
}
return true, nil
}
func (b *Bucket) CreateOrFail() error {
if _, err := b.Clients.S3.CreateBucket(&s3.CreateBucketInput{
Bucket: aws.String(b.Name),
}); err != nil {
return microerror.MaskAny(err)
}
if err := b.Clients.S3.WaitUntilBucketExists(&s3.HeadBucketInput{
Bucket: aws.String(b.Name),
}); err != nil {
return microerror.MaskAny(err)
}
return nil
}
func (b *Bucket) Delete() error {
if _, err := b.Clients.S3.DeleteBucket(&s3.DeleteBucketInput{
Bucket: aws.String(b.Name),
}); err != nil {
return microerror.MaskAny(err)
}
return nil
}
type BucketObject struct {
Name string
Data string
Bucket *Bucket
AWSEntity
}
func (bo *BucketObject) CreateIfNotExists() (bool, error) {
return false, microerror.MaskAny(notImplementedMethodError)
}
func (bo *BucketObject) CreateOrFail() error {
if bo.Bucket == nil {
return microerror.MaskAny(noBucketInBucketObjectError)
}
if _, err := bo.Clients.S3.PutObject(&s3.PutObjectInput{
Body: strings.NewReader(bo.Data),
Bucket: aws.String(bo.Bucket.Name),
Key: aws.String(bo.Name),
ContentLength: aws.Int64(int64(len(bo.Data))),
}); err != nil {
return microerror.MaskAny(err)
}
return nil
}
func (bo *BucketObject) Delete() error {
if _, err := bo.Clients.S3.DeleteObject(&s3.DeleteObjectInput{
Bucket: aws.String(bo.Bucket.Name),
Key: aws.String(bo.Name),
}); err != nil {
return microerror.MaskAny(err)
}
return nil
}