Skip to content

Commit 59e37bb

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

38 files changed

+1207
-1242
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.NewModuleLoaderDataCreator(), 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.NewModuleLoaderDataCreator()
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),
@@ -164,7 +161,7 @@ func main() {
164161
}
165162

166163
preflightStatusUpdaterAPI := statusupdater.NewPreflightStatusUpdater(client)
167-
preflightAPI := preflight.NewPreflightAPI(client, buildAPI, signAPI, registryAPI, preflightStatusUpdaterAPI, kernelAPI)
164+
preflightAPI := preflight.NewPreflightAPI(client, buildAPI, signAPI, registryAPI, preflightStatusUpdaterAPI, mldFactory)
168165

169166
if err = controllers.NewPreflightValidationReconciler(client, filterAPI, metricsAPI, preflightStatusUpdaterAPI, preflightAPI).SetupWithManager(mgr); err != nil {
170167
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.ModuleLoaderDataCreator,
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.ModuleLoaderDataCreator
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.ModuleLoaderDataCreator,
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.MockModuleLoaderDataCreator
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.NewMockModuleLoaderDataCreator(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-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.19
55
require (
66
github.com/a8m/envsubst v1.4.2
77
github.com/go-logr/logr v1.2.4
8+
github.com/go-openapi/swag v0.22.3
89
github.com/golang/mock v1.6.0
910
github.com/google/go-cmp v0.5.9
1011
github.com/google/go-containerregistry v0.14.0
@@ -13,7 +14,6 @@ require (
1314
github.com/onsi/ginkgo/v2 v2.9.2
1415
github.com/onsi/gomega v1.27.6
1516
github.com/prometheus/client_golang v1.15.0
16-
golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4
1717
k8s.io/api v0.26.3
1818
k8s.io/apimachinery v0.27.1
1919
k8s.io/client-go v0.26.3
@@ -38,7 +38,6 @@ require (
3838
github.com/fsnotify/fsnotify v1.6.0 // indirect
3939
github.com/go-openapi/jsonpointer v0.19.6 // indirect
4040
github.com/go-openapi/jsonreference v0.20.2 // indirect
41-
github.com/go-openapi/swag v0.22.3 // indirect
4241
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
4342
github.com/gogo/protobuf v1.3.2 // indirect
4443
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect

go.sum

-2
Original file line numberDiff line numberDiff line change
@@ -209,8 +209,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
209209
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
210210
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
211211
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
212-
golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4 h1:K3x+yU+fbot38x5bQbU2QqUAVyYLEktdNH2GxZLnM3U=
213-
golang.org/x/exp v0.0.0-20220407100705-7b9b53b0aca4/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
214212
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
215213
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
216214
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=

0 commit comments

Comments
 (0)