Skip to content

Commit 4328477

Browse files
MartinForRealcvvz
authored andcommitted
adopt dependency injection pattern and extract cloud property
1 parent e7c9aa7 commit 4328477

File tree

7 files changed

+39
-103
lines changed

7 files changed

+39
-103
lines changed

pkg/blob/azure.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func IsAzureStackCloud(cloud *azure.Cloud) bool {
5252
}
5353

5454
// getCloudProvider get Azure Cloud Provider
55-
func getCloudProvider(kubeconfig, nodeID, secretName, secretNamespace, userAgent string, allowEmptyCloudConfig bool, kubeAPIQPS float64, kubeAPIBurst int) (*azure.Cloud, error) {
55+
func GetCloudProvider(kubeconfig, nodeID, secretName, secretNamespace, userAgent string, allowEmptyCloudConfig bool, kubeAPIQPS float64, kubeAPIBurst int) (*azure.Cloud, error) {
5656
var (
5757
config *azure.Config
5858
kubeClient *clientset.Clientset

pkg/blob/azure_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ users:
168168
}
169169
os.Setenv(DefaultAzureCredentialFileEnv, fakeCredFile)
170170
}
171-
cloud, err := getCloudProvider(test.kubeconfig, test.nodeID, "", "", test.userAgent, test.allowEmptyCloudConfig, 25.0, 50)
171+
cloud, err := GetCloudProvider(test.kubeconfig, test.nodeID, "", "", test.userAgent, test.allowEmptyCloudConfig, 25.0, 50)
172172
if !reflect.DeepEqual(err, test.expectedErr) && test.expectedErr != nil && !strings.Contains(err.Error(), test.expectedErr.Error()) {
173173
t.Errorf("desc: %s,\n input: %q, GetCloudProvider err: %v, expectedErr: %v", test.desc, test.kubeconfig, err, test.expectedErr)
174174
}

pkg/blob/blob.go

Lines changed: 15 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -153,22 +153,15 @@ var (
153153
type DriverOptions struct {
154154
NodeID string
155155
DriverName string
156-
CloudConfigSecretName string
157-
CloudConfigSecretNamespace string
158-
CustomUserAgent string
159-
UserAgentSuffix string
160156
BlobfuseProxyEndpoint string
161157
EnableBlobfuseProxy bool
162158
BlobfuseProxyConnTimout int
163159
EnableBlobMockMount bool
164-
AllowEmptyCloudConfig bool
165160
AllowInlineVolumeKeyAccessWithIdentity bool
166161
EnableGetVolumeStats bool
167162
AppendTimeStampInCacheDir bool
168163
AppendMountErrorHelpLink bool
169164
MountPermissions uint64
170-
KubeAPIQPS float64
171-
KubeAPIBurst int
172165
EnableAznfsMount bool
173166
VolStatsCacheExpireInMinutes int
174167
SasTokenExpirationMinutes int
@@ -178,24 +171,17 @@ type DriverOptions struct {
178171
type Driver struct {
179172
csicommon.CSIDriver
180173

181-
cloud *azure.Cloud
182-
cloudConfigSecretName string
183-
cloudConfigSecretNamespace string
184-
customUserAgent string
185-
userAgentSuffix string
186-
blobfuseProxyEndpoint string
174+
cloud *azure.Cloud
175+
blobfuseProxyEndpoint string
187176
// enableBlobMockMount is only for testing, DO NOT set as true in non-testing scenario
188177
enableBlobMockMount bool
189178
enableBlobfuseProxy bool
190-
allowEmptyCloudConfig bool
191179
enableGetVolumeStats bool
192180
allowInlineVolumeKeyAccessWithIdentity bool
193181
appendTimeStampInCacheDir bool
194182
appendMountErrorHelpLink bool
195183
blobfuseProxyConnTimout int
196184
mountPermissions uint64
197-
kubeAPIQPS float64
198-
kubeAPIBurst int
199185
enableAznfsMount bool
200186
mounter *mount.SafeFormatAndMount
201187
volLockMap *util.LockMap
@@ -222,26 +208,19 @@ type Driver struct {
222208

223209
// NewDriver Creates a NewCSIDriver object. Assumes vendor version is equal to driver version &
224210
// does not support optional driver plugin info manifest field. Refer to CSI spec for more details.
225-
func NewDriver(options *DriverOptions) *Driver {
211+
func NewDriver(options *DriverOptions, cloud *azure.Cloud) *Driver {
226212
d := Driver{
227213
volLockMap: util.NewLockMap(),
228214
subnetLockMap: util.NewLockMap(),
229215
volumeLocks: newVolumeLocks(),
230-
cloudConfigSecretName: options.CloudConfigSecretName,
231-
cloudConfigSecretNamespace: options.CloudConfigSecretNamespace,
232-
customUserAgent: options.CustomUserAgent,
233-
userAgentSuffix: options.UserAgentSuffix,
234216
blobfuseProxyEndpoint: options.BlobfuseProxyEndpoint,
235217
enableBlobfuseProxy: options.EnableBlobfuseProxy,
236218
allowInlineVolumeKeyAccessWithIdentity: options.AllowInlineVolumeKeyAccessWithIdentity,
237219
blobfuseProxyConnTimout: options.BlobfuseProxyConnTimout,
238220
enableBlobMockMount: options.EnableBlobMockMount,
239-
allowEmptyCloudConfig: options.AllowEmptyCloudConfig,
240221
enableGetVolumeStats: options.EnableGetVolumeStats,
241222
appendMountErrorHelpLink: options.AppendMountErrorHelpLink,
242223
mountPermissions: options.MountPermissions,
243-
kubeAPIQPS: options.KubeAPIQPS,
244-
kubeAPIBurst: options.KubeAPIBurst,
245224
enableAznfsMount: options.EnableAznfsMount,
246225
sasTokenExpirationMinutes: options.SasTokenExpirationMinutes,
247226
azcopy: &util.Azcopy{},
@@ -268,25 +247,7 @@ func NewDriver(options *DriverOptions) *Driver {
268247
if d.volStatsCache, err = azcache.NewTimedCache(time.Duration(options.VolStatsCacheExpireInMinutes)*time.Minute, getter, false); err != nil {
269248
klog.Fatalf("%v", err)
270249
}
271-
return &d
272-
}
273-
274-
// Run driver initialization
275-
func (d *Driver) Run(endpoint, kubeconfig string, testBool bool) {
276-
versionMeta, err := GetVersionYAML(d.Name)
277-
if err != nil {
278-
klog.Fatalf("%v", err)
279-
}
280-
klog.Infof("\nDRIVER INFORMATION:\n-------------------\n%s\n\nStreaming logs below:", versionMeta)
281-
282-
userAgent := GetUserAgent(d.Name, d.customUserAgent, d.userAgentSuffix)
283-
klog.V(2).Infof("driver userAgent: %s", userAgent)
284-
d.cloud, err = getCloudProvider(kubeconfig, d.NodeID, d.cloudConfigSecretName, d.cloudConfigSecretNamespace, userAgent, d.allowEmptyCloudConfig, d.kubeAPIQPS, d.kubeAPIBurst)
285-
if err != nil {
286-
klog.Fatalf("failed to get Azure Cloud Provider, error: %v", err)
287-
}
288-
klog.V(2).Infof("cloud: %s, location: %s, rg: %s, VnetName: %s, VnetResourceGroup: %s, SubnetName: %s", d.cloud.Cloud, d.cloud.Location, d.cloud.ResourceGroup, d.cloud.VnetName, d.cloud.VnetResourceGroup, d.cloud.SubnetName)
289-
250+
d.cloud = cloud
290251
d.mounter = &mount.SafeFormatAndMount{
291252
Interface: mount.New(""),
292253
Exec: utilexec.New(),
@@ -321,6 +282,17 @@ func (d *Driver) Run(endpoint, kubeconfig string, testBool bool) {
321282
}
322283
d.AddNodeServiceCapabilities(nodeCap)
323284

285+
return &d
286+
}
287+
288+
// Run driver initialization
289+
func (d *Driver) Run(endpoint string, testBool bool) {
290+
versionMeta, err := GetVersionYAML(d.Name)
291+
if err != nil {
292+
klog.Fatalf("%v", err)
293+
}
294+
klog.Infof("\nDRIVER INFORMATION:\n-------------------\n%s\n\nStreaming logs below:", versionMeta)
295+
324296
s := csicommon.NewNonBlockingGRPCServer()
325297
// Driver d act as IdentityServer, ControllerServer and NodeServer
326298
s.Start(endpoint, d, d, d, testBool)

pkg/blob/blob_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func NewFakeDriver() *Driver {
5656
BlobfuseProxyConnTimout: 5,
5757
EnableBlobMockMount: false,
5858
}
59-
driver := NewDriver(&driverOptions)
59+
driver := NewDriver(&driverOptions, &azure.Cloud{})
6060
driver.Name = fakeDriverName
6161
driver.Version = vendorVersion
6262
driver.subnetLockMap = util.NewLockMap()
@@ -72,7 +72,7 @@ func TestNewFakeDriver(t *testing.T) {
7272
BlobfuseProxyConnTimout: 5,
7373
EnableBlobMockMount: false,
7474
}
75-
d := NewDriver(&driverOptions)
75+
d := NewDriver(&driverOptions, &azure.Cloud{})
7676
assert.NotNil(t, d)
7777
}
7878

@@ -85,7 +85,7 @@ func TestNewDriver(t *testing.T) {
8585
BlobfuseProxyConnTimout: 5,
8686
EnableBlobMockMount: false,
8787
}
88-
driver := NewDriver(&driverOptions)
88+
driver := NewDriver(&driverOptions, &azure.Cloud{})
8989
fakedriver := NewFakeDriver()
9090
fakedriver.Name = DefaultDriverName
9191
fakedriver.Version = driverVersion
@@ -133,7 +133,7 @@ func TestRun(t *testing.T) {
133133
os.Setenv(DefaultAzureCredentialFileEnv, fakeCredFile)
134134

135135
d := NewFakeDriver()
136-
d.Run("tcp://127.0.0.1:0", "", true)
136+
d.Run("tcp://127.0.0.1:0", true)
137137
},
138138
},
139139
{
@@ -160,7 +160,7 @@ func TestRun(t *testing.T) {
160160
d := NewFakeDriver()
161161
d.cloud = &azure.Cloud{}
162162
d.NodeID = ""
163-
d.Run("tcp://127.0.0.1:0", "", true)
163+
d.Run("tcp://127.0.0.1:0", true)
164164
},
165165
},
166166
}

pkg/blob/controllerserver_test.go

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -164,18 +164,6 @@ func TestCreateVolume(t *testing.T) {
164164
name string
165165
testFunc func(t *testing.T)
166166
}{
167-
{
168-
name: "invalid create volume req",
169-
testFunc: func(t *testing.T) {
170-
d := NewFakeDriver()
171-
req := &csi.CreateVolumeRequest{}
172-
_, err := d.CreateVolume(context.Background(), req)
173-
expectedErr := status.Error(codes.InvalidArgument, "CREATE_DELETE_VOLUME")
174-
if !reflect.DeepEqual(err, expectedErr) {
175-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
176-
}
177-
},
178-
},
179167
{
180168
name: "volume Name missing",
181169
testFunc: func(t *testing.T) {
@@ -916,20 +904,6 @@ func TestDeleteVolume(t *testing.T) {
916904
}
917905
},
918906
},
919-
{
920-
name: "invalid delete volume req",
921-
testFunc: func(t *testing.T) {
922-
d := NewFakeDriver()
923-
req := &csi.DeleteVolumeRequest{
924-
VolumeId: "unit-test",
925-
}
926-
_, err := d.DeleteVolume(context.Background(), req)
927-
expectedErr := status.Errorf(codes.Internal, "invalid delete volume req: volume_id:\"unit-test\" ")
928-
if !reflect.DeepEqual(err, expectedErr) {
929-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
930-
}
931-
},
932-
},
933907
{
934908
name: "invalid volume Id",
935909
testFunc: func(t *testing.T) {
@@ -1321,21 +1295,6 @@ func TestControllerExpandVolume(t *testing.T) {
13211295
}
13221296
},
13231297
},
1324-
{
1325-
name: "invalid expand volume req",
1326-
testFunc: func(t *testing.T) {
1327-
d := NewFakeDriver()
1328-
req := &csi.ControllerExpandVolumeRequest{
1329-
VolumeId: "unit-test",
1330-
CapacityRange: &csi.CapacityRange{},
1331-
}
1332-
_, err := d.ControllerExpandVolume(context.Background(), req)
1333-
expectedErr := status.Errorf(codes.Internal, "invalid expand volume req: volume_id:\"unit-test\" capacity_range:<> ")
1334-
if !reflect.DeepEqual(err, expectedErr) {
1335-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
1336-
}
1337-
},
1338-
},
13391298
{
13401299
name: "Volume Size exceeds Max Container Size",
13411300
testFunc: func(t *testing.T) {

pkg/blobplugin/main.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,31 +81,34 @@ func handle() {
8181
driverOptions := blob.DriverOptions{
8282
NodeID: *nodeID,
8383
DriverName: *driverName,
84-
CloudConfigSecretName: *cloudConfigSecretName,
85-
CloudConfigSecretNamespace: *cloudConfigSecretNamespace,
8684
BlobfuseProxyEndpoint: *blobfuseProxyEndpoint,
8785
EnableBlobfuseProxy: *enableBlobfuseProxy,
8886
BlobfuseProxyConnTimout: *blobfuseProxyConnTimout,
8987
EnableBlobMockMount: *enableBlobMockMount,
90-
CustomUserAgent: *customUserAgent,
91-
UserAgentSuffix: *userAgentSuffix,
92-
AllowEmptyCloudConfig: *allowEmptyCloudConfig,
9388
EnableGetVolumeStats: *enableGetVolumeStats,
9489
AppendTimeStampInCacheDir: *appendTimeStampInCacheDir,
9590
MountPermissions: *mountPermissions,
9691
AllowInlineVolumeKeyAccessWithIdentity: *allowInlineVolumeKeyAccessWithIdentity,
9792
AppendMountErrorHelpLink: *appendMountErrorHelpLink,
98-
KubeAPIQPS: *kubeAPIQPS,
99-
KubeAPIBurst: *kubeAPIBurst,
10093
EnableAznfsMount: *enableAznfsMount,
10194
VolStatsCacheExpireInMinutes: *volStatsCacheExpireInMinutes,
10295
SasTokenExpirationMinutes: *sasTokenExpirationMinutes,
10396
}
104-
driver := blob.NewDriver(&driverOptions)
97+
98+
userAgent := blob.GetUserAgent(driverOptions.DriverName, *customUserAgent, *userAgentSuffix)
99+
klog.V(2).Infof("driver userAgent: %s", userAgent)
100+
101+
cloud, err := blob.GetCloudProvider(*kubeconfig, driverOptions.NodeID, *cloudConfigSecretName, *cloudConfigSecretNamespace, userAgent, *allowEmptyCloudConfig, *kubeAPIQPS, *kubeAPIBurst)
102+
if err != nil {
103+
klog.Fatalf("failed to get Azure Cloud Provider, error: %v", err)
104+
}
105+
klog.V(2).Infof("cloud: %s, location: %s, rg: %s, VnetName: %s, VnetResourceGroup: %s, SubnetName: %s", cloud.Cloud, cloud.Location, cloud.ResourceGroup, cloud.VnetName, cloud.VnetResourceGroup, cloud.SubnetName)
106+
107+
driver := blob.NewDriver(&driverOptions, cloud)
105108
if driver == nil {
106109
klog.Fatalln("Failed to initialize Azure Blob Storage CSI driver")
107110
}
108-
driver.Run(*endpoint, *kubeconfig, false)
111+
driver.Run(*endpoint, false)
109112
}
110113

111114
func exportMetrics() {

test/e2e/suite_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ var _ = ginkgo.SynchronizedBeforeSuite(func(ctx ginkgo.SpecContext) []byte {
143143
// spin up a blob driver locally to make use of the azure client and controller service
144144
kubeconfig := os.Getenv(kubeconfigEnvVar)
145145
_, useBlobfuseProxy := os.LookupEnv("ENABLE_BLOBFUSE_PROXY")
146+
os.Setenv("AZURE_CREDENTIAL_FILE", credentials.TempAzureCredentialFilePath)
146147
driverOptions := blob.DriverOptions{
147148
NodeID: os.Getenv("nodeid"),
148149
DriverName: blob.DefaultDriverName,
@@ -151,10 +152,11 @@ var _ = ginkgo.SynchronizedBeforeSuite(func(ctx ginkgo.SpecContext) []byte {
151152
BlobfuseProxyConnTimout: 5,
152153
EnableBlobMockMount: false,
153154
}
154-
blobDriver = blob.NewDriver(&driverOptions)
155+
cloud, err := blob.GetCloudProvider(kubeconfig, driverOptions.NodeID, "", "", "", false, 0, 0)
156+
gomega.Expect(err).NotTo(gomega.HaveOccurred())
157+
blobDriver = blob.NewDriver(&driverOptions, cloud)
155158
go func() {
156-
os.Setenv("AZURE_CREDENTIAL_FILE", credentials.TempAzureCredentialFilePath)
157-
blobDriver.Run(fmt.Sprintf("unix:///tmp/csi-%s.sock", uuid.NewUUID().String()), kubeconfig, false)
159+
blobDriver.Run(fmt.Sprintf("unix:///tmp/csi-%s.sock", uuid.NewUUID().String()), false)
158160
}()
159161
})
160162

0 commit comments

Comments
 (0)