@@ -21,10 +21,11 @@ import (
21
21
"fmt"
22
22
23
23
ootov1alpha1 "github.com/qbarrand/oot-operator/api/v1alpha1"
24
- "github.com/qbarrand/oot-operator/controllers/build"
25
- "github.com/qbarrand/oot-operator/controllers/module"
26
- "github.com/qbarrand/oot-operator/controllers/predicates"
27
- "github.com/qbarrand/oot-operator/pkg/metrics"
24
+ "github.com/qbarrand/oot-operator/internal/build"
25
+ "github.com/qbarrand/oot-operator/internal/daemonset"
26
+ "github.com/qbarrand/oot-operator/internal/filter"
27
+ "github.com/qbarrand/oot-operator/internal/metrics"
28
+ "github.com/qbarrand/oot-operator/internal/module"
28
29
appsv1 "k8s.io/api/apps/v1"
29
30
batchv1 "k8s.io/api/batch/v1"
30
31
v1 "k8s.io/api/core/v1"
@@ -38,35 +39,37 @@ import (
38
39
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
39
40
"sigs.k8s.io/controller-runtime/pkg/handler"
40
41
"sigs.k8s.io/controller-runtime/pkg/log"
41
- "sigs.k8s.io/controller-runtime/pkg/predicate"
42
42
"sigs.k8s.io/controller-runtime/pkg/source"
43
43
)
44
44
45
45
// ModuleReconciler reconciles a Module object
46
46
type ModuleReconciler struct {
47
47
client.Client
48
48
49
- bm build.Manager
50
- dc DaemonSetCreator
51
- km module.KernelMapper
52
- su module.ConditionsUpdater
53
- metrics metrics.Metrics
49
+ buildAPI build.Manager
50
+ daemonAPI daemonset.DaemonSetCreator
51
+ kernelAPI module.KernelMapper
52
+ conditionsAPI module.ConditionsUpdater
53
+ metricsAPI metrics.Metrics
54
+ filter * filter.Filter
54
55
}
55
56
56
57
func NewModuleReconciler (
57
58
client client.Client ,
58
- bm build.Manager ,
59
- dg DaemonSetCreator ,
60
- km module.KernelMapper ,
61
- su module.ConditionsUpdater ,
62
- metrics metrics.Metrics ) * ModuleReconciler {
59
+ buildAPI build.Manager ,
60
+ daemonAPI daemonset.DaemonSetCreator ,
61
+ kernelAPI module.KernelMapper ,
62
+ conditionsAPI module.ConditionsUpdater ,
63
+ metricsAPI metrics.Metrics ,
64
+ filter * filter.Filter ) * ModuleReconciler {
63
65
return & ModuleReconciler {
64
- Client : client ,
65
- bm : bm ,
66
- dc : dg ,
67
- km : km ,
68
- su : su ,
69
- metrics : metrics ,
66
+ Client : client ,
67
+ buildAPI : buildAPI ,
68
+ daemonAPI : daemonAPI ,
69
+ kernelAPI : kernelAPI ,
70
+ conditionsAPI : conditionsAPI ,
71
+ metricsAPI : metricsAPI ,
72
+ filter : filter ,
70
73
}
71
74
}
72
75
@@ -105,7 +108,7 @@ func (r *ModuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr
105
108
106
109
mappings := r .getKernelMappings (ctx , nodes , mod )
107
110
108
- dsByKernelVersion , err := r .dc .ModuleDaemonSetsByKernelVersion (ctx , mod .Name , mod .Namespace )
111
+ dsByKernelVersion , err := r .daemonAPI .ModuleDaemonSetsByKernelVersion (ctx , mod .Name , mod .Namespace )
109
112
if err != nil {
110
113
return res , fmt .Errorf ("could get DaemonSets for module %s: %v" , mod .Name , err )
111
114
}
@@ -143,7 +146,7 @@ func (r *ModuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr
143
146
// Garbage collect old DaemonSets for which there are no nodes.
144
147
validKernels := sets .StringKeySet (mappings )
145
148
146
- deleted , err := r .dc .GarbageCollect (ctx , dsByKernelVersion , validKernels )
149
+ deleted , err := r .daemonAPI .GarbageCollect (ctx , dsByKernelVersion , validKernels )
147
150
if err != nil {
148
151
return res , fmt .Errorf ("could not garbage collect DaemonSets: %v" , err )
149
152
}
@@ -158,7 +161,7 @@ func (r *ModuleReconciler) getKernelMappings(ctx context.Context, nodes v1.NodeL
158
161
logger := log .FromContext (ctx )
159
162
160
163
for _ , node := range nodes .Items {
161
- osConfig := r .km .GetNodeOSConfig (& node )
164
+ osConfig := r .kernelAPI .GetNodeOSConfig (& node )
162
165
kernelVersion := node .Status .NodeInfo .KernelVersion
163
166
164
167
nodeLogger := logger .WithValues (
@@ -171,13 +174,13 @@ func (r *ModuleReconciler) getKernelMappings(ctx context.Context, nodes v1.NodeL
171
174
continue
172
175
}
173
176
174
- m , err := r .km .FindMappingForKernel (mod .Spec .KernelMappings , kernelVersion )
177
+ m , err := r .kernelAPI .FindMappingForKernel (mod .Spec .KernelMappings , kernelVersion )
175
178
if err != nil {
176
179
nodeLogger .Info ("no suitable container image found; skipping node" )
177
180
continue
178
181
}
179
182
180
- m , err = r .km .PrepareKernelMapping (m , osConfig )
183
+ m , err = r .kernelAPI .PrepareKernelMapping (m , osConfig )
181
184
if err != nil {
182
185
nodeLogger .Info ("failed to substitute the template variables in the mapping" , "error" , err )
183
186
continue
@@ -205,7 +208,7 @@ func (r *ModuleReconciler) handleBuild(ctx context.Context,
205
208
logger := log .FromContext (ctx ).WithValues ("kernel version" , kernelVersion , "image" , km .ContainerImage )
206
209
buildCtx := log .IntoContext (ctx , logger )
207
210
208
- buildRes , err := r .bm .Sync (buildCtx , * mod , * km , kernelVersion )
211
+ buildRes , err := r .buildAPI .Sync (buildCtx , * mod , * km , kernelVersion )
209
212
if err != nil {
210
213
return false , fmt .Errorf ("could not synchronize the build: %w" , err )
211
214
}
@@ -232,7 +235,7 @@ func (r *ModuleReconciler) handleDriverContainer(ctx context.Context,
232
235
}
233
236
234
237
_ , err := controllerutil .CreateOrPatch (ctx , r .Client , ds , func () error {
235
- return r .dc .SetDriverContainerAsDesired (ctx , ds , km .ContainerImage , * mod , kernelVersion )
238
+ return r .daemonAPI .SetDriverContainerAsDesired (ctx , ds , km .ContainerImage , * mod , kernelVersion )
236
239
})
237
240
238
241
return err
@@ -255,7 +258,7 @@ func (r *ModuleReconciler) handleDevicePlugin(ctx context.Context, mod *ootov1al
255
258
}
256
259
257
260
opRes , err := controllerutil .CreateOrPatch (ctx , r .Client , ds , func () error {
258
- return r .dc .SetDevicePluginAsDesired (ctx , ds , mod )
261
+ return r .daemonAPI .SetDevicePluginAsDesired (ctx , ds , mod )
259
262
})
260
263
261
264
if err == nil {
@@ -274,7 +277,7 @@ func (r *ModuleReconciler) setKMMOMetrics(ctx context.Context) {
274
277
logger .V (1 ).Info ("failed to list KMMomodules for metrics" , "error" , err )
275
278
}
276
279
277
- r .metrics .SetExistingKMMOModules (len (mods .Items ))
280
+ r .metricsAPI .SetExistingKMMOModules (len (mods .Items ))
278
281
}
279
282
280
283
func (r * ModuleReconciler ) getRequestedModule (ctx context.Context , namespacedName types.NamespacedName ) (* ootov1alpha1.Module , error ) {
@@ -288,30 +291,17 @@ func (r *ModuleReconciler) getRequestedModule(ctx context.Context, namespacedNam
288
291
289
292
// SetupWithManager sets up the controller with the Manager.
290
293
func (r * ModuleReconciler ) SetupWithManager (mgr ctrl.Manager , kernelLabel string ) error {
291
- nmm := NewNodeModuleMapper (
292
- r .Client ,
293
- mgr .GetLogger ().WithName ("controller/module/node-module-mapper" ),
294
- )
295
-
296
294
return ctrl .NewControllerManagedBy (mgr ).
297
295
For (& ootov1alpha1.Module {}).
298
296
Owns (& appsv1.DaemonSet {}).
299
297
Owns (& batchv1.Job {}).
300
298
Watches (
301
299
& source.Kind {Type : & v1.Node {}},
302
- handler .EnqueueRequestsFromMapFunc (nmm .FindModulesForNode ),
300
+ handler .EnqueueRequestsFromMapFunc (r . filter .FindModulesForNode ),
303
301
builder .WithPredicates (
304
- ModuleReconcilerNodePredicate (kernelLabel ),
302
+ r . filter . ModuleReconcilerNodePredicate (kernelLabel ),
305
303
),
306
304
).
307
305
Named ("module" ).
308
306
Complete (r )
309
307
}
310
-
311
- func ModuleReconcilerNodePredicate (kernelLabel string ) predicate.Predicate {
312
- return predicate .And (
313
- predicates .SkipDeletions ,
314
- predicates .HasLabel (kernelLabel ),
315
- predicate.LabelChangedPredicate {},
316
- )
317
- }
0 commit comments