Add support for DigitalOcean Spaces storage (#847)

* Add Region value to Minio configuration, Allow to use minio for DigitalOcean Spaces

* Remove unnecessary Region value setter
This commit is contained in:
Tomasz Tomalak
2018-11-05 21:24:44 +01:00
committed by Manu Gupta
parent 54f92c55d6
commit 61ddb907c1
4 changed files with 13 additions and 4 deletions
+4
View File
@@ -185,6 +185,10 @@ TraceExporter = ""
# Env override: ATHENS_MINIO_BUCKET_NAME
Bucket = "gomods"
# Region for Minio storage
# Env override: ATHENS_MINIO_REGION
Region = ""
[Storage.Mongo]
# Full URL for mongo storage
# Env override: ATHENS_MONGO_STORAGE_URL
+2
View File
@@ -116,6 +116,7 @@ func TestStorageEnvOverrides(t *testing.T) {
Secret: "minioSecret",
EnableSSL: false,
Bucket: "minioBucket",
Region: "us-west-1",
TimeoutConf: TimeoutConf{
Timeout: globalTimeout,
},
@@ -294,6 +295,7 @@ func getEnvMap(config *Config) map[string]string {
envVars["ATHENS_MINIO_ACCESS_KEY_ID"] = storage.Minio.Key
envVars["ATHENS_MINIO_SECRET_ACCESS_KEY"] = storage.Minio.Secret
envVars["ATHENS_MINIO_USE_SSL"] = strconv.FormatBool(storage.Minio.EnableSSL)
envVars["ATHENS_MINIO_REGION"] = storage.Minio.Region
envVars["ATHENS_MINIO_BUCKET_NAME"] = storage.Minio.Bucket
}
if storage.Mongo != nil {
+3 -1
View File
@@ -1,11 +1,13 @@
package config
// MinioConfig specifies the properties required to use Minio as the storage backend
// MinioConfig specifies the properties required to use Minio or DigitalOcean Spaces
// as the storage backend
type MinioConfig struct {
TimeoutConf
Endpoint string `validate:"required" envconfig:"ATHENS_MINIO_ENDPOINT"`
Key string `validate:"required" envconfig:"ATHENS_MINIO_ACCESS_KEY_ID"`
Secret string `validate:"required" envconfig:"ATHENS_MINIO_SECRET_ACCESS_KEY"`
Bucket string `validate:"required" envconfig:"ATHENS_MINIO_BUCKET_NAME"`
Region string `envconfig:"ATHENS_MINIO_REGION"`
EnableSSL bool `envconfig:"ATHENS_MINIO_USE_SSL"`
}
+4 -3
View File
@@ -18,21 +18,22 @@ func (s *storageImpl) versionLocation(module, version string) string {
return fmt.Sprintf("%s/%s", module, version)
}
// NewStorage returns a new ListerSaver implementation that stores
// everything under rootDir
// NewStorage returns a connected Minio or DigitalOcean Spaces storage
// that implements storage.Backend
func NewStorage(conf *config.MinioConfig) (storage.Backend, error) {
const op errors.Op = "minio.NewStorage"
endpoint := conf.Endpoint
accessKeyID := conf.Key
secretAccessKey := conf.Secret
bucketName := conf.Bucket
region := conf.Region
useSSL := conf.EnableSSL
minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)
if err != nil {
return nil, errors.E(op, err)
}
err = minioClient.MakeBucket(bucketName, "")
err = minioClient.MakeBucket(bucketName, region)
if err != nil {
// Check to see if we already own this bucket
exists, err := minioClient.BucketExists(bucketName)