mirror of
https://github.com/gomods/athens
synced 2026-02-03 11:00:32 +00:00
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:
committed by
Manu Gupta
parent
54f92c55d6
commit
61ddb907c1
@@ -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
|
||||
|
||||
@@ -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
@@ -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"`
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user