Skip to content

Commit c234e52

Browse files
authored
Merge pull request #1252 from andyzhangx/fix-cloud-panic-1.22
[release-1.22] fix: panic when controller does not have cloud config
2 parents 09d2550 + 66d7e82 commit c234e52

File tree

4 files changed

+106
-15
lines changed

4 files changed

+106
-15
lines changed

pkg/blob/azure.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/Azure/azure-sdk-for-go/storage"
3030

3131
"github.com/Azure/go-autorest/autorest"
32+
azure2 "github.com/Azure/go-autorest/autorest/azure"
3233

3334
clientset "k8s.io/client-go/kubernetes"
3435
"k8s.io/client-go/rest"
@@ -184,7 +185,7 @@ func (d *Driver) initializeKvClient() (*kv.BaseClient, error) {
184185

185186
// getKeyvaultToken retrieves a new service principal token to access keyvault
186187
func (d *Driver) getKeyvaultToken() (authorizer autorest.Authorizer, err error) {
187-
env := d.cloud.Environment
188+
env := d.getCloudEnvironment()
188189
kvEndPoint := strings.TrimSuffix(env.KeyVaultEndpoint, "/")
189190
servicePrincipalToken, err := providerconfig.GetServicePrincipalToken(&d.cloud.Config.AzureAuthConfig, &env, kvEndPoint)
190191
if err != nil {
@@ -273,3 +274,17 @@ func getKubeConfig(kubeconfig string) (config *rest.Config, err error) {
273274
}
274275
return config, err
275276
}
277+
278+
func (d *Driver) getStorageEndPointSuffix() string {
279+
if d.cloud == nil || d.cloud.Environment.StorageEndpointSuffix == "" {
280+
return defaultStorageEndPointSuffix
281+
}
282+
return d.cloud.Environment.StorageEndpointSuffix
283+
}
284+
285+
func (d *Driver) getCloudEnvironment() azure2.Environment {
286+
if d.cloud == nil {
287+
return azure2.PublicCloud
288+
}
289+
return d.cloud.Environment
290+
}

pkg/blob/azure_test.go

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,3 +457,88 @@ users:
457457
}
458458
}
459459
}
460+
461+
func TestGetStorageEndPointSuffix(t *testing.T) {
462+
d := NewFakeDriver()
463+
464+
ctrl := gomock.NewController(t)
465+
defer ctrl.Finish()
466+
467+
tests := []struct {
468+
name string
469+
cloud *azureprovider.Cloud
470+
expectedSuffix string
471+
}{
472+
{
473+
name: "nil cloud",
474+
cloud: nil,
475+
expectedSuffix: "core.windows.net",
476+
},
477+
{
478+
name: "empty cloud",
479+
cloud: &azureprovider.Cloud{},
480+
expectedSuffix: "core.windows.net",
481+
},
482+
{
483+
name: "cloud with storage endpoint suffix",
484+
cloud: &azureprovider.Cloud{
485+
Environment: azure.Environment{
486+
StorageEndpointSuffix: "suffix",
487+
},
488+
},
489+
expectedSuffix: "suffix",
490+
},
491+
{
492+
name: "public cloud",
493+
cloud: &azureprovider.Cloud{
494+
Environment: azure.PublicCloud,
495+
},
496+
expectedSuffix: "core.windows.net",
497+
},
498+
{
499+
name: "china cloud",
500+
cloud: &azureprovider.Cloud{
501+
Environment: azure.ChinaCloud,
502+
},
503+
expectedSuffix: "core.chinacloudapi.cn",
504+
},
505+
}
506+
507+
for _, test := range tests {
508+
d.cloud = test.cloud
509+
suffix := d.getStorageEndPointSuffix()
510+
assert.Equal(t, test.expectedSuffix, suffix, test.name)
511+
}
512+
}
513+
514+
func TestGetCloudEnvironment(t *testing.T) {
515+
d := NewFakeDriver()
516+
517+
ctrl := gomock.NewController(t)
518+
defer ctrl.Finish()
519+
520+
tests := []struct {
521+
name string
522+
cloud *azureprovider.Cloud
523+
expectedEnv azure.Environment
524+
}{
525+
{
526+
name: "nil cloud",
527+
cloud: nil,
528+
expectedEnv: azure.PublicCloud,
529+
},
530+
{
531+
name: "cloud with environment",
532+
cloud: &azureprovider.Cloud{
533+
Environment: azure.ChinaCloud,
534+
},
535+
expectedEnv: azure.ChinaCloud,
536+
},
537+
}
538+
539+
for _, test := range tests {
540+
d.cloud = test.cloud
541+
env := d.getCloudEnvironment()
542+
assert.Equal(t, test.expectedEnv, env, test.name)
543+
}
544+
}

pkg/blob/controllerserver.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -281,11 +281,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
281281
}
282282

283283
if strings.TrimSpace(storageEndpointSuffix) == "" {
284-
if d.cloud.Environment.StorageEndpointSuffix != "" {
285-
storageEndpointSuffix = d.cloud.Environment.StorageEndpointSuffix
286-
} else {
287-
storageEndpointSuffix = defaultStorageEndPointSuffix
288-
}
284+
storageEndpointSuffix = d.getStorageEndPointSuffix()
289285
}
290286

291287
accountOptions := &azure.AccountOptions{
@@ -510,7 +506,7 @@ func (d *Driver) ValidateVolumeCapabilities(ctx context.Context, req *csi.Valida
510506
var exist bool
511507
secrets := req.GetSecrets()
512508
if len(secrets) > 0 {
513-
container, err := getContainerReference(containerName, secrets, d.cloud.Environment)
509+
container, err := getContainerReference(containerName, secrets, d.getCloudEnvironment())
514510
if err != nil {
515511
return nil, status.Error(codes.Internal, err.Error())
516512
}
@@ -625,7 +621,7 @@ func (d *Driver) CreateBlobContainer(ctx context.Context, subsID, resourceGroupN
625621
return wait.ExponentialBackoff(d.cloud.RequestBackoff(), func() (bool, error) {
626622
var err error
627623
if len(secrets) > 0 {
628-
container, getErr := getContainerReference(containerName, secrets, d.cloud.Environment)
624+
container, getErr := getContainerReference(containerName, secrets, d.getCloudEnvironment())
629625
if getErr != nil {
630626
return true, getErr
631627
}
@@ -657,7 +653,7 @@ func (d *Driver) DeleteBlobContainer(ctx context.Context, subsID, resourceGroupN
657653
return wait.ExponentialBackoff(d.cloud.RequestBackoff(), func() (bool, error) {
658654
var err error
659655
if len(secrets) > 0 {
660-
container, getErr := getContainerReference(containerName, secrets, d.cloud.Environment)
656+
container, getErr := getContainerReference(containerName, secrets, d.getCloudEnvironment())
661657
if getErr != nil {
662658
return true, getErr
663659
}

pkg/blob/nodeserver.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
volumehelper "sigs.k8s.io/blob-csi-driver/pkg/util"
3030
azcache "sigs.k8s.io/cloud-provider-azure/pkg/cache"
3131

32-
"github.com/Azure/azure-sdk-for-go/storage"
3332
"github.com/container-storage-interface/spec/lib/go/csi"
3433

3534
"k8s.io/apimachinery/pkg/util/wait"
@@ -299,11 +298,7 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
299298
containerName = replaceWithMap(containerName, containerNameReplaceMap)
300299

301300
if strings.TrimSpace(storageEndpointSuffix) == "" {
302-
if d.cloud.Environment.StorageEndpointSuffix != "" {
303-
storageEndpointSuffix = d.cloud.Environment.StorageEndpointSuffix
304-
} else {
305-
storageEndpointSuffix = storage.DefaultBaseURL
306-
}
301+
storageEndpointSuffix = d.getStorageEndPointSuffix()
307302
}
308303

309304
if strings.TrimSpace(serverAddress) == "" {

0 commit comments

Comments
 (0)