Skip to content

Commit 1d5615e

Browse files
committed
Refactor internal/{api,module}
Move MLD-related internal/module functions to internal/api. Remove the KernelMapper type in favor of ModuleLoaderFactory. Use ModuleLoaderData methods everywhere instead of internal/module functions.
1 parent 34f9a39 commit 1d5615e

37 files changed

+1199
-1224
lines changed

cmd/manager-hub/main.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package main
1919
import (
2020
"flag"
2121

22+
"github.com/kubernetes-sigs/kernel-module-management/internal/api"
2223
"k8s.io/apimachinery/pkg/runtime"
2324
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2425
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -35,17 +36,14 @@ import (
3536

3637
"github.com/kubernetes-sigs/kernel-module-management/api-hub/v1beta1"
3738
"github.com/kubernetes-sigs/kernel-module-management/controllers/hub"
38-
"github.com/kubernetes-sigs/kernel-module-management/internal/build"
3939
"github.com/kubernetes-sigs/kernel-module-management/internal/build/job"
4040
"github.com/kubernetes-sigs/kernel-module-management/internal/cluster"
4141
"github.com/kubernetes-sigs/kernel-module-management/internal/cmd"
4242
"github.com/kubernetes-sigs/kernel-module-management/internal/constants"
4343
"github.com/kubernetes-sigs/kernel-module-management/internal/filter"
4444
"github.com/kubernetes-sigs/kernel-module-management/internal/manifestwork"
4545
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
46-
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
4746
"github.com/kubernetes-sigs/kernel-module-management/internal/registry"
48-
"github.com/kubernetes-sigs/kernel-module-management/internal/sign"
4947
signjob "github.com/kubernetes-sigs/kernel-module-management/internal/sign/job"
5048
"github.com/kubernetes-sigs/kernel-module-management/internal/statusupdater"
5149
"github.com/kubernetes-sigs/kernel-module-management/internal/utils"
@@ -106,11 +104,10 @@ func main() {
106104

107105
registryAPI := registry.NewRegistry()
108106
jobHelperAPI := utils.NewJobHelper(client)
109-
buildHelper := build.NewHelper()
110107

111108
buildAPI := job.NewBuildManager(
112109
client,
113-
job.NewMaker(client, buildHelper, jobHelperAPI, scheme),
110+
job.NewMaker(client, jobHelperAPI, scheme),
114111
jobHelperAPI,
115112
registryAPI,
116113
)
@@ -130,7 +127,7 @@ func main() {
130127
mcmr := hub.NewManagedClusterModuleReconciler(
131128
client,
132129
manifestwork.NewCreator(client, scheme),
133-
cluster.NewClusterAPI(client, module.NewKernelMapper(buildHelper, sign.NewSignerHelper()), buildAPI, signAPI, operatorNamespace),
130+
cluster.NewClusterAPI(client, api.NewModuleLoaderDataFactory(), buildAPI, signAPI, operatorNamespace),
134131
statusupdater.NewManagedClusterModuleStatusUpdater(client),
135132
filterAPI,
136133
)

cmd/manager/main.go

+5-8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"os"
2323
"strconv"
2424

25+
"github.com/kubernetes-sigs/kernel-module-management/internal/api"
2526
"k8s.io/apimachinery/pkg/runtime"
2627
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2728
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -37,17 +38,14 @@ import (
3738

3839
v1beta12 "github.com/kubernetes-sigs/kernel-module-management/api/v1beta1"
3940
"github.com/kubernetes-sigs/kernel-module-management/controllers"
40-
"github.com/kubernetes-sigs/kernel-module-management/internal/build"
4141
"github.com/kubernetes-sigs/kernel-module-management/internal/build/job"
4242
"github.com/kubernetes-sigs/kernel-module-management/internal/cmd"
4343
"github.com/kubernetes-sigs/kernel-module-management/internal/constants"
4444
"github.com/kubernetes-sigs/kernel-module-management/internal/daemonset"
4545
"github.com/kubernetes-sigs/kernel-module-management/internal/filter"
4646
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
47-
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
4847
"github.com/kubernetes-sigs/kernel-module-management/internal/preflight"
4948
"github.com/kubernetes-sigs/kernel-module-management/internal/registry"
50-
"github.com/kubernetes-sigs/kernel-module-management/internal/sign"
5149
signjob "github.com/kubernetes-sigs/kernel-module-management/internal/sign/job"
5250
"github.com/kubernetes-sigs/kernel-module-management/internal/statusupdater"
5351
"github.com/kubernetes-sigs/kernel-module-management/internal/utils"
@@ -114,11 +112,10 @@ func main() {
114112

115113
registryAPI := registry.NewRegistry()
116114
jobHelperAPI := utils.NewJobHelper(client)
117-
buildHelperAPI := build.NewHelper()
118115

119116
buildAPI := job.NewBuildManager(
120117
client,
121-
job.NewMaker(client, buildHelperAPI, jobHelperAPI, scheme),
118+
job.NewMaker(client, jobHelperAPI, scheme),
122119
jobHelperAPI,
123120
registryAPI,
124121
)
@@ -131,14 +128,14 @@ func main() {
131128
)
132129

133130
daemonAPI := daemonset.NewCreator(client, constants.KernelLabel, scheme)
134-
kernelAPI := module.NewKernelMapper(buildHelperAPI, sign.NewSignerHelper())
131+
mldFactory := api.NewModuleLoaderDataFactory()
135132

136133
mc := controllers.NewModuleReconciler(
137134
client,
138135
buildAPI,
139136
signAPI,
140137
daemonAPI,
141-
kernelAPI,
138+
mldFactory,
142139
metricsAPI,
143140
filterAPI,
144141
statusupdater.NewModuleStatusUpdater(client),
@@ -160,7 +157,7 @@ func main() {
160157
}
161158

162159
preflightStatusUpdaterAPI := statusupdater.NewPreflightStatusUpdater(client)
163-
preflightAPI := preflight.NewPreflightAPI(client, buildAPI, signAPI, registryAPI, preflightStatusUpdaterAPI, kernelAPI)
160+
preflightAPI := preflight.NewPreflightAPI(client, buildAPI, signAPI, registryAPI, preflightStatusUpdaterAPI, mldFactory)
164161

165162
if err = controllers.NewPreflightValidationReconciler(client, filterAPI, metricsAPI, preflightStatusUpdaterAPI, preflightAPI).SetupWithManager(mgr); err != nil {
166163
cmd.FatalError(setupLogger, err, "unable to create controller", "name", controllers.PreflightValidationReconcilerName)

controllers/module_reconciler.go

+9-11
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"github.com/kubernetes-sigs/kernel-module-management/internal/daemonset"
2828
"github.com/kubernetes-sigs/kernel-module-management/internal/filter"
2929
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
30-
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
3130
"github.com/kubernetes-sigs/kernel-module-management/internal/sign"
3231
"github.com/kubernetes-sigs/kernel-module-management/internal/statusupdater"
3332
"github.com/kubernetes-sigs/kernel-module-management/internal/utils"
@@ -66,13 +65,13 @@ func NewModuleReconciler(
6665
buildAPI build.Manager,
6766
signAPI sign.SignManager,
6867
daemonAPI daemonset.DaemonSetCreator,
69-
kernelAPI module.KernelMapper,
68+
mldFactory api.ModuleLoaderDataFactory,
7069
metricsAPI metrics.Metrics,
7170
filter *filter.Filter,
7271
statusUpdaterAPI statusupdater.ModuleStatusUpdater,
7372
operatorNamespace string,
7473
) *ModuleReconciler {
75-
reconHelperAPI := newModuleReconcilerHelper(client, buildAPI, signAPI, daemonAPI, kernelAPI, metricsAPI)
74+
reconHelperAPI := newModuleReconcilerHelper(client, buildAPI, signAPI, daemonAPI, mldFactory, metricsAPI)
7675
return &ModuleReconciler{
7776
daemonAPI: daemonAPI,
7877
reconHelperAPI: reconHelperAPI,
@@ -200,22 +199,22 @@ type moduleReconcilerHelper struct {
200199
buildAPI build.Manager
201200
signAPI sign.SignManager
202201
daemonAPI daemonset.DaemonSetCreator
203-
kernelAPI module.KernelMapper
202+
mldFactory api.ModuleLoaderDataFactory
204203
metricsAPI metrics.Metrics
205204
}
206205

207206
func newModuleReconcilerHelper(client client.Client,
208207
buildAPI build.Manager,
209208
signAPI sign.SignManager,
210209
daemonAPI daemonset.DaemonSetCreator,
211-
kernelAPI module.KernelMapper,
210+
mldFactory api.ModuleLoaderDataFactory,
212211
metricsAPI metrics.Metrics) moduleReconcilerHelperAPI {
213212
return &moduleReconcilerHelper{
214213
client: client,
215214
buildAPI: buildAPI,
216215
signAPI: signAPI,
217216
daemonAPI: daemonAPI,
218-
kernelAPI: kernelAPI,
217+
mldFactory: mldFactory,
219218
metricsAPI: metricsAPI,
220219
}
221220
}
@@ -243,7 +242,7 @@ func (mrh *moduleReconcilerHelper) getRelevantKernelMappingsAndNodes(ctx context
243242
continue
244243
}
245244

246-
mld, err := mrh.kernelAPI.GetModuleLoaderDataForKernel(mod, kernelVersion)
245+
mld, err := mrh.mldFactory.FromModule(mod, kernelVersion)
247246
if err != nil {
248247
nodeLogger.Error(err, "failed to get and process kernel mapping")
249248
continue
@@ -320,10 +319,9 @@ func (mrh *moduleReconcilerHelper) handleSigning(ctx context.Context, mld *api.M
320319
return true, nil
321320
}
322321

323-
// if we need to sign AND we've built, then we must have built the intermediate image so must figure out its name
324-
previousImage := ""
325-
if module.ShouldBeBuilt(mld) {
326-
previousImage = module.IntermediateImageName(mld.Name, mld.Namespace, mld.ContainerImage)
322+
previousImage, err := mld.UnsignedImage()
323+
if err != nil {
324+
return false, fmt.Errorf("could not determine the unsigned image: %v", err)
327325
}
328326

329327
logger := log.FromContext(ctx).WithValues("kernel version", mld.KernelVersion, "image", mld.ContainerImage)

controllers/module_reconciler_test.go

+9-10
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"github.com/kubernetes-sigs/kernel-module-management/internal/client"
1313
"github.com/kubernetes-sigs/kernel-module-management/internal/daemonset"
1414
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
15-
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
1615
"github.com/kubernetes-sigs/kernel-module-management/internal/sign"
1716
"github.com/kubernetes-sigs/kernel-module-management/internal/statusupdater"
1817
"github.com/kubernetes-sigs/kernel-module-management/internal/utils"
@@ -286,15 +285,15 @@ var _ = Describe("ModuleReconciler_getNodesListBySelector", func() {
286285

287286
var _ = Describe("ModuleReconciler_getRelevantKernelMappingsAndNodes", func() {
288287
var (
289-
ctrl *gomock.Controller
290-
mockKM *module.MockKernelMapper
291-
mhr moduleReconcilerHelperAPI
288+
ctrl *gomock.Controller
289+
mockMLDFactory *api.MockModuleLoaderDataFactory
290+
mhr moduleReconcilerHelperAPI
292291
)
293292

294293
BeforeEach(func() {
295294
ctrl = gomock.NewController(GinkgoT())
296-
mockKM = module.NewMockKernelMapper(ctrl)
297-
mhr = newModuleReconcilerHelper(nil, nil, nil, nil, mockKM, nil)
295+
mockMLDFactory = api.NewMockModuleLoaderDataFactory(ctrl)
296+
mhr = newModuleReconcilerHelper(nil, nil, nil, nil, mockMLDFactory, nil)
298297
})
299298

300299
node1 := v1.Node{
@@ -327,8 +326,8 @@ var _ = Describe("ModuleReconciler_getRelevantKernelMappingsAndNodes", func() {
327326
expectedNodes := []v1.Node{node1, node2, node3}
328327
expectedMappings := map[string]*api.ModuleLoaderData{"kernelVersion1": &mld1, "kernelVersion2": &mld2}
329328
gomock.InOrder(
330-
mockKM.EXPECT().GetModuleLoaderDataForKernel(&kmmv1beta1.Module{}, node1.Status.NodeInfo.KernelVersion).Return(&mld1, nil),
331-
mockKM.EXPECT().GetModuleLoaderDataForKernel(&kmmv1beta1.Module{}, node2.Status.NodeInfo.KernelVersion).Return(&mld2, nil),
329+
mockMLDFactory.EXPECT().FromModule(&kmmv1beta1.Module{}, node1.Status.NodeInfo.KernelVersion).Return(&mld1, nil),
330+
mockMLDFactory.EXPECT().FromModule(&kmmv1beta1.Module{}, node2.Status.NodeInfo.KernelVersion).Return(&mld2, nil),
332331
)
333332

334333
mappings, resNodes, err := mhr.getRelevantKernelMappingsAndNodes(context.Background(), &kmmv1beta1.Module{}, nodes)
@@ -344,8 +343,8 @@ var _ = Describe("ModuleReconciler_getRelevantKernelMappingsAndNodes", func() {
344343
expectedNodes := []v1.Node{node1, node3}
345344
expectedMappings := map[string]*api.ModuleLoaderData{"kernelVersion1": &mld1}
346345
gomock.InOrder(
347-
mockKM.EXPECT().GetModuleLoaderDataForKernel(&kmmv1beta1.Module{}, node1.Status.NodeInfo.KernelVersion).Return(&mld1, nil),
348-
mockKM.EXPECT().GetModuleLoaderDataForKernel(&kmmv1beta1.Module{}, node2.Status.NodeInfo.KernelVersion).Return(nil, fmt.Errorf("some error")),
346+
mockMLDFactory.EXPECT().FromModule(&kmmv1beta1.Module{}, node1.Status.NodeInfo.KernelVersion).Return(&mld1, nil),
347+
mockMLDFactory.EXPECT().FromModule(&kmmv1beta1.Module{}, node2.Status.NodeInfo.KernelVersion).Return(nil, fmt.Errorf("some error")),
349348
)
350349

351350
mappings, resNodes, err := mhr.getRelevantKernelMappingsAndNodes(context.Background(), &kmmv1beta1.Module{}, nodes)

go.mod

-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ require (
1313
github.com/onsi/ginkgo/v2 v2.9.2
1414
github.com/onsi/gomega v1.27.5
1515
github.com/prometheus/client_golang v1.14.0
16-
golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4
1716
k8s.io/api v0.26.3
1817
k8s.io/apimachinery v0.26.3
1918
k8s.io/client-go v0.26.3

go.sum

-2
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,6 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
350350
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
351351
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
352352
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
353-
golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4 h1:K3x+yU+fbot38x5bQbU2QqUAVyYLEktdNH2GxZLnM3U=
354-
golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
355353
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
356354
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
357355
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=

0 commit comments

Comments
 (0)