@@ -13,6 +13,7 @@ import (
13
13
"github.com/rh-ecosystem-edge/kernel-module-management/internal/daemonset"
14
14
"github.com/rh-ecosystem-edge/kernel-module-management/internal/metrics"
15
15
"github.com/rh-ecosystem-edge/kernel-module-management/internal/module"
16
+ "github.com/rh-ecosystem-edge/kernel-module-management/internal/rbac"
16
17
"github.com/rh-ecosystem-edge/kernel-module-management/internal/registry"
17
18
"github.com/rh-ecosystem-edge/kernel-module-management/internal/statusupdater"
18
19
appsv1 "k8s.io/api/apps/v1"
@@ -34,6 +35,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
34
35
ctrl * gomock.Controller
35
36
clnt * client.MockClient
36
37
mockBM * build.MockManager
38
+ mockRC * rbac.MockRBACCreator
37
39
mockDC * daemonset.MockDaemonSetCreator
38
40
mockKM * module.MockKernelMapper
39
41
mockMetrics * metrics.MockMetrics
@@ -45,6 +47,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
45
47
ctrl = gomock .NewController (GinkgoT ())
46
48
clnt = client .NewMockClient (ctrl )
47
49
mockBM = build .NewMockManager (ctrl )
50
+ mockRC = rbac .NewMockRBACCreator (ctrl )
48
51
mockDC = daemonset .NewMockDaemonSetCreator (ctrl )
49
52
mockKM = module .NewMockKernelMapper (ctrl )
50
53
mockMetrics = metrics .NewMockMetrics (ctrl )
@@ -74,6 +77,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
74
77
mr := NewModuleReconciler (
75
78
clnt ,
76
79
mockBM ,
80
+ mockRC ,
77
81
mockDC ,
78
82
mockKM ,
79
83
mockMetrics ,
@@ -89,14 +93,97 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
89
93
)
90
94
})
91
95
96
+ It ("should add the module loader and device plugin ServiceAccounts if they are not set" , func () {
97
+ mod := kmmv1beta1.Module {
98
+ ObjectMeta : metav1.ObjectMeta {
99
+ Name : moduleName ,
100
+ Namespace : namespace ,
101
+ },
102
+ Spec : kmmv1beta1.ModuleSpec {
103
+ Selector : map [string ]string {"key" : "value" },
104
+ ModuleLoader : kmmv1beta1.ModuleLoaderSpec {
105
+ ServiceAccountName : "" ,
106
+ },
107
+ DevicePlugin : & kmmv1beta1.DevicePluginSpec {
108
+ ServiceAccountName : "" ,
109
+ },
110
+ },
111
+ }
112
+ ds := appsv1.DaemonSet {
113
+ ObjectMeta : metav1.ObjectMeta {
114
+ Name : moduleName + "-device-plugin" ,
115
+ Namespace : namespace ,
116
+ },
117
+ }
118
+
119
+ gomock .InOrder (
120
+ clnt .EXPECT ().Get (ctx , req .NamespacedName , gomock .Any ()).DoAndReturn (
121
+ func (_ interface {}, _ interface {}, m * kmmv1beta1.Module ) error {
122
+ m .ObjectMeta = mod .ObjectMeta
123
+ m .Spec = mod .Spec
124
+ return nil
125
+ },
126
+ ),
127
+ clnt .EXPECT ().List (ctx , gomock .Any (), gomock .Any ()).DoAndReturn (
128
+ func (_ interface {}, list * kmmv1beta1.ModuleList , _ ... interface {}) error {
129
+ list .Items = []kmmv1beta1.Module {mod }
130
+ return nil
131
+ },
132
+ ),
133
+ mockMetrics .EXPECT ().SetExistingKMMOModules (1 ),
134
+ mockRC .EXPECT ().CreateModuleLoaderServiceAccount (ctx , gomock .Any ()).Return (nil ),
135
+ mockRC .EXPECT ().CreateDevicePluginServiceAccount (ctx , gomock .Any ()).Return (nil ),
136
+ clnt .EXPECT ().List (ctx , gomock .Any (), gomock .Any ()).DoAndReturn (
137
+ func (_ interface {}, list * v1.NodeList , _ ... interface {}) error {
138
+ list .Items = []v1.Node {}
139
+ return nil
140
+ },
141
+ ),
142
+ clnt .EXPECT ().Get (ctx , gomock .Any (), gomock .Any ()).Return (apierrors .NewNotFound (schema.GroupResource {}, "whatever" )),
143
+ clnt .EXPECT ().Get (ctx , gomock .Any (), gomock .Any ()).Return (apierrors .NewNotFound (schema.GroupResource {}, "whatever" )),
144
+ mockDC .EXPECT ().SetDevicePluginAsDesired (context .Background (), & ds , gomock .AssignableToTypeOf (& mod )),
145
+ clnt .EXPECT ().Create (ctx , gomock .Any ()).Return (nil ),
146
+ mockMetrics .EXPECT ().SetCompletedStage (moduleName , namespace , "" , metrics .DevicePluginStage , false ),
147
+ )
148
+
149
+ mr := NewModuleReconciler (
150
+ clnt ,
151
+ mockBM ,
152
+ mockRC ,
153
+ mockDC ,
154
+ mockKM ,
155
+ mockMetrics ,
156
+ nil ,
157
+ mockRegistry ,
158
+ nil ,
159
+ mockSU )
160
+
161
+ dsByKernelVersion := make (map [string ]* appsv1.DaemonSet )
162
+
163
+ gomock .InOrder (
164
+ mockDC .EXPECT ().ModuleDaemonSetsByKernelVersion (ctx , moduleName , namespace ).Return (dsByKernelVersion , nil ),
165
+ mockDC .EXPECT ().GarbageCollect (ctx , dsByKernelVersion , sets .NewString ()),
166
+ mockSU .EXPECT ().ModuleUpdateStatus (ctx , & mod , []v1.Node {}, []v1.Node {}, dsByKernelVersion ).Return (nil ),
167
+ )
168
+
169
+ res , err := mr .Reconcile (context .Background (), req )
170
+ Expect (err ).NotTo (HaveOccurred ())
171
+ Expect (res ).To (Equal (reconcile.Result {}))
172
+ })
173
+
92
174
It ("should do nothing when no nodes match the selector" , func () {
175
+ const serviceAccountName = "module-loader-service-account"
176
+
93
177
mod := kmmv1beta1.Module {
94
178
ObjectMeta : metav1.ObjectMeta {
95
179
Name : moduleName ,
96
180
Namespace : namespace ,
97
181
},
98
182
Spec : kmmv1beta1.ModuleSpec {
99
183
Selector : map [string ]string {"key" : "value" },
184
+ ModuleLoader : kmmv1beta1.ModuleLoaderSpec {
185
+ ServiceAccountName : serviceAccountName ,
186
+ },
100
187
},
101
188
}
102
189
@@ -126,6 +213,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
126
213
mr := NewModuleReconciler (
127
214
clnt ,
128
215
mockBM ,
216
+ mockRC ,
129
217
mockDC ,
130
218
mockKM ,
131
219
mockMetrics ,
@@ -149,7 +237,10 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
149
237
})
150
238
151
239
It ("should remove obsolete DaemonSets when no nodes match the selector" , func () {
152
- const kernelVersion = "1.2.3"
240
+ const (
241
+ kernelVersion = "1.2.3"
242
+ serviceAccountName = "module-loader-service-account"
243
+ )
153
244
154
245
mod := kmmv1beta1.Module {
155
246
ObjectMeta : metav1.ObjectMeta {
@@ -158,6 +249,9 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
158
249
},
159
250
Spec : kmmv1beta1.ModuleSpec {
160
251
Selector : map [string ]string {"key" : "value" },
252
+ ModuleLoader : kmmv1beta1.ModuleLoaderSpec {
253
+ ServiceAccountName : serviceAccountName ,
254
+ },
161
255
},
162
256
}
163
257
@@ -194,6 +288,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
194
288
mr := NewModuleReconciler (
195
289
clnt ,
196
290
mockBM ,
291
+ mockRC ,
197
292
mockDC ,
198
293
mockKM ,
199
294
mockMetrics ,
@@ -218,8 +313,9 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
218
313
219
314
It ("should create a DaemonSet when a node matches the selector" , func () {
220
315
const (
221
- imageName = "test-image"
222
- kernelVersion = "1.2.3"
316
+ imageName = "test-image"
317
+ kernelVersion = "1.2.3"
318
+ serviceAccountName = "module-loader-service-account"
223
319
)
224
320
225
321
mappings := []kmmv1beta1.KernelMapping {
@@ -238,6 +334,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
238
334
},
239
335
Spec : kmmv1beta1.ModuleSpec {
240
336
ModuleLoader : kmmv1beta1.ModuleLoaderSpec {
337
+ ServiceAccountName : serviceAccountName ,
241
338
Container : kmmv1beta1.ModuleLoaderContainerSpec {
242
339
KernelMappings : mappings ,
243
340
},
@@ -265,6 +362,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
265
362
mr := NewModuleReconciler (
266
363
clnt ,
267
364
mockBM ,
365
+ mockRC ,
268
366
mockDC ,
269
367
mockKM ,
270
368
mockMetrics ,
@@ -320,8 +418,9 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
320
418
321
419
It ("should patch the DaemonSet when it already exists" , func () {
322
420
const (
323
- imageName = "test-image"
324
- kernelVersion = "1.2.3"
421
+ imageName = "test-image"
422
+ kernelVersion = "1.2.3"
423
+ serviceAccountName = "module-loader-service-account"
325
424
)
326
425
327
426
osConfig := module.NodeOSConfig {}
@@ -342,6 +441,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
342
441
},
343
442
Spec : kmmv1beta1.ModuleSpec {
344
443
ModuleLoader : kmmv1beta1.ModuleLoaderSpec {
444
+ ServiceAccountName : serviceAccountName ,
345
445
Container : kmmv1beta1.ModuleLoaderContainerSpec {
346
446
KernelMappings : mappings ,
347
447
},
@@ -404,6 +504,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
404
504
mr := NewModuleReconciler (
405
505
clnt ,
406
506
mockBM ,
507
+ mockRC ,
407
508
mockDC ,
408
509
mockKM ,
409
510
mockMetrics ,
@@ -437,6 +538,9 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
437
538
const (
438
539
imageName = "test-image"
439
540
kernelVersion = "1.2.3"
541
+
542
+ moduleLoaderServiceAccountName = "module-loader-service-account"
543
+ devicePluginServiceAccountName = "device-plugin-service-account"
440
544
)
441
545
442
546
mappings := []kmmv1beta1.KernelMapping {
@@ -452,8 +556,11 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
452
556
Namespace : namespace ,
453
557
},
454
558
Spec : kmmv1beta1.ModuleSpec {
455
- DevicePlugin : & kmmv1beta1.DevicePluginSpec {},
559
+ DevicePlugin : & kmmv1beta1.DevicePluginSpec {
560
+ ServiceAccountName : devicePluginServiceAccountName ,
561
+ },
456
562
ModuleLoader : kmmv1beta1.ModuleLoaderSpec {
563
+ ServiceAccountName : moduleLoaderServiceAccountName ,
457
564
Container : kmmv1beta1.ModuleLoaderContainerSpec {
458
565
KernelMappings : mappings ,
459
566
},
@@ -465,6 +572,7 @@ var _ = Describe("ModuleReconciler_Reconcile", func() {
465
572
mr := NewModuleReconciler (
466
573
clnt ,
467
574
mockBM ,
575
+ mockRC ,
468
576
mockDC ,
469
577
mockKM ,
470
578
mockMetrics ,
@@ -524,6 +632,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
524
632
clnt * client.MockClient
525
633
mockAuthFactory * auth.MockRegistryAuthGetterFactory
526
634
mockBM * build.MockManager
635
+ mockRC * rbac.MockRBACCreator
527
636
mockDC * daemonset.MockDaemonSetCreator
528
637
mockKM * module.MockKernelMapper
529
638
mockMetrics * metrics.MockMetrics
@@ -536,6 +645,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
536
645
clnt = client .NewMockClient (ctrl )
537
646
mockAuthFactory = auth .NewMockRegistryAuthGetterFactory (ctrl )
538
647
mockBM = build .NewMockManager (ctrl )
648
+ mockRC = rbac .NewMockRBACCreator (ctrl )
539
649
mockDC = daemonset .NewMockDaemonSetCreator (ctrl )
540
650
mockKM = module .NewMockKernelMapper (ctrl )
541
651
mockMetrics = metrics .NewMockMetrics (ctrl )
@@ -560,6 +670,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
560
670
mr := NewModuleReconciler (
561
671
clnt ,
562
672
mockBM ,
673
+ mockRC ,
563
674
mockDC ,
564
675
mockKM ,
565
676
mockMetrics ,
@@ -610,6 +721,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
610
721
mr := NewModuleReconciler (
611
722
clnt ,
612
723
mockBM ,
724
+ mockRC ,
613
725
mockDC ,
614
726
mockKM ,
615
727
mockMetrics ,
@@ -653,6 +765,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
653
765
mr := NewModuleReconciler (
654
766
clnt ,
655
767
mockBM ,
768
+ mockRC ,
656
769
mockDC ,
657
770
mockKM ,
658
771
mockMetrics ,
@@ -694,6 +807,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
694
807
mr := NewModuleReconciler (
695
808
clnt ,
696
809
mockBM ,
810
+ mockRC ,
697
811
mockDC ,
698
812
mockKM ,
699
813
mockMetrics ,
@@ -735,6 +849,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
735
849
mr := NewModuleReconciler (
736
850
clnt ,
737
851
mockBM ,
852
+ mockRC ,
738
853
mockDC ,
739
854
mockKM ,
740
855
mockMetrics ,
@@ -776,6 +891,7 @@ var _ = Describe("ModuleReconciler_handleBuild", func() {
776
891
mr := NewModuleReconciler (
777
892
clnt ,
778
893
mockBM ,
894
+ mockRC ,
779
895
mockDC ,
780
896
mockKM ,
781
897
mockMetrics ,
0 commit comments