Skip to content

Commit 41b00d3

Browse files
author
Aaron Schlesinger
committed
fix(pkg/gitreceive): replace the AWS SDK with minio-go
1 parent a22473d commit 41b00d3

7 files changed

Lines changed: 72 additions & 50 deletions

File tree

pkg/gitreceive/build.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ import (
1111
"path/filepath"
1212
"strings"
1313

14-
"github.com/aws/aws-sdk-go/service/s3"
1514
"github.com/deis/builder/pkg"
1615
"github.com/deis/builder/pkg/gitreceive/git"
1716
"github.com/deis/builder/pkg/gitreceive/storage"
1817
"github.com/deis/builder/pkg/sys"
1918
"github.com/deis/pkg/log"
19+
s3 "github.com/minio/minio-go"
2020
"gopkg.in/yaml.v2"
2121

2222
"k8s.io/kubernetes/pkg/api"
@@ -42,7 +42,7 @@ func run(cmd *exec.Cmd) error {
4242
return cmd.Run()
4343
}
4444

45-
func build(conf *Config, s3Client *s3.S3, kubeClient *client.Client, fs sys.FS, env sys.Env, builderKey, rawGitSha string) error {
45+
func build(conf *Config, s3Client *s3.Client, kubeClient *client.Client, fs sys.FS, env sys.Env, builderKey, rawGitSha string) error {
4646
repo := conf.Repository
4747
gitSha, err := git.NewSha(rawGitSha)
4848
if err != nil {

pkg/gitreceive/storage/auth.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"os"
66
"strings"
77

8-
"github.com/aws/aws-sdk-go/aws/credentials"
98
"github.com/deis/builder/pkg/sys"
109
)
1110

@@ -20,6 +19,11 @@ var (
2019
emptyAuth = credentials.AnonymousCredentials
2120
)
2221

22+
type creds struct {
23+
accessKeyID string
24+
accessKeySecret string
25+
}
26+
2327
// getAuth gets storage credentials from accessKeyIDFile and accessSecretKeyFile.
2428
// if a key exists but not a secret, or vice-versa, returns an error.
2529
// if both don't exist returns emptyAuth.
@@ -39,7 +43,7 @@ func getAuth(fs sys.FS) (*credentials.Credentials, error) {
3943

4044
id := strings.TrimSpace(string(accessKeyIDBytes))
4145
secret := strings.TrimSpace(string(accessSecretKeyBytes))
42-
return credentials.NewStaticCredentials(id, secret, ""), nil
46+
return &creds{accessKeyID: id, accessKeySecret: secret}, nil
4347
}
4448

4549
// CredsOK checks if the required credentials to make a request exist
@@ -49,8 +53,7 @@ func CredsOK(fs sys.FS) bool {
4953
return false
5054
}
5155

52-
auth, _ := cred.Get()
53-
if auth.AccessKeyID == "" && auth.SecretAccessKey == "" {
56+
if creds.accessKeyID == "" && creds.accessKeySecret == "" {
5457
return false
5558
}
5659

pkg/gitreceive/storage/bucket.go

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,29 @@
11
package storage
22

33
import (
4-
"github.com/aws/aws-sdk-go/aws"
5-
"github.com/aws/aws-sdk-go/aws/awserr"
6-
"github.com/aws/aws-sdk-go/service/s3"
4+
s3 "github.com/minio/minio-go"
75
)
86

97
const (
108
bucketAlreadyExistsCode = "BucketAlreadyExists"
9+
nonExistentBucketCode = "NoSuchBucket"
1110
)
1211

1312
var (
1413
// ACLPublicRead default ACL for objects in the S3 API compatible storage
15-
ACLPublicRead = aws.String("public-read")
14+
ACLPublicRead = "public-read"
1615
)
1716

1817
// CreateBucket creates a new bucket in the S3 API compatible storage or
1918
// return an error in case the bucket already exists
20-
func CreateBucket(svc *s3.S3, bucketName string) error {
21-
_, err := svc.CreateBucket(&s3.CreateBucketInput{
22-
Bucket: aws.String(bucketName),
23-
ACL: ACLPublicRead,
24-
})
25-
19+
func CreateBucket(creator BucketCreator, bucketName string) error {
20+
_, err := creator.MakeBucket(bucketName, ACLPublicRead, "")
2621
if err != nil {
27-
if awsErr, ok := err.(awserr.Error); ok {
28-
if awsErr.Code() == bucketAlreadyExistsCode {
29-
return nil
30-
}
22+
minioErr := s3.ToErrorResponse(err)
23+
if minioErr.Code == bucketAlreadyExistsCode {
24+
return nil
3125
}
32-
3326
return err
3427
}
35-
3628
return nil
3729
}

pkg/gitreceive/storage/client.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package storage
22

33
import (
4-
"github.com/aws/aws-sdk-go/aws"
5-
"github.com/aws/aws-sdk-go/aws/session"
6-
"github.com/aws/aws-sdk-go/service/s3"
74
"github.com/deis/builder/pkg/sys"
5+
s3 "github.com/minio/minio-go"
86
)
97

108
// GetClient returns a S3 API compatible storage client
11-
func GetClient(regionStr string, fs sys.FS, env sys.Env) (*s3.S3, error) {
9+
func GetClient(regionStr string, fs sys.FS, env sys.Env) (*s3.Client, error) {
1210
auth, err := getAuth(fs)
1311
if err != nil {
1412
return nil, err
@@ -19,10 +17,5 @@ func GetClient(regionStr string, fs sys.FS, env sys.Env) (*s3.S3, error) {
1917
return nil, err
2018
}
2119

22-
return s3.New(session.New(&aws.Config{
23-
Credentials: auth,
24-
Region: aws.String(regionStr),
25-
Endpoint: aws.String(endpoint),
26-
S3ForcePathStyle: aws.Bool(true),
27-
})), nil
20+
return s3.New(endpoint, auth.accessKeyID, auth.accessKeySecret, false), nil
2821
}

pkg/gitreceive/storage/endpoint.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package storage
22

33
import (
44
"fmt"
5+
"os"
6+
"strings"
57

68
"github.com/deis/builder/pkg/sys"
79
)
@@ -21,15 +23,30 @@ var (
2123
)
2224
)
2325

24-
func getEndpoint(env sys.Env) (string, error) {
26+
func stripScheme(str string) string {
27+
schemes := []string{"http://", "https://"}
28+
for _, scheme := range schemes {
29+
if strings.HasPrefix(str, scheme) {
30+
str = str[len(scheme):]
31+
}
32+
}
33+
return str
34+
}
35+
36+
type endpoint struct {
37+
urlStr string
38+
secure bool
39+
}
40+
41+
func getEndpoint(env sys.Env) (*endpoint, error) {
2542
mHost := env.Get(minioHostEnvVar)
2643
mPort := env.Get(minioPortEnvVar)
2744
S3EP := env.Get(outsideStorageEndpoint)
2845
if S3EP != "" {
29-
return S3EP, nil
46+
return &endpoint{urlStr: stripScheme(S3EP), secure: true}, nil
3047
} else if mHost != "" && mPort != "" {
31-
return fmt.Sprintf("http://%s:%s", mHost, mPort), nil
48+
return &endpoint{urlStr: fmt.Sprintf("%s:%s", mHost, mPort), secure: false}, nil
3249
} else {
33-
return "", errNoStorageConfig
50+
return nil, errNoStorageConfig
3451
}
3552
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package storage
2+
3+
import (
4+
s3 "github.com/minio/minio-go"
5+
)
6+
7+
type BucketCreator interface {
8+
MakeBucket(bucketName string, acl s3.BucketACL, location string) error
9+
}
10+
11+
type ObjectStatter interface {
12+
StatObject(bucketName, objectKey string) (s3.ObjectInfo, error)
13+
}
14+
15+
type ObjectPutter interface {
16+
PutObject(bucketName, objectKey string, reader io.Reader, contentType string) (int64, error)
17+
}

pkg/gitreceive/storage/object.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,27 @@ package storage
33
import (
44
"io"
55

6-
"github.com/aws/aws-sdk-go/aws"
7-
"github.com/aws/aws-sdk-go/service/s3"
6+
s3 "github.com/minio/minio-go"
87
)
98

10-
func ObjectExists(svc *s3.S3, bucket, objName string) (bool, error) {
11-
_, err := svc.HeadBucket(&s3.HeadBucketInput{
12-
Bucket: aws.String(bucket),
13-
})
9+
const (
10+
noSuchKeyCode = "NoSuchKey"
11+
12+
octetStream = "application/octet-stream"
13+
)
14+
15+
func ObjectExists(statter ObjectStatter, bucket, objName string) (bool, error) {
16+
objInfo, err := statter.StatObject(bucketName, objKey)
1417
if err != nil {
1518
return false, err
1619
}
20+
if objInfo.Code == noSuchKeyCode || objInfo.Err != nil {
21+
return false, nil
22+
}
1723
return true, nil
1824
}
1925

20-
func UploadObject(svc *s3.S3, bucketName, objKey string, reader io.Reader) error {
21-
params := &s3.PutObjectInput{
22-
Body: aws.ReadSeekCloser(reader),
23-
Bucket: aws.String(bucketName),
24-
Key: aws.String(objKey),
25-
ACL: ACLPublicRead,
26-
}
27-
_, err := svc.PutObject(params)
26+
func UploadObject(putter ObjectPutter, bucketName, objKey string, reader io.Reader) error {
27+
_, err := putter.PutObject(bucketName, objKey, reader, octetStream)
2828
return err
2929
}

0 commit comments

Comments
 (0)