Skip to content

Commit 5edd284

Browse files
yevgeny-shnaidmank8s-ci-robot
authored andcommitted
removing duplicate imageSpec from MIC
CreateOrPatch MIC API receives slice of imageSpecs. Since usually the input is created by going over the the target nodes and adding their images to the slice, we need to remove duplicate images, since for most of the cases all the nodes will have the same target image
1 parent 189d136 commit 5edd284

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

internal/mic/mic.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1010
"k8s.io/apimachinery/pkg/runtime"
1111
"k8s.io/apimachinery/pkg/types"
12+
"k8s.io/apimachinery/pkg/util/sets"
1213
"sigs.k8s.io/controller-runtime/pkg/client"
1314
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1415
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -50,6 +51,8 @@ func (mici *micImpl) CreateOrPatch(ctx context.Context, name, ns string, images
5051
},
5152
}
5253

54+
images = filterDuplicateImages(images)
55+
5356
opRes, err := controllerutil.CreateOrPatch(ctx, mici.client, mic, func() error {
5457

5558
mic.Spec = kmmv1beta1.ModuleImagesConfigSpec{
@@ -127,3 +130,15 @@ func (mici *micImpl) DoAllImagesExist(micObj *kmmv1beta1.ModuleImagesConfig) boo
127130

128131
return true
129132
}
133+
134+
func filterDuplicateImages(images []kmmv1beta1.ModuleImageSpec) []kmmv1beta1.ModuleImageSpec {
135+
imagesSet := sets.New[string]()
136+
filteredImages := make([]kmmv1beta1.ModuleImageSpec, 0, len(images))
137+
for _, image := range images {
138+
if !imagesSet.Has(image.Image) {
139+
imagesSet.Insert(image.Image)
140+
filteredImages = append(filteredImages, image)
141+
}
142+
}
143+
return filteredImages
144+
}

internal/mic/mic_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,3 +368,26 @@ var _ = Describe("DoAllImagesExist", func() {
368368
Expect(micAPI.DoAllImagesExist(micObj)).To(BeTrue())
369369
})
370370
})
371+
372+
var _ = Describe("filterDuplicateImages", func() {
373+
It("check flow", func() {
374+
images := []kmmv1beta1.ModuleImageSpec{
375+
{Image: "example.registry.com/org/user/image1:tag"},
376+
{Image: "example.registry.com/org/user/image2:tag"},
377+
{Image: "example.registry.com/org/user/image3:tag"},
378+
{Image: "example.registry.com/org/user/image2:tag"},
379+
{Image: "example.registry.com/org/user/image4:tag"},
380+
{Image: "example.registry.com/org/user/image1:tag"},
381+
}
382+
383+
expectedRes := []kmmv1beta1.ModuleImageSpec{
384+
{Image: "example.registry.com/org/user/image1:tag"},
385+
{Image: "example.registry.com/org/user/image2:tag"},
386+
{Image: "example.registry.com/org/user/image3:tag"},
387+
{Image: "example.registry.com/org/user/image4:tag"},
388+
}
389+
390+
res := filterDuplicateImages(images)
391+
Expect(res).To(Equal(expectedRes))
392+
})
393+
})

0 commit comments

Comments
 (0)