Skip to content

Commit 7c7da20

Browse files
committed
Refactor build / sign managers
Create a new internal/imgbuild package that brings a new Manager type covering the needs of both features, as well as a JobMaker interface. Implement that interface in internal/{build,sign} packages. Consolidate ModuleLoaderData generation code into the internal/api package. Move utils functions into their own package and remove duplicate code.
1 parent 34f9a39 commit 7c7da20

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1727
-3337
lines changed

cmd/manager-hub/main.go

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

22+
"github.com/kubernetes-sigs/kernel-module-management/internal/api"
23+
"github.com/kubernetes-sigs/kernel-module-management/internal/imgbuild"
2224
"k8s.io/apimachinery/pkg/runtime"
2325
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2426
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -36,19 +38,15 @@ import (
3638
"github.com/kubernetes-sigs/kernel-module-management/api-hub/v1beta1"
3739
"github.com/kubernetes-sigs/kernel-module-management/controllers/hub"
3840
"github.com/kubernetes-sigs/kernel-module-management/internal/build"
39-
"github.com/kubernetes-sigs/kernel-module-management/internal/build/job"
4041
"github.com/kubernetes-sigs/kernel-module-management/internal/cluster"
4142
"github.com/kubernetes-sigs/kernel-module-management/internal/cmd"
4243
"github.com/kubernetes-sigs/kernel-module-management/internal/constants"
4344
"github.com/kubernetes-sigs/kernel-module-management/internal/filter"
4445
"github.com/kubernetes-sigs/kernel-module-management/internal/manifestwork"
4546
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
46-
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
4747
"github.com/kubernetes-sigs/kernel-module-management/internal/registry"
4848
"github.com/kubernetes-sigs/kernel-module-management/internal/sign"
49-
signjob "github.com/kubernetes-sigs/kernel-module-management/internal/sign/job"
5049
"github.com/kubernetes-sigs/kernel-module-management/internal/statusupdater"
51-
"github.com/kubernetes-sigs/kernel-module-management/internal/utils"
5250
//+kubebuilder:scaffold:imports
5351
)
5452

@@ -105,20 +103,26 @@ func main() {
105103
metricsAPI.Register()
106104

107105
registryAPI := registry.NewRegistry()
108-
jobHelperAPI := utils.NewJobHelper(client)
109-
buildHelper := build.NewHelper()
106+
jobHelperAPI := imgbuild.NewJobHelper(client)
107+
builderImage := cmd.GetEnvOrFatalError(constants.BuildImageEnvVar, setupLogger)
110108

111-
buildAPI := job.NewBuildManager(
109+
buildAPI := imgbuild.NewBuildManager(
112110
client,
113-
job.NewMaker(client, buildHelper, jobHelperAPI, scheme),
114111
jobHelperAPI,
112+
build.NewJobMaker(client, builderImage, jobHelperAPI, scheme),
115113
registryAPI,
116114
)
117115

118-
signAPI := signjob.NewSignJobManager(
116+
signAPI := imgbuild.NewSignManager(
119117
client,
120-
signjob.NewSigner(client, scheme, jobHelperAPI),
121118
jobHelperAPI,
119+
sign.NewJobMaker(
120+
client,
121+
jobHelperAPI,
122+
builderImage,
123+
cmd.GetEnvOrFatalError(constants.SignImageEnvVar, setupLogger),
124+
scheme,
125+
),
122126
registryAPI,
123127
)
124128

@@ -130,7 +134,7 @@ func main() {
130134
mcmr := hub.NewManagedClusterModuleReconciler(
131135
client,
132136
manifestwork.NewCreator(client, scheme),
133-
cluster.NewClusterAPI(client, module.NewKernelMapper(buildHelper, sign.NewSignerHelper()), buildAPI, signAPI, operatorNamespace),
137+
cluster.NewClusterAPI(client, api.NewModuleLoaderDataFactory(), buildAPI, signAPI, operatorNamespace),
134138
statusupdater.NewManagedClusterModuleStatusUpdater(client),
135139
filterAPI,
136140
)

cmd/manager/main.go

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

25+
"github.com/kubernetes-sigs/kernel-module-management/internal/api"
26+
"github.com/kubernetes-sigs/kernel-module-management/internal/imgbuild"
2527
"k8s.io/apimachinery/pkg/runtime"
2628
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2729
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -38,19 +40,15 @@ import (
3840
v1beta12 "github.com/kubernetes-sigs/kernel-module-management/api/v1beta1"
3941
"github.com/kubernetes-sigs/kernel-module-management/controllers"
4042
"github.com/kubernetes-sigs/kernel-module-management/internal/build"
41-
"github.com/kubernetes-sigs/kernel-module-management/internal/build/job"
4243
"github.com/kubernetes-sigs/kernel-module-management/internal/cmd"
4344
"github.com/kubernetes-sigs/kernel-module-management/internal/constants"
4445
"github.com/kubernetes-sigs/kernel-module-management/internal/daemonset"
4546
"github.com/kubernetes-sigs/kernel-module-management/internal/filter"
4647
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
47-
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
4848
"github.com/kubernetes-sigs/kernel-module-management/internal/preflight"
4949
"github.com/kubernetes-sigs/kernel-module-management/internal/registry"
5050
"github.com/kubernetes-sigs/kernel-module-management/internal/sign"
51-
signjob "github.com/kubernetes-sigs/kernel-module-management/internal/sign/job"
5251
"github.com/kubernetes-sigs/kernel-module-management/internal/statusupdater"
53-
"github.com/kubernetes-sigs/kernel-module-management/internal/utils"
5452
//+kubebuilder:scaffold:imports
5553
)
5654

@@ -113,32 +111,38 @@ func main() {
113111
metricsAPI.Register()
114112

115113
registryAPI := registry.NewRegistry()
116-
jobHelperAPI := utils.NewJobHelper(client)
117-
buildHelperAPI := build.NewHelper()
114+
jobHelperAPI := imgbuild.NewJobHelper(client)
115+
buildImage := cmd.GetEnvOrFatalError(constants.BuildImageEnvVar, setupLogger)
118116

119-
buildAPI := job.NewBuildManager(
117+
buildAPI := imgbuild.NewBuildManager(
120118
client,
121-
job.NewMaker(client, buildHelperAPI, jobHelperAPI, scheme),
122119
jobHelperAPI,
120+
build.NewJobMaker(client, buildImage, jobHelperAPI, scheme),
123121
registryAPI,
124122
)
125123

126-
signAPI := signjob.NewSignJobManager(
124+
signAPI := imgbuild.NewSignManager(
127125
client,
128-
signjob.NewSigner(client, scheme, jobHelperAPI),
129126
jobHelperAPI,
127+
sign.NewJobMaker(
128+
client,
129+
jobHelperAPI,
130+
buildImage,
131+
cmd.GetEnvOrFatalError(constants.SignImageEnvVar, setupLogger),
132+
scheme,
133+
),
130134
registryAPI,
131135
)
132136

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

136140
mc := controllers.NewModuleReconciler(
137141
client,
138142
buildAPI,
139143
signAPI,
140144
daemonAPI,
141-
kernelAPI,
145+
mldFactory,
142146
metricsAPI,
143147
filterAPI,
144148
statusupdater.NewModuleStatusUpdater(client),
@@ -160,7 +164,7 @@ func main() {
160164
}
161165

162166
preflightStatusUpdaterAPI := statusupdater.NewPreflightStatusUpdater(client)
163-
preflightAPI := preflight.NewPreflightAPI(client, buildAPI, signAPI, registryAPI, preflightStatusUpdaterAPI, kernelAPI)
167+
preflightAPI := preflight.NewPreflightAPI(client, buildAPI, signAPI, registryAPI, preflightStatusUpdaterAPI, mldFactory)
164168

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

controllers/module_reconciler.go

+13-19
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import (
2626
"github.com/kubernetes-sigs/kernel-module-management/internal/build"
2727
"github.com/kubernetes-sigs/kernel-module-management/internal/daemonset"
2828
"github.com/kubernetes-sigs/kernel-module-management/internal/filter"
29+
"github.com/kubernetes-sigs/kernel-module-management/internal/imgbuild"
2930
"github.com/kubernetes-sigs/kernel-module-management/internal/metrics"
30-
"github.com/kubernetes-sigs/kernel-module-management/internal/module"
3131
"github.com/kubernetes-sigs/kernel-module-management/internal/sign"
3232
"github.com/kubernetes-sigs/kernel-module-management/internal/statusupdater"
3333
"github.com/kubernetes-sigs/kernel-module-management/internal/utils"
@@ -64,9 +64,9 @@ type ModuleReconciler struct {
6464
func NewModuleReconciler(
6565
client client.Client,
6666
buildAPI build.Manager,
67-
signAPI sign.SignManager,
67+
signAPI sign.Manager,
6868
daemonAPI daemonset.DaemonSetCreator,
69-
kernelAPI module.KernelMapper,
69+
kernelAPI api.ModuleLoaderDataFactory,
7070
metricsAPI metrics.Metrics,
7171
filter *filter.Filter,
7272
statusUpdaterAPI statusupdater.ModuleStatusUpdater,
@@ -198,17 +198,17 @@ type hashData struct {
198198
type moduleReconcilerHelper struct {
199199
client client.Client
200200
buildAPI build.Manager
201-
signAPI sign.SignManager
201+
signAPI sign.Manager
202202
daemonAPI daemonset.DaemonSetCreator
203-
kernelAPI module.KernelMapper
203+
kernelAPI api.ModuleLoaderDataFactory
204204
metricsAPI metrics.Metrics
205205
}
206206

207207
func newModuleReconcilerHelper(client client.Client,
208208
buildAPI build.Manager,
209-
signAPI sign.SignManager,
209+
signAPI sign.Manager,
210210
daemonAPI daemonset.DaemonSetCreator,
211-
kernelAPI module.KernelMapper,
211+
kernelAPI api.ModuleLoaderDataFactory,
212212
metricsAPI metrics.Metrics) moduleReconcilerHelperAPI {
213213
return &moduleReconcilerHelper{
214214
client: client,
@@ -243,7 +243,7 @@ func (mrh *moduleReconcilerHelper) getRelevantKernelMappingsAndNodes(ctx context
243243
continue
244244
}
245245

246-
mld, err := mrh.kernelAPI.GetModuleLoaderDataForKernel(mod, kernelVersion)
246+
mld, err := mrh.kernelAPI.FromModule(mod, kernelVersion)
247247
if err != nil {
248248
nodeLogger.Error(err, "failed to get and process kernel mapping")
249249
continue
@@ -301,9 +301,9 @@ func (mrh *moduleReconcilerHelper) handleBuild(ctx context.Context, mld *api.Mod
301301

302302
completedSuccessfully := false
303303
switch buildStatus {
304-
case utils.StatusCompleted:
304+
case imgbuild.StatusCompleted:
305305
completedSuccessfully = true
306-
case utils.StatusFailed:
306+
case imgbuild.StatusFailed:
307307
logger.Info(utils.WarnString("Build job has failed. If the fix is not in Module CR, then delete job after the fix in order to restart the job"))
308308
}
309309

@@ -320,25 +320,19 @@ func (mrh *moduleReconcilerHelper) handleSigning(ctx context.Context, mld *api.M
320320
return true, nil
321321
}
322322

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)
327-
}
328-
329323
logger := log.FromContext(ctx).WithValues("kernel version", mld.KernelVersion, "image", mld.ContainerImage)
330324
signCtx := log.IntoContext(ctx, logger)
331325

332-
signStatus, err := mrh.signAPI.Sync(signCtx, mld, previousImage, true, mld.Owner)
326+
signStatus, err := mrh.signAPI.Sync(signCtx, mld, true, mld.Owner)
333327
if err != nil {
334328
return false, fmt.Errorf("could not synchronize the signing: %w", err)
335329
}
336330

337331
completedSuccessfully := false
338332
switch signStatus {
339-
case utils.StatusCompleted:
333+
case imgbuild.StatusCompleted:
340334
completedSuccessfully = true
341-
case utils.StatusFailed:
335+
case imgbuild.StatusFailed:
342336
logger.Info(utils.WarnString("Sign job has failed. If the fix is not in Module CR, then delete job after the fix in order to restart the job"))
343337
}
344338

0 commit comments

Comments
 (0)