Skip to content

Commit 1c6bb49

Browse files
committed
Optimize the logic of getCloudProvider func
Signed-off-by: ZeroMagic <[email protected]>
1 parent 1b8e185 commit 1c6bb49

File tree

4 files changed

+44
-46
lines changed

4 files changed

+44
-46
lines changed

pkg/blob/azure.go

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ func IsAzureStackCloud(cloud *azureprovider.Cloud) bool {
4747
}
4848

4949
// getCloudProvider get Azure Cloud Provider
50-
func getCloudProvider(kubeconfig string) (*azureprovider.Cloud, error) {
50+
func getCloudProvider(kubeconfig, nodeID string) (*azureprovider.Cloud, error) {
51+
isController := (nodeID == "")
52+
5153
kubeClient, err := getKubeClient(kubeconfig)
5254
if err != nil && !os.IsNotExist(err) && err != rest.ErrNotInCluster {
5355
return nil, fmt.Errorf("failed to get KubeClient: %v", err)
@@ -71,22 +73,38 @@ func getCloudProvider(kubeconfig string) (*azureprovider.Cloud, error) {
7173
klog.V(2).Infof("use default %s env var: %v", DefaultAzureCredentialFileEnv, credFile)
7274
}
7375

74-
f, err := os.Open(credFile)
76+
var f *os.File
77+
f, err = os.Open(credFile)
78+
if f != nil {
79+
defer f.Close()
80+
}
7581
if err != nil {
7682
klog.Errorf("Failed to load config from file: %s", credFile)
77-
return nil, fmt.Errorf("Failed to load config from file: %s, cloud not get azure cloud provider", credFile)
78-
}
79-
defer f.Close()
80-
81-
klog.V(2).Infof("read cloud config from file: %s successfully", credFile)
82-
if az, err = azureprovider.NewCloudWithoutFeatureGates(f); err != nil {
83-
return az, err
83+
err = fmt.Errorf("Failed to load config from file: %s, cloud not get azure cloud provider", credFile)
84+
} else {
85+
klog.V(2).Infof("read cloud config from file: %s successfully", credFile)
86+
az, err = azureprovider.NewCloudWithoutFeatureGates(f)
8487
}
8588
}
8689

8790
if kubeClient != nil {
8891
az.KubeClient = kubeClient
8992
}
93+
if isController {
94+
if err != nil {
95+
return az, err
96+
}
97+
// Disable UseInstanceMetadata for controller to mitigate a timeout issue using IMDS
98+
// https://github.com/kubernetes-sigs/azuredisk-csi-driver/issues/168
99+
klog.Infoln("disable UseInstanceMetadata for controller")
100+
az.Config.UseInstanceMetadata = false
101+
klog.Infoln("Starting the controller server...")
102+
} else {
103+
if err != nil {
104+
klog.V(2).Infof("there is no azure.json provided for node server, error: %v", err)
105+
}
106+
klog.V(2).Infof("Starting the node server, nodeID is(%s)", nodeID)
107+
}
90108

91109
return az, nil
92110
}

pkg/blob/azure_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,31 +75,37 @@ users:
7575
tests := []struct {
7676
desc string
7777
kubeconfig string
78+
nodeID string
7879
expectedErr error
7980
}{
8081
{
8182
desc: "[failure] out of cluster, no kubeconfig, no credential file",
8283
kubeconfig: "",
84+
nodeID: "",
8385
expectedErr: fmt.Errorf("Failed to load config from file: %s, cloud not get azure cloud provider", DefaultCredFilePath),
8486
},
8587
{
8688
desc: "[failure] out of cluster & in cluster, specify a non-exist kubeconfig, no credential file",
8789
kubeconfig: "/tmp/non-exist.json",
90+
nodeID: "",
8891
expectedErr: fmt.Errorf("Failed to load config from file: %s, cloud not get azure cloud provider", DefaultCredFilePath),
8992
},
9093
{
9194
desc: "[failure] out of cluster & in cluster, specify a empty kubeconfig, no credential file",
9295
kubeconfig: emptyKubeConfig,
96+
nodeID: "",
9397
expectedErr: fmt.Errorf("failed to get KubeClient: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable"),
9498
},
9599
{
96100
desc: "[failure] out of cluster & in cluster, specify a fake kubeconfig, no credential file",
97101
kubeconfig: fakeKubeConfig,
102+
nodeID: "",
98103
expectedErr: fmt.Errorf("Failed to load config from file: %s, cloud not get azure cloud provider", DefaultCredFilePath),
99104
},
100105
{
101106
desc: "[success] out of cluster & in cluster, no kubeconfig, a fake credential file",
102107
kubeconfig: "",
108+
nodeID: "",
103109
expectedErr: nil,
104110
},
105111
}
@@ -139,7 +145,7 @@ users:
139145
}
140146
os.Setenv(DefaultAzureCredentialFileEnv, fakeCredFile)
141147
}
142-
_, err := getCloudProvider(test.kubeconfig)
148+
_, err := getCloudProvider(test.kubeconfig, test.nodeID)
143149
if !reflect.DeepEqual(err, test.expectedErr) {
144150
t.Errorf("desc: %s,\n input: %q, GetCloudProvider err: %v, expectedErr: %v", test.desc, test.kubeconfig, err, test.expectedErr)
145151
}

pkg/blob/blob.go

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const (
4646
volumeIDTemplate = "%s#%s#%s"
4747
secretNameTemplate = "azure-storage-account-%s-secret"
4848
serverNameField = "server"
49-
blobStorageEndPointField = "blobstorageendpoint"
49+
storageEndpointSuffixField = "storageendpointsuffix"
5050
tagsField = "tags"
5151
protocolField = "protocol"
5252
accountNameField = "accountname"
@@ -116,35 +116,9 @@ func (d *Driver) Run(endpoint, kubeconfig string, testBool bool) {
116116
}
117117
klog.Infof("\nDRIVER INFORMATION:\n-------------------\n%s\n\nStreaming logs below:", versionMeta)
118118

119-
// For the controller server, the NodeID is nil. For the node server, the NodeID is not nil.
120-
if d.NodeID == "" {
121-
cloud, err := getCloudProvider(kubeconfig)
122-
if err != nil || cloud.TenantID == "" || cloud.SubscriptionID == "" {
123-
klog.Fatalf("failed to get Azure Cloud Provider, error: %v", err)
124-
}
125-
d.cloud = cloud
126-
// Disable UseInstanceMetadata for controller to mitigate a timeout issue using IMDS
127-
// https://github.com/kubernetes-sigs/azuredisk-csi-driver/issues/168
128-
klog.Infoln("disable UseInstanceMetadata for controller")
129-
d.cloud.Config.UseInstanceMetadata = false
130-
klog.Infoln("Starting the controller server...")
131-
} else {
132-
cloud, err := getCloudProvider(kubeconfig)
133-
if err == nil {
134-
d.cloud = cloud
135-
} else {
136-
klog.V(2).Infof("there is no azure.json provided for node server")
137-
d.cloud = &azure.Cloud{}
138-
kubeClient, err := getKubeClient(kubeconfig)
139-
if err != nil {
140-
klog.Infof("failed to get KubeClient: %v", err)
141-
}
142-
if kubeClient != nil {
143-
d.cloud.KubeClient = kubeClient
144-
}
145-
}
146-
147-
klog.V(2).Infof("Starting the node server, nodeID is(%s)", d.NodeID)
119+
d.cloud, err = getCloudProvider(kubeconfig, d.NodeID)
120+
if err != nil {
121+
klog.Fatalf("failed to get Azure Cloud Provider, error: %v", err)
148122
}
149123

150124
d.mounter = &mount.SafeFormatAndMount{

pkg/blob/nodeserver.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,15 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
135135
attrib := req.GetVolumeContext()
136136
secrets := req.GetSecrets()
137137

138-
var serverAddress, blobStorageEndPoint, protocol string
138+
var serverAddress, storageEndpointSuffix, protocol string
139139
for k, v := range attrib {
140140
switch strings.ToLower(k) {
141141
case serverNameField:
142142
serverAddress = v
143143
case protocolField:
144144
protocol = v
145-
case blobStorageEndPointField:
146-
blobStorageEndPoint = v
145+
case storageEndpointSuffixField:
146+
storageEndpointSuffix = v
147147
}
148148
}
149149

@@ -152,13 +152,13 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
152152
return nil, err
153153
}
154154

155-
if strings.TrimSpace(blobStorageEndPoint) == "" {
156-
blobStorageEndPoint = "core.windows.net"
155+
if strings.TrimSpace(storageEndpointSuffix) == "" {
156+
storageEndpointSuffix = "core.windows.net"
157157
}
158158

159159
if strings.TrimSpace(serverAddress) == "" {
160160
// server address is "accountname.blob.core.windows.net" by default
161-
serverAddress = fmt.Sprintf("%s.blob.%s", accountName, blobStorageEndPoint)
161+
serverAddress = fmt.Sprintf("%s.blob.%s", accountName, storageEndpointSuffix)
162162
}
163163

164164
if protocol == nfs {

0 commit comments

Comments
 (0)