Added support to specifiy custom endpoint
Signed-off-by: Keerthan Reddy Mala <keerthan.mala@gmail.com>master
							parent
							
								
									46b2c3fadf
								
							
						
					
					
						commit
						2be1b4ef4f
					
				|  | @ -90,6 +90,7 @@ information about each option that appears later in this page. | |||
|         accesskey: awsaccesskey | ||||
|         secretkey: awssecretkey | ||||
|         region: us-west-1 | ||||
|         regionendpoint: http://myobjects.local | ||||
|         bucket: bucketname | ||||
|         encrypt: true | ||||
|         secure: true | ||||
|  | @ -358,6 +359,7 @@ Permitted values are `error`, `warn`, `info` and `debug`. The default is | |||
|         accesskey: awsaccesskey | ||||
|         secretkey: awssecretkey | ||||
|         region: us-west-1 | ||||
|         regionendpoint: http://myobjects.local | ||||
|         bucket: bucketname | ||||
|         encrypt: true | ||||
|         secure: true | ||||
|  | @ -435,7 +437,7 @@ You must configure one backend; if you configure more, the registry returns an e | |||
|   </tr> | ||||
|   <tr> | ||||
|     <td><code>s3</code></td> | ||||
|     <td>Uses Amazon's Simple Storage Service (S3). | ||||
|     <td>Uses Amazon's Simple Storage Service (S3) and compatible Storage Services. | ||||
|     See the <a href="storage-drivers/s3.md">driver's reference documentation</a>. | ||||
|     </td> | ||||
|   </tr> | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ keywords = ["registry, service, driver, images, storage,  S3"] | |||
| 
 | ||||
| # S3 storage driver | ||||
| 
 | ||||
| An implementation of the `storagedriver.StorageDriver` interface which uses Amazon S3 for object storage. | ||||
| An implementation of the `storagedriver.StorageDriver` interface which uses Amazon S3 or S3 compatible services for object storage. | ||||
| 
 | ||||
| ## Parameters | ||||
| 
 | ||||
|  | @ -52,6 +52,17 @@ An implementation of the `storagedriver.StorageDriver` interface which uses Amaz | |||
|       The AWS region in which your bucket exists. For the moment, the Go AWS | ||||
|       library in use does not use the newer DNS based bucket routing. | ||||
|     </td> | ||||
|   </tr> | ||||
|   <tr> | ||||
|     <td> | ||||
|       <code>regionendpoint</code> | ||||
|     </td> | ||||
|     <td> | ||||
|       no | ||||
|     </td> | ||||
|     <td> | ||||
|       Endpoint for S3 compatible storage services (Minio, etc) | ||||
|     </td> | ||||
|   </tr> | ||||
|     <tr> | ||||
|     <td> | ||||
|  | @ -146,6 +157,8 @@ An implementation of the `storagedriver.StorageDriver` interface which uses Amaz | |||
| 
 | ||||
| `region`: The name of the aws region in which you would like to store objects (for example `us-east-1`). For a list of regions, you can look at http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html | ||||
| 
 | ||||
| `regionendpoint`: (optional) Endpoint URL for S3 compatible APIs. This should not be provided when using Amazon S3. | ||||
| 
 | ||||
| `bucket`: The name of your S3 bucket where you wish to store objects. The bucket must exist prior to the driver initialization. | ||||
| 
 | ||||
| `encrypt`: (optional) Whether you would like your data encrypted on the server side (defaults to false if not specified). | ||||
|  |  | |||
|  | @ -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{ | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue