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 46b2c3fadf
commit 2be1b4ef4f
4 changed files with 62 additions and 23 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
type DriverParameters struct {
AccessKey string
SecretKey string
Bucket string
Region string
Encrypt bool
Secure bool
ChunkSize int64
RootDirectory string
StorageClass string
UserAgent string
AccessKey string
SecretKey string
Bucket string
Region string
RegionEndpoint string
Encrypt bool
Secure bool
ChunkSize int64
RootDirectory string
StorageClass string
UserAgent string
}
func init() {
@@ -153,6 +154,11 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
return nil, fmt.Errorf("No bucket parameter provided")
}
regionEndpoint := parameters["regionendpoint"]
if regionEndpoint == nil {
regionEndpoint = ""
}
encryptBool := false
encrypt := parameters["encrypt"]
switch encrypt := encrypt.(type) {
@@ -240,6 +246,7 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
fmt.Sprint(secretKey),
fmt.Sprint(bucket),
region,
fmt.Sprint(regionEndpoint),
encryptBool,
secureBool,
chunkSize,
@@ -255,22 +262,37 @@ func FromParameters(parameters map[string]interface{}) (*Driver, error) {
// bucketName
func New(params DriverParameters) (*Driver, error) {
awsConfig := aws.NewConfig()
creds := credentials.NewChainCredentials([]credentials.Provider{
&credentials.StaticProvider{
Value: credentials.Value{
AccessKeyID: params.AccessKey,
SecretAccessKey: params.SecretKey,
var creds *credentials.Credentials
if params.RegionEndpoint == "" {
creds = credentials.NewChainCredentials([]credentials.Provider{
&credentials.StaticProvider{
Value: credentials.Value{
AccessKeyID: params.AccessKey,
SecretAccessKey: params.SecretKey,
},
},
},
&credentials.EnvProvider{},
&credentials.SharedCredentialsProvider{},
&ec2rolecreds.EC2RoleProvider{Client: ec2metadata.New(session.New())},
})
&credentials.EnvProvider{},
&credentials.SharedCredentialsProvider{},
&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.WithRegion(params.Region)
awsConfig.WithDisableSSL(!params.Secure)
// awsConfig.WithMaxRetries(10)
if params.UserAgent != "" {
awsConfig.WithHTTPClient(&http.Client{

View File

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