Skip to content

Commit d519a39

Browse files
authored
Support storage base path as prefix (#27827)
This PR adds a prefix path for all minio storage and override base path will override the path. The previous behavior is undefined officially, so it will be marked as breaking.
1 parent a4b242a commit d519a39

File tree

2 files changed

+67
-3
lines changed

2 files changed

+67
-3
lines changed

modules/setting/storage.go

+14-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"errors"
88
"fmt"
99
"path/filepath"
10+
"strings"
1011
)
1112

1213
// StorageType is a type of Storage
@@ -249,14 +250,24 @@ func getStorageForMinio(targetSec, overrideSec ConfigSection, tp targetSecType,
249250
return nil, fmt.Errorf("map minio config failed: %v", err)
250251
}
251252

252-
if storage.MinioConfig.BasePath == "" {
253-
storage.MinioConfig.BasePath = name + "/"
253+
var defaultPath string
254+
if storage.MinioConfig.BasePath != "" {
255+
if tp == targetSecIsStorage || tp == targetSecIsDefault {
256+
defaultPath = strings.TrimSuffix(storage.MinioConfig.BasePath, "/") + "/" + name + "/"
257+
} else {
258+
defaultPath = storage.MinioConfig.BasePath
259+
}
260+
}
261+
if defaultPath == "" {
262+
defaultPath = name + "/"
254263
}
255264

256265
if overrideSec != nil {
257266
storage.MinioConfig.ServeDirect = ConfigSectionKeyBool(overrideSec, "SERVE_DIRECT", storage.MinioConfig.ServeDirect)
258-
storage.MinioConfig.BasePath = ConfigSectionKeyString(overrideSec, "MINIO_BASE_PATH", storage.MinioConfig.BasePath)
267+
storage.MinioConfig.BasePath = ConfigSectionKeyString(overrideSec, "MINIO_BASE_PATH", defaultPath)
259268
storage.MinioConfig.Bucket = ConfigSectionKeyString(overrideSec, "MINIO_BUCKET", storage.MinioConfig.Bucket)
269+
} else {
270+
storage.MinioConfig.BasePath = defaultPath
260271
}
261272
return &storage, nil
262273
}

modules/setting/storage_test.go

+53
Original file line numberDiff line numberDiff line change
@@ -412,3 +412,56 @@ MINIO_USE_SSL = true
412412
assert.EqualValues(t, true, RepoArchive.Storage.MinioConfig.UseSSL)
413413
assert.EqualValues(t, "repo-archive/", RepoArchive.Storage.MinioConfig.BasePath)
414414
}
415+
416+
func Test_getStorageConfiguration28(t *testing.T) {
417+
cfg, err := NewConfigProviderFromData(`
418+
[storage]
419+
STORAGE_TYPE = minio
420+
MINIO_ACCESS_KEY_ID = my_access_key
421+
MINIO_SECRET_ACCESS_KEY = my_secret_key
422+
MINIO_USE_SSL = true
423+
MINIO_BASE_PATH = /prefix
424+
`)
425+
assert.NoError(t, err)
426+
assert.NoError(t, loadRepoArchiveFrom(cfg))
427+
assert.EqualValues(t, "my_access_key", RepoArchive.Storage.MinioConfig.AccessKeyID)
428+
assert.EqualValues(t, "my_secret_key", RepoArchive.Storage.MinioConfig.SecretAccessKey)
429+
assert.EqualValues(t, true, RepoArchive.Storage.MinioConfig.UseSSL)
430+
assert.EqualValues(t, "/prefix/repo-archive/", RepoArchive.Storage.MinioConfig.BasePath)
431+
432+
cfg, err = NewConfigProviderFromData(`
433+
[storage]
434+
STORAGE_TYPE = minio
435+
MINIO_ACCESS_KEY_ID = my_access_key
436+
MINIO_SECRET_ACCESS_KEY = my_secret_key
437+
MINIO_USE_SSL = true
438+
MINIO_BASE_PATH = /prefix
439+
440+
[lfs]
441+
MINIO_BASE_PATH = /lfs
442+
`)
443+
assert.NoError(t, err)
444+
assert.NoError(t, loadLFSFrom(cfg))
445+
assert.EqualValues(t, "my_access_key", LFS.Storage.MinioConfig.AccessKeyID)
446+
assert.EqualValues(t, "my_secret_key", LFS.Storage.MinioConfig.SecretAccessKey)
447+
assert.EqualValues(t, true, LFS.Storage.MinioConfig.UseSSL)
448+
assert.EqualValues(t, "/lfs", LFS.Storage.MinioConfig.BasePath)
449+
450+
cfg, err = NewConfigProviderFromData(`
451+
[storage]
452+
STORAGE_TYPE = minio
453+
MINIO_ACCESS_KEY_ID = my_access_key
454+
MINIO_SECRET_ACCESS_KEY = my_secret_key
455+
MINIO_USE_SSL = true
456+
MINIO_BASE_PATH = /prefix
457+
458+
[storage.lfs]
459+
MINIO_BASE_PATH = /lfs
460+
`)
461+
assert.NoError(t, err)
462+
assert.NoError(t, loadLFSFrom(cfg))
463+
assert.EqualValues(t, "my_access_key", LFS.Storage.MinioConfig.AccessKeyID)
464+
assert.EqualValues(t, "my_secret_key", LFS.Storage.MinioConfig.SecretAccessKey)
465+
assert.EqualValues(t, true, LFS.Storage.MinioConfig.UseSSL)
466+
assert.EqualValues(t, "/lfs", LFS.Storage.MinioConfig.BasePath)
467+
}

0 commit comments

Comments
 (0)