diff --git a/config.dev.toml b/config.dev.toml index 7028527c..525652fe 100644 --- a/config.dev.toml +++ b/config.dev.toml @@ -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 diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 1658bf57..4945253e 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -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 { diff --git a/pkg/config/minio.go b/pkg/config/minio.go index 0a231392..b7251f6c 100644 --- a/pkg/config/minio.go +++ b/pkg/config/minio.go @@ -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"` } diff --git a/pkg/storage/minio/minio.go b/pkg/storage/minio/minio.go index c5ae428a..e60974ef 100644 --- a/pkg/storage/minio/minio.go +++ b/pkg/storage/minio/minio.go @@ -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)