Skip to content

Commit 0742fdc

Browse files
yevgeny-shnaidmank8s-ci-robot
authored andcommitted
Changing MSBC image status structure
Currently MBSC image's spec contains the action that MBSC controller should execute(sign or build). But since the action does not exists in the image's status, the MIC controller cannot know if the success status refers to the previous action (i.e build) or the current requested action( i.e sign). In addition, since action will appear in status, there is no need to have explicit statuses like BuildFailed: we change it to ActionFailed or ActionSuccess. This PR contains the following: 1) adding action field to the MBSC image' status 2) chaning the type of Status field: now it will be only ActionFailure or ActionSuccess 2) update the MIC controller MBSC lookup function to decide what is the current status of image in MIC, based on MBSC image's action and status fields 3) unit-tests
1 parent fc2a73e commit 0742fdc

File tree

5 files changed

+115
-51
lines changed

5 files changed

+115
-51
lines changed

api/v1beta1/modulebuildsignconfig_types.go

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
)
2323

2424
type BuildOrSignAction string
25+
type BuildOrSignStatus string
2526

2627
const (
2728
// BuildImage means that image needs to be built
@@ -30,20 +31,14 @@ const (
3031
// SignImage means that image needs to be built
3132
SignImage BuildOrSignAction = "SignImage"
3233

33-
// ImageBuildFailed means that image does not exists and the Build failed
34-
ImageBuildFailed ImageState = "BuildFailed"
34+
// ActionSuccess means that action (sign or build, depending on the action field) has succeeded
35+
ActionSuccess BuildOrSignStatus = "Success"
3536

36-
// ImageBuildSucceeded means that image has been built and pushed succesfully
37-
ImageBuildSucceeded ImageState = "BuildSucceeded"
38-
39-
// ImageSignFailed means that image does not exists and the Sign failed
40-
ImageSignFailed ImageState = "SignFailed"
41-
42-
// ImageSignSucceeded means that image has been signed and pushed succesfully
43-
ImageSignSucceeded ImageState = "SignSucceeded"
37+
// ActionFailure means that action (sign or build, depending on the action field) has failed
38+
ActionFailure BuildOrSignStatus = "Failure"
4439
)
4540

46-
// ModuleImageSpec describes the image whose state needs to be queried
41+
// ModuleBuildSignSpec describes the image whose state needs to be queried
4742
type ModuleBuildSignSpec struct {
4843
ModuleImageSpec `json:",inline"`
4944

@@ -62,6 +57,23 @@ type ModuleBuildSignConfigSpec struct {
6257
ImageRepoSecret *v1.LocalObjectReference `json:"imageRepoSecret,omitempty"`
6358
}
6459

60+
// BuildSignImageState contains the status of the image that was requested to be built/signed
61+
type BuildSignImageState struct {
62+
Image string `json:"image"`
63+
64+
// +kubebuilder:validation:Enum=Success;Failure
65+
Status BuildOrSignStatus `json:"status"`
66+
67+
// +kubebuilder:validation:Enum=BuildImage;SignImage
68+
Action BuildOrSignAction `json:"action"`
69+
}
70+
71+
// ModuleBuildSignConfigStatus describes the status of the images that needed to be built/signed
72+
// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
73+
type ModuleBuildSignConfigStatus struct {
74+
Images []BuildSignImageState `json:"images"`
75+
}
76+
6577
// +kubebuilder:object:root=true
6678
// +kubebuilder:subresource:status
6779

@@ -72,8 +84,8 @@ type ModuleBuildSignConfig struct {
7284
metav1.TypeMeta `json:",inline"`
7385
metav1.ObjectMeta `json:"metadata,omitempty"`
7486

75-
Spec ModuleBuildSignConfigSpec `json:"spec,omitempty"`
76-
Status ModuleImagesConfigStatus `json:"status,omitempty"`
87+
Spec ModuleBuildSignConfigSpec `json:"spec,omitempty"`
88+
Status ModuleBuildSignConfigStatus `json:"status,omitempty"`
7789
}
7890

7991
// +kubebuilder:object:root=true

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 35 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/kmm.sigs.x-k8s.io_modulebuildsignconfigs.yaml

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ spec:
6161
x-kubernetes-map-type: atomic
6262
images:
6363
items:
64-
description: ModuleImageSpec describes the image whose state needs
65-
to be queried
64+
description: ModuleBuildSignSpec describes the image whose state
65+
needs to be queried
6666
properties:
6767
action:
6868
enum:
@@ -233,27 +233,34 @@ spec:
233233
type: object
234234
status:
235235
description: |-
236-
ModuleImagesConfigStatus describes the status of the images that need to be verified (defined in the spec)
236+
ModuleBuildSignConfigStatus describes the status of the images that needed to be built/signed
237237
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
238238
properties:
239-
imagesStates:
239+
images:
240240
items:
241+
description: BuildSignImageState contains the status of the image
242+
that was requested to be built/signed
241243
properties:
244+
action:
245+
enum:
246+
- BuildImage
247+
- SignImage
248+
type: string
242249
image:
243-
description: image
244250
type: string
245251
status:
246-
description: |-
247-
status of the image
248-
one of: Exists, notExists
252+
enum:
253+
- Success
254+
- Failure
249255
type: string
250256
required:
257+
- action
251258
- image
252259
- status
253260
type: object
254261
type: array
255262
required:
256-
- imagesStates
263+
- images
257264
type: object
258265
type: object
259266
served: true

internal/controllers/mic_reconciler.go

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -188,23 +188,29 @@ func (mrhi *micReconcilerHelperImpl) updateStatusByMBSC(ctx context.Context, mic
188188
}
189189

190190
patchFrom := client.MergeFrom(micObj.DeepCopy())
191-
for _, imageState := range mbsc.Status.ImagesStates {
192-
imageSpec := mrhi.micHelper.GetModuleImageSpec(micObj, imageState.Image)
193-
if imageSpec == nil {
194-
// image not found in spec, ignore
191+
for _, mbscImageState := range mbsc.Status.Images {
192+
micImageSpec := mrhi.micHelper.GetModuleImageSpec(micObj, mbscImageState.Image)
193+
if micImageSpec == nil {
194+
// spec for image does not exists in MIC, meaning it was already deleted - ignore status
195195
continue
196196
}
197-
switch imageState.Status {
198-
case kmmv1beta1.ImageBuildFailed, kmmv1beta1.ImageSignFailed:
199-
mrhi.micHelper.SetImageStatus(micObj, imageState.Image, kmmv1beta1.ImageDoesNotExist)
200-
case kmmv1beta1.ImageBuildSucceeded:
201-
if imageSpec.Sign != nil {
202-
mrhi.micHelper.SetImageStatus(micObj, imageState.Image, kmmv1beta1.ImageNeedsSigning)
203-
} else {
204-
mrhi.micHelper.SetImageStatus(micObj, imageState.Image, kmmv1beta1.ImageExists)
205-
}
206-
case kmmv1beta1.ImageSignSucceeded:
207-
mrhi.micHelper.SetImageStatus(micObj, imageState.Image, kmmv1beta1.ImageExists)
197+
198+
mbscStatus := mbscImageState.Status
199+
mbscAction := mbscImageState.Action
200+
201+
switch {
202+
case mbscStatus == kmmv1beta1.ActionFailure:
203+
// any failure (build or sign) - image does not exists
204+
mrhi.micHelper.SetImageStatus(micObj, mbscImageState.Image, kmmv1beta1.ImageDoesNotExist)
205+
case mbscStatus == kmmv1beta1.ActionSuccess && mbscAction == kmmv1beta1.SignImage:
206+
// sign action succeeded - image exists, nothing more to do
207+
mrhi.micHelper.SetImageStatus(micObj, mbscImageState.Image, kmmv1beta1.ImageExists)
208+
case mbscStatus == kmmv1beta1.ActionSuccess && micImageSpec.Sign != nil:
209+
// build succeeded and sign exists - image needs to be signed
210+
mrhi.micHelper.SetImageStatus(micObj, mbscImageState.Image, kmmv1beta1.ImageNeedsSigning)
211+
case mbscStatus == kmmv1beta1.ActionSuccess:
212+
// build succeeded, no sign - image exists
213+
mrhi.micHelper.SetImageStatus(micObj, mbscImageState.Image, kmmv1beta1.ImageExists)
208214
}
209215
}
210216

internal/controllers/mic_reconciler_test.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,8 @@ var _ = Describe("updateStatusByMBSC", func() {
272272

273273
It("Image in MBSC status does not exists in MIC spec", func() {
274274
testMBSC := kmmv1beta1.ModuleBuildSignConfig{
275-
Status: kmmv1beta1.ModuleImagesConfigStatus{
276-
ImagesStates: []kmmv1beta1.ModuleImageState{
275+
Status: kmmv1beta1.ModuleBuildSignConfigStatus{
276+
Images: []kmmv1beta1.BuildSignImageState{
277277
{
278278
Image: "some image",
279279
},
@@ -282,22 +282,24 @@ var _ = Describe("updateStatusByMBSC", func() {
282282
}
283283
gomock.InOrder(
284284
mbscHelper.EXPECT().Get(ctx, testMic.Name, testMic.Namespace).Return(&testMBSC, nil),
285-
micHelper.EXPECT().GetModuleImageSpec(&testMic, testMBSC.Status.ImagesStates[0].Image).Return(nil),
285+
micHelper.EXPECT().GetModuleImageSpec(&testMic, "some image").Return(nil),
286286
clnt.EXPECT().Status().Return(statusWriter),
287287
statusWriter.EXPECT().Patch(ctx, &testMic, gomock.Any()),
288288
)
289289
err := mrh.updateStatusByMBSC(ctx, &testMic)
290290
Expect(err).To(BeNil())
291291
})
292292

293-
DescribeTable("images in MBSC status exist in MIC spec",
294-
func(signExists bool, mbscImageStatus kmmv1beta1.ImageState, expectedImageState kmmv1beta1.ImageState) {
293+
DescribeTable("image has status in MBSC and spec in MIC",
294+
func(signExists bool, mbscImageAction kmmv1beta1.BuildOrSignAction, mbscImageStatus kmmv1beta1.BuildOrSignStatus,
295+
expectedMICImageState kmmv1beta1.ImageState) {
295296
testMBSC := kmmv1beta1.ModuleBuildSignConfig{
296-
Status: kmmv1beta1.ModuleImagesConfigStatus{
297-
ImagesStates: []kmmv1beta1.ModuleImageState{
297+
Status: kmmv1beta1.ModuleBuildSignConfigStatus{
298+
Images: []kmmv1beta1.BuildSignImageState{
298299
{
299300
Image: "some image",
300301
Status: mbscImageStatus,
302+
Action: mbscImageAction,
301303
},
302304
},
303305
},
@@ -309,20 +311,22 @@ var _ = Describe("updateStatusByMBSC", func() {
309311
gomock.InOrder(
310312
mbscHelper.EXPECT().Get(ctx, testMic.Name, testMic.Namespace).Return(&testMBSC, nil),
311313
micHelper.EXPECT().GetModuleImageSpec(&testMic, "some image").Return(&imageSpec),
312-
micHelper.EXPECT().SetImageStatus(&testMic, "some image", expectedImageState),
314+
micHelper.EXPECT().SetImageStatus(&testMic, "some image", expectedMICImageState),
313315
clnt.EXPECT().Status().Return(statusWriter),
314316
statusWriter.EXPECT().Patch(ctx, &testMic, gomock.Any()),
315317
)
316318

317319
err := mrh.updateStatusByMBSC(ctx, &testMic)
318320
Expect(err).To(BeNil())
319321
},
320-
Entry("sign config does not exists, status is ImageBuildFailed", false, kmmv1beta1.ImageBuildFailed, kmmv1beta1.ImageDoesNotExist),
321-
Entry("sign config does not exists, status is ImageBuildSucceeded", false, kmmv1beta1.ImageBuildSucceeded, kmmv1beta1.ImageExists),
322-
Entry("sign config exists, status is ImageBuildFailed", true, kmmv1beta1.ImageBuildFailed, kmmv1beta1.ImageDoesNotExist),
323-
Entry("sign config exists, status is ImageBuildSucceeded", true, kmmv1beta1.ImageBuildSucceeded, kmmv1beta1.ImageNeedsSigning),
324-
Entry("status is ImageSignFailed", false, kmmv1beta1.ImageSignFailed, kmmv1beta1.ImageDoesNotExist),
325-
Entry("status is ImageSignSucceeded", false, kmmv1beta1.ImageSignSucceeded, kmmv1beta1.ImageExists),
322+
Entry("sign config does not exists, action Build, status Failed", false, kmmv1beta1.BuildImage, kmmv1beta1.ActionFailure, kmmv1beta1.ImageDoesNotExist),
323+
Entry("sign config does not exists, action Sign, status Failed", false, kmmv1beta1.SignImage, kmmv1beta1.ActionFailure, kmmv1beta1.ImageDoesNotExist),
324+
Entry("sign config does not exists, action Build, status Succeeded", false, kmmv1beta1.BuildImage, kmmv1beta1.ActionSuccess, kmmv1beta1.ImageExists),
325+
Entry("sign config does not exists, action Sign, status Succeeded", false, kmmv1beta1.SignImage, kmmv1beta1.ActionSuccess, kmmv1beta1.ImageExists),
326+
Entry("sign config exists, action Build, status Failed", true, kmmv1beta1.BuildImage, kmmv1beta1.ActionFailure, kmmv1beta1.ImageDoesNotExist),
327+
Entry("sign config exists, action Sign, status Failed", true, kmmv1beta1.SignImage, kmmv1beta1.ActionFailure, kmmv1beta1.ImageDoesNotExist),
328+
Entry("sign config exists, action Build, status Succeeded", true, kmmv1beta1.BuildImage, kmmv1beta1.ActionSuccess, kmmv1beta1.ImageNeedsSigning),
329+
Entry("sign config exists, action Sign, status Succeeded", true, kmmv1beta1.SignImage, kmmv1beta1.ActionSuccess, kmmv1beta1.ImageExists),
326330
)
327331
})
328332

0 commit comments

Comments
 (0)