forked from TrueCloudLab/distribution
Merge pull request #1512 from kmala/master
Added support to specifiy custom endpoint
This commit is contained in:
commit
ab49f85db8
4 changed files with 62 additions and 23 deletions
|
@ -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 a new issue