Read information from the credential specified by BSL

Read information from the credential specified by BSL

Signed-off-by: Wenkai Yin(尹文开) <yinw@vmware.com>
pull/7034/head
Wenkai Yin(尹文开) 2023-10-30 17:27:17 +08:00
parent 23921e5d29
commit 49a85e1636
3 changed files with 32 additions and 22 deletions

View File

@ -0,0 +1 @@
Read information from the credential specified by BSL

View File

@ -53,7 +53,7 @@ var getGCPCredentials = repoconfig.GetGCPCredentials
var getS3BucketRegion = repoconfig.GetAWSBucketRegion var getS3BucketRegion = repoconfig.GetAWSBucketRegion
type localFuncTable struct { type localFuncTable struct {
getStorageVariables func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) getStorageVariables func(*velerov1api.BackupStorageLocation, string, string, credentials.FileStore) (map[string]string, error)
getStorageCredentials func(*velerov1api.BackupStorageLocation, credentials.FileStore) (map[string]string, error) getStorageCredentials func(*velerov1api.BackupStorageLocation, credentials.FileStore) (map[string]string, error)
} }
@ -347,7 +347,7 @@ func (urp *unifiedRepoProvider) GetStoreOptions(param interface{}) (map[string]s
return map[string]string{}, errors.Errorf("invalid parameter, expect %T, actual %T", RepoParam{}, param) return map[string]string{}, errors.Errorf("invalid parameter, expect %T, actual %T", RepoParam{}, param)
} }
storeVar, err := funcTable.getStorageVariables(repoParam.BackupLocation, urp.repoBackend, repoParam.BackupRepo.Spec.VolumeNamespace) storeVar, err := funcTable.getStorageVariables(repoParam.BackupLocation, urp.repoBackend, repoParam.BackupRepo.Spec.VolumeNamespace, urp.credentialGetter.FromFile)
if err != nil { if err != nil {
return map[string]string{}, errors.Wrap(err, "error to get storage variables") return map[string]string{}, errors.Wrap(err, "error to get storage variables")
} }
@ -447,7 +447,8 @@ func getStorageCredentials(backupLocation *velerov1api.BackupStorageLocation, cr
return result, nil return result, nil
} }
func getStorageVariables(backupLocation *velerov1api.BackupStorageLocation, repoBackend string, repoName string) (map[string]string, error) { func getStorageVariables(backupLocation *velerov1api.BackupStorageLocation, repoBackend string, repoName string,
credentialFileStore credentials.FileStore) (map[string]string, error) {
result := make(map[string]string) result := make(map[string]string)
backendType := repoconfig.GetBackendType(backupLocation.Spec.Provider, backupLocation.Spec.Config) backendType := repoconfig.GetBackendType(backupLocation.Spec.Provider, backupLocation.Spec.Config)
@ -459,6 +460,13 @@ func getStorageVariables(backupLocation *velerov1api.BackupStorageLocation, repo
if config == nil { if config == nil {
config = map[string]string{} config = map[string]string{}
} }
if backupLocation.Spec.Credential != nil {
credsFile, err := credentialFileStore.Path(backupLocation.Spec.Credential)
if err != nil {
return map[string]string{}, errors.WithStack(err)
}
config[repoconfig.CredentialsFileKey] = credsFile
}
bucket := strings.Trim(config["bucket"], "/") bucket := strings.Trim(config["bucket"], "/")
prefix := strings.Trim(config["prefix"], "/") prefix := strings.Trim(config["prefix"], "/")

View File

@ -437,11 +437,12 @@ func TestGetStorageVariables(t *testing.T) {
}, },
} }
credFileStore := new(credmock.FileStore)
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
getS3BucketRegion = tc.getS3BucketRegion getS3BucketRegion = tc.getS3BucketRegion
actual, err := getStorageVariables(&tc.backupLocation, tc.repoBackend, tc.repoName) actual, err := getStorageVariables(&tc.backupLocation, tc.repoBackend, tc.repoName, credFileStore)
require.Equal(t, tc.expected, actual) require.Equal(t, tc.expected, actual)
@ -530,7 +531,7 @@ func TestGetStoreOptions(t *testing.T) {
BackupRepo: &velerov1api.BackupRepository{}, BackupRepo: &velerov1api.BackupRepository{},
}, },
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, errors.New("fake-error-2") return map[string]string{}, errors.New("fake-error-2")
}, },
}, },
@ -544,7 +545,7 @@ func TestGetStoreOptions(t *testing.T) {
BackupRepo: &velerov1api.BackupRepository{}, BackupRepo: &velerov1api.BackupRepository{},
}, },
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -604,7 +605,7 @@ func TestPrepareRepo(t *testing.T) {
repoService: new(reposervicenmocks.BackupRepoService), repoService: new(reposervicenmocks.BackupRepoService),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, errors.New("fake-store-option-error") return map[string]string{}, errors.New("fake-store-option-error")
}, },
}, },
@ -615,7 +616,7 @@ func TestPrepareRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -635,7 +636,7 @@ func TestPrepareRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -656,7 +657,7 @@ func TestPrepareRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -733,7 +734,7 @@ func TestForget(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -757,7 +758,7 @@ func TestForget(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -785,7 +786,7 @@ func TestForget(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -877,7 +878,7 @@ func TestInitRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -895,7 +896,7 @@ func TestInitRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -965,7 +966,7 @@ func TestConnectToRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -983,7 +984,7 @@ func TestConnectToRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -1057,7 +1058,7 @@ func TestBoostRepoConnect(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -1084,7 +1085,7 @@ func TestBoostRepoConnect(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -1110,7 +1111,7 @@ func TestBoostRepoConnect(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -1197,7 +1198,7 @@ func TestPruneRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {
@ -1215,7 +1216,7 @@ func TestPruneRepo(t *testing.T) {
getter: new(credmock.SecretStore), getter: new(credmock.SecretStore),
credStoreReturn: "fake-password", credStoreReturn: "fake-password",
funcTable: localFuncTable{ funcTable: localFuncTable{
getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string) (map[string]string, error) { getStorageVariables: func(*velerov1api.BackupStorageLocation, string, string, velerocredentials.FileStore) (map[string]string, error) {
return map[string]string{}, nil return map[string]string{}, nil
}, },
getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) { getStorageCredentials: func(*velerov1api.BackupStorageLocation, velerocredentials.FileStore) (map[string]string, error) {