Skip to content

Commit a87052f

Browse files
authored
Merge pull request #302 from andyzhangx/arbitrary-volumeid
feat: support arbitrary volume id
2 parents 2a56ae8 + e287c36 commit a87052f

File tree

2 files changed

+34
-38
lines changed

2 files changed

+34
-38
lines changed

pkg/blob/blob.go

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -259,16 +259,20 @@ func isSASToken(key string) bool {
259259

260260
// GetAuthEnv return <accountName, containerName, authEnv, error>
261261
func (d *Driver) GetAuthEnv(ctx context.Context, volumeID, protocol string, attrib, secrets map[string]string) (string, string, []string, error) {
262+
rgName, accountName, containerName, err := GetContainerInfo(volumeID)
263+
if err != nil {
264+
// ignore volumeID parsing error
265+
klog.Warningf("parsing volumeID(%s) return with error: %v", volumeID, err)
266+
err = nil
267+
}
268+
262269
var (
263-
accountName string
264270
accountKey string
265271
accountSasToken string
266-
containerName string
267272
keyVaultURL string
268273
keyVaultSecretName string
269274
keyVaultSecretVersion string
270275
authEnv []string
271-
err error
272276
)
273277

274278
for k, v := range attrib {
@@ -306,6 +310,7 @@ func (d *Driver) GetAuthEnv(ctx context.Context, volumeID, protocol string, attr
306310
klog.V(2).Infof("volumeID(%s) authEnv: %s", volumeID, authEnv)
307311

308312
if protocol == nfs {
313+
// nfs protocol does not need account key, return directly
309314
return accountName, containerName, authEnv, err
310315
}
311316

@@ -324,23 +329,16 @@ func (d *Driver) GetAuthEnv(ctx context.Context, volumeID, protocol string, attr
324329
}
325330
} else {
326331
if len(secrets) == 0 {
327-
var resourceGroupName string
328-
resourceGroupName, accountName, containerName, err = GetContainerInfo(volumeID)
329-
if err != nil {
330-
return accountName, containerName, authEnv, err
331-
}
332-
333-
if resourceGroupName == "" {
334-
resourceGroupName = d.cloud.ResourceGroup
335-
}
336-
337332
// read from k8s secret first
338333
accountKey, err = d.GetStorageAccesskeyFromSecret(accountName, attrib[secretNamespaceField])
339334
if err != nil {
340335
klog.V(2).Infof("could not get account(%s) key from secret, error: %v, use cluster identity to get account key instead", accountName, err)
341-
accountKey, err = d.cloud.GetStorageAccesskey(accountName, resourceGroupName)
336+
if rgName == "" {
337+
rgName = d.cloud.ResourceGroup
338+
}
339+
accountKey, err = d.cloud.GetStorageAccesskey(accountName, rgName)
342340
if err != nil {
343-
return accountName, containerName, authEnv, fmt.Errorf("no key for storage account(%s) under resource group(%s), err %v", accountName, resourceGroupName, err)
341+
return accountName, containerName, authEnv, fmt.Errorf("no key for storage account(%s) under resource group(%s), err %v", accountName, rgName, err)
344342
}
345343
}
346344
} else {
@@ -385,17 +383,14 @@ func (d *Driver) GetAuthEnv(ctx context.Context, volumeID, protocol string, attr
385383
// only for e2e testing
386384
func (d *Driver) GetStorageAccountAndContainer(ctx context.Context, volumeID string, attrib, secrets map[string]string) (string, string, string, string, error) {
387385
var (
388-
accountName string
389-
accountKey string
390-
accountSasToken string
391-
392-
containerName string
393-
386+
accountName string
387+
accountKey string
388+
accountSasToken string
389+
containerName string
394390
keyVaultURL string
395391
keyVaultSecretName string
396392
keyVaultSecretVersion string
397-
398-
err error
393+
err error
399394
)
400395

401396
for k, v := range attrib {
@@ -430,19 +425,19 @@ func (d *Driver) GetStorageAccountAndContainer(ctx context.Context, volumeID str
430425
}
431426
} else {
432427
if len(secrets) == 0 {
433-
var resourceGroupName string
434-
resourceGroupName, accountName, containerName, err = GetContainerInfo(volumeID)
428+
var rgName string
429+
rgName, accountName, containerName, err = GetContainerInfo(volumeID)
435430
if err != nil {
436431
return "", "", "", "", err
437432
}
438433

439-
if resourceGroupName == "" {
440-
resourceGroupName = d.cloud.ResourceGroup
434+
if rgName == "" {
435+
rgName = d.cloud.ResourceGroup
441436
}
442437

443-
accountKey, err = d.cloud.GetStorageAccesskey(accountName, resourceGroupName)
438+
accountKey, err = d.cloud.GetStorageAccesskey(accountName, rgName)
444439
if err != nil {
445-
return "", "", "", "", fmt.Errorf("no key for storage account(%s) under resource group(%s), err %v", accountName, resourceGroupName, err)
440+
return "", "", "", "", fmt.Errorf("no key for storage account(%s) under resource group(%s), err %v", accountName, rgName, err)
446441
}
447442
}
448443
}

pkg/blob/blob_test.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ func TestGetAuthEnv(t *testing.T) {
453453
attrib["containername"] = "unit-test"
454454
attrib["keyvaultsecretname"] = "unit-test"
455455
attrib["keyvaultsecretversion"] = "unit-test"
456-
attrib["storageaccountname"] = "unit-test"
456+
attrib["storageaccountname"] = "storageaccountname"
457457
attrib["azurestorageidentityclientid"] = "unit-test"
458458
attrib["azurestorageidentityobjectid"] = "unit-test"
459459
attrib["azurestorageidentityresourceid"] = "unit-test"
@@ -473,7 +473,7 @@ func TestGetAuthEnv(t *testing.T) {
473473
}
474474
mockStorageAccountsClient.EXPECT().ListKeys(gomock.Any(), gomock.Any(), gomock.Any()).Return(accountListKeysResult, rerr).AnyTimes()
475475
_, _, _, err := d.GetAuthEnv(context.TODO(), volumeID, "", attrib, secret)
476-
expectedErr := fmt.Errorf("no key for storage account(f5713de20cde511e8ba4900) under resource group(rg), err Retriable: false, RetryAfter: 0s, HTTPStatusCode: 0, RawError: test")
476+
expectedErr := fmt.Errorf("no key for storage account(storageaccountname) under resource group(rg), err Retriable: false, RetryAfter: 0s, HTTPStatusCode: 0, RawError: test")
477477
if !reflect.DeepEqual(err, expectedErr) {
478478
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
479479
}
@@ -514,19 +514,20 @@ func TestGetAuthEnv(t *testing.T) {
514514
d := NewFakeDriver()
515515
attrib := make(map[string]string)
516516
secret := make(map[string]string)
517-
volumeID := "rg#f5713de20cde511e8ba4900#pvc-fuse-dynamic-17e43f84-f474-11e8-acd0-000d3a00df41"
518-
secret["accountname"] = "unit-test"
519-
secret["azurestorageaccountname"] = "unit-test"
517+
volumeID := "rg#f5713de20cde511e8ba4900#containername"
518+
secret["accountname"] = "accountname"
519+
secret["azurestorageaccountname"] = "accountname"
520520
secret["accountkey"] = "unit-test"
521521
secret["azurestorageaccountkey"] = "unit-test"
522522
secret["azurestorageaccountsastoken"] = "unit-test"
523523
secret["msisecret"] = "unit-test"
524524
secret["azurestoragespnclientsecret"] = "unit-test"
525-
_, _, _, err := d.GetAuthEnv(context.TODO(), volumeID, "", attrib, secret)
526-
expectedErr := fmt.Errorf("could not find containerName from attributes(map[]) or volumeID(rg#f5713de20cde511e8ba4900#pvc-fuse-dynamic-17e43f84-f474-11e8-acd0-000d3a00df41)")
527-
if !reflect.DeepEqual(err, expectedErr) {
528-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
525+
accountName, containerName, _, err := d.GetAuthEnv(context.TODO(), volumeID, "", attrib, secret)
526+
if err != nil {
527+
t.Errorf("actualErr: (%v), expectedErr: nil", err)
529528
}
529+
assert.Equal(t, accountName, "accountname")
530+
assert.Equal(t, containerName, "containername")
530531
},
531532
},
532533
{

0 commit comments

Comments
 (0)