Added support to specifiy custom endpoint

Signed-off-by: Keerthan Reddy Mala <keerthan.mala@gmail.com>
This commit is contained in:
Keerthan Mala 2016-03-05 11:46:44 -07:00 committed by Keerthan Reddy Mala
parent 7adddecf0b
commit 19cfa36ec8
2 changed files with 45 additions and 21 deletions

View File

@ -56,16 +56,17 @@ var validRegions = map[string]struct{}{}
//DriverParameters A struct that encapsulates all of the driver parameters after all values have been set //DriverParameters A struct that encapsulates all of the driver parameters after all values have been set
type DriverParameters struct { type DriverParameters struct {
AccessKey string AccessKey string
SecretKey string SecretKey string
Bucket string Bucket string
Region string Region string
Encrypt bool RegionEndpoint string
Secure bool Encrypt bool
ChunkSize int64 Secure bool
RootDirectory string ChunkSize int64
StorageClass string RootDirectory string
UserAgent string StorageClass string
UserAgent string
} }
func init() { func init() {
@ -153,6 +154,11 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
return nil, fmt.Errorf("No bucket parameter provided") return nil, fmt.Errorf("No bucket parameter provided")
} }
regionEndpoint := parameters["regionendpoint"]
if regionEndpoint == nil {
regionEndpoint = ""
}
encryptBool := false encryptBool := false
encrypt := parameters["encrypt"] encrypt := parameters["encrypt"]
switch encrypt := encrypt.(type) { switch encrypt := encrypt.(type) {
@ -240,6 +246,7 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
fmt.Sprint(secretKey), fmt.Sprint(secretKey),
fmt.Sprint(bucket), fmt.Sprint(bucket),
region, region,
fmt.Sprint(regionEndpoint),
encryptBool, encryptBool,
secureBool, secureBool,
chunkSize, chunkSize,
@ -255,22 +262,37 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
// bucketName // bucketName
func New(params DriverParameters) (*Driver, error) { func New(params DriverParameters) (*Driver, error) {
awsConfig := aws.NewConfig() awsConfig := aws.NewConfig()
creds := credentials.NewChainCredentials([]credentials.Provider{ var creds *credentials.Credentials
&credentials.StaticProvider{ if params.RegionEndpoint == "" {
Value: credentials.Value{ creds = credentials.NewChainCredentials([]credentials.Provider{
AccessKeyID: params.AccessKey, &credentials.StaticProvider{
SecretAccessKey: params.SecretKey, Value: credentials.Value{
AccessKeyID: params.AccessKey,
SecretAccessKey: params.SecretKey,
},
}, },
}, &credentials.EnvProvider{},
&credentials.EnvProvider{}, &credentials.SharedCredentialsProvider{},
&credentials.SharedCredentialsProvider{}, &ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(session.New())},
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(session.New())}, })
})
} else {
creds = credentials.NewChainCredentials([]credentials.Provider{
&credentials.StaticProvider{
Value: credentials.Value{
AccessKeyID: params.AccessKey,
SecretAccessKey: params.SecretKey,
},
},
&credentials.EnvProvider{},
})
awsConfig.WithS3ForcePathStyle(true)
awsConfig.WithEndpoint(params.RegionEndpoint)
}
awsConfig.WithCredentials(creds) awsConfig.WithCredentials(creds)
awsConfig.WithRegion(params.Region) awsConfig.WithRegion(params.Region)
awsConfig.WithDisableSSL(!params.Secure) awsConfig.WithDisableSSL(!params.Secure)
// awsConfig.WithMaxRetries(10)
if params.UserAgent != "" { if params.UserAgent != "" {
awsConfig.WithHTTPClient(&http.Client{ awsConfig.WithHTTPClient(&http.Client{

View File

@ -30,6 +30,7 @@ func init() {
secure := os.Getenv("S3_SECURE") secure := os.Getenv("S3_SECURE")
region := os.Getenv("AWS_REGION") region := os.Getenv("AWS_REGION")
root, err := ioutil.TempDir("", "driver-") root, err := ioutil.TempDir("", "driver-")
regionEndpoint := os.Getenv("REGION_ENDPOINT")
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -57,6 +58,7 @@ func init() {
secretKey, secretKey,
bucket, bucket,
region, region,
regionEndpoint,
encryptBool, encryptBool,
secureBool, secureBool,
minChunkSize, minChunkSize,