Skip to content

Commit 1b48115

Browse files
author
Aaron Schlesinger
committed
fix(*): use goamz instead of the official AWS lib
1 parent cce9ce3 commit 1b48115

9 files changed

Lines changed: 104 additions & 89 deletions

File tree

glide.lock

Lines changed: 22 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

glide.yaml

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package: github.com/deis/builder
2-
flatten: true
2+
ignore:
3+
- appengine
4+
- appengine/memcache
5+
- appengine/datastore
6+
- appengine/user
37
import:
48
- package: github.com/kelseyhightower/envconfig
59
- package: github.com/coreos/go-etcd
@@ -27,13 +31,4 @@ import:
2731
- /time
2832
- package: github.com/codegangsta/cli
2933
version: a65b733b303f0055f8d324d805f393cd3e7a7904
30-
- package: github.com/aws/aws-sdk-go
31-
version: 87b1e60a50b09e4812dee560b33a238f67305804
32-
subpackages:
33-
- /aws
34-
- /aws/session
35-
ignore:
36-
- appengine
37-
- appengine/memcache
38-
- appengine/datastore
39-
- appengine/user
34+
- package: github.com/mitchellh/goamz

pkg/gitreceive/build.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ import (
1010
"strings"
1111
"time"
1212

13-
"github.com/aws/aws-sdk-go/aws"
14-
"github.com/aws/aws-sdk-go/service/s3"
1513
"github.com/deis/builder/pkg"
1614
"github.com/deis/builder/pkg/gitreceive/log"
1715
"github.com/deis/builder/pkg/gitreceive/storage"
16+
"github.com/mitchellh/goamz/s3"
1817
"github.com/pborman/uuid"
1918
"gopkg.in/yaml.v2"
2019
)
@@ -73,11 +72,11 @@ func build(conf *Config, s3Client *s3.S3, builderKey, gitSha string) error {
7372
tmpDir := os.TempDir()
7473

7574
tarObjKey := fmt.Sprintf("home/%s/tar", slugName)
76-
tarURL := fmt.Sprintf("%s/git/%s", *s3Client.Config.Endpoint, tarObjKey)
75+
tarURL := fmt.Sprintf("%s/git/%s", s3Client.S3Endpoint, tarObjKey)
7776

7877
// this is where workflow tells slugrunner to download the slug from, so we have to tell slugbuilder to upload it to here
7978
pushObjKey := fmt.Sprintf("home/%s/push", fmt.Sprintf("%s:git-%s", appName, gitSha))
80-
pushURL := fmt.Sprintf("%s/%s", *s3Client.Config.Endpoint, pushObjKey)
79+
pushURL := fmt.Sprintf("%s/%s", s3Client.S3Endpoint, pushObjKey)
8180

8281
// Get the application config from the controller, so we can check for a custom buildpack URL
8382
appConf, err := getAppConfig(conf, builderKey, conf.Username, appName)
@@ -173,15 +172,15 @@ func build(conf *Config, s3Client *s3.S3, builderKey, gitSha string) error {
173172
}
174173

175174
bucketName := "git"
176-
if _, err := s3Client.CreateBucket(&s3.CreateBucketInput{Bucket: aws.String(bucketName)}); err != nil {
175+
if err := storage.CreateBucket(s3Client, bucketName); err != nil {
177176
log.Warn("create bucket error: %+v", err)
178177
}
179178

180179
appTgzReader, err := os.Open(absAppTgz)
181180
if err != nil {
182181
return fmt.Errorf("opening %s for read (%s)", appTgz, err)
183182
}
184-
if err := storage.Upload(s3Client, bucketName, tarObjKey, appTgzReader); err != nil {
183+
if err := storage.UploadObject(s3Client, bucketName, tarObjKey, appTgzReader); err != nil {
185184
return fmt.Errorf("uploading %s to %s/%s (%s)", absAppTgz, bucketName, tarObjKey, err)
186185
}
187186

@@ -235,7 +234,11 @@ func build(conf *Config, s3Client *s3.S3, builderKey, gitSha string) error {
235234
// poll the s3 server to ensure the slug exists
236235
// TODO: time out looking
237236
for {
238-
if storage.ObjectExists(s3Client, bucketName, pushObjKey) {
237+
exists, err := storage.ObjectExists(s3Client, bucketName, pushObjKey)
238+
if err != nil {
239+
return fmt.Errorf("Checking if object %s/%s exists (%s)", bucketName, pushObjKey, err)
240+
}
241+
if exists {
239242
break
240243
}
241244
}
Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"os"
77
"strings"
88

9-
"github.com/aws/aws-sdk-go/aws/credentials"
9+
"github.com/mitchellh/goamz/aws"
1010
)
1111

1212
const (
@@ -17,24 +17,28 @@ const (
1717
var (
1818
errMissingKey = fmt.Errorf("missing %s", accessKeyIDFile)
1919
errMissingSecret = fmt.Errorf("missing %s", accessSecretKeyFile)
20+
emptyAuth = &aws.Auth{}
2021
)
2122

2223
// getCreds gets storage credentials from accessKeyIDFile and accessSecretKeyFile.
23-
// if either a key exists but not a secret or vice-versa, returns an error.
24-
// if neither exists, returns credentials.AnonymousCredentials
25-
func getCreds() (*credentials.Credentials, error) {
24+
// if a key exists but not a secret, or vice-versa, returns an error.
25+
// if both don't exist returns emptyAuth.
26+
// otherwise returns a valid auth
27+
func getAuth() (*aws.Auth, error) {
2628
accessKeyIDBytes, accessKeyErr := ioutil.ReadFile(accessKeyIDFile)
2729
accessSecretKeyBytes, accessSecretKeyErr := ioutil.ReadFile(accessSecretKeyFile)
2830
if accessKeyErr == os.ErrNotExist && accessSecretKeyErr == os.ErrNotExist {
29-
return credentials.AnonymousCredentials, nil
31+
return emptyAuth, nil
3032
}
3133
if accessKeyErr != nil && accessSecretKeyErr == nil {
3234
return nil, errMissingKey
3335
}
3436
if accessKeyErr == nil && accessSecretKeyErr != nil {
3537
return nil, errMissingSecret
3638
}
37-
accessKeyID := strings.TrimSpace(string(accessKeyIDBytes))
38-
accessSecretKey := strings.TrimSpace(string(accessSecretKeyBytes))
39-
return credentials.NewStaticCredentials(accessKeyID, accessSecretKey, ""), nil
39+
40+
return &aws.Auth{
41+
AccessKey: strings.TrimSpace(string(accessKeyIDBytes)),
42+
SecretKey: strings.TrimSpace(string(accessSecretKeyBytes)),
43+
}, nil
4044
}

pkg/gitreceive/storage/bucket.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
package storage
22

33
import (
4-
"github.com/aws/aws-sdk-go/aws"
5-
"github.com/aws/aws-sdk-go/service/s3"
4+
"github.com/mitchellh/goamz/s3"
65
)
76

8-
func CreateBucket(s3Client *s3.S3, bucketName string) error {
9-
_, err := s3Client.CreateBucket(&s3.CreateBucketInput{
10-
Bucket: aws.String(bucketName),
11-
})
12-
return err
7+
const (
8+
ACLPublicRead = s3.ACL("public-read")
9+
)
10+
11+
func BucketExists(svc *s3.S3, bucketName string) (bool, error) {
12+
buckets, err := svc.ListBuckets()
13+
if err != nil {
14+
return false, err
15+
}
16+
for _, bucket := range buckets.Buckets {
17+
if bucketName == bucket.Name {
18+
return true, nil
19+
}
20+
}
21+
return false, nil
22+
}
23+
24+
func CreateBucket(svc *s3.S3, bucketName string) error {
25+
return svc.Bucket(bucketName).PutBucket(s3.ACL("public-read"))
1326
}

pkg/gitreceive/storage/client.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
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"
4+
"github.com/mitchellh/goamz/aws"
5+
"github.com/mitchellh/goamz/s3"
76
)
87

9-
func GetClient(region string) (*s3.S3, error) {
10-
awsCfg := new(aws.Config)
11-
awsCfg.Region = aws.String(region)
12-
endpt, err := getEndpoint()
8+
func GetClient(regionStr string) (*s3.S3, error) {
9+
auth, err := getAuth()
1310
if err != nil {
1411
return nil, err
1512
}
16-
awsCfg.Endpoint = aws.String(endpt)
17-
creds, err := getCreds()
13+
14+
endpoint, err := getEndpoint()
1815
if err != nil {
1916
return nil, err
2017
}
21-
awsCfg.Credentials = creds
22-
svc := s3.New(session.New(awsCfg), &aws.Config{})
23-
return svc, nil
18+
19+
region := aws.Region{
20+
Name: regionStr,
21+
S3Endpoint: endpoint,
22+
}
23+
24+
return s3.New(*auth, region), nil
2425
}

pkg/gitreceive/storage/exists.go

Lines changed: 0 additions & 19 deletions
This file was deleted.

pkg/gitreceive/storage/object.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package storage
2+
3+
import (
4+
"io"
5+
"net/http"
6+
7+
"github.com/mitchellh/goamz/s3"
8+
)
9+
10+
func ObjectExists(svc *s3.S3, bucket, objName string) (bool, error) {
11+
resp, err := svc.Bucket(bucket).Head(objName)
12+
if err != nil {
13+
return false, err
14+
}
15+
return resp.StatusCode == http.StatusOK, nil
16+
}
17+
18+
func UploadObject(svc *s3.S3, bucketName, objKey string, reader io.Reader) error {
19+
// see https://godoc.org/github.com/aws/aws-sdk-go/service/s3#example-S3-PutObject
20+
return nil
21+
}

pkg/gitreceive/storage/upload.go

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)