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