99 "time"
1010
1111 "golang.org/x/exp/slices"
12- k8simage "k8s.io/kubernetes/test/utils/image"
1312
13+ "github.com/openshift-eng/openshift-tests-extension/pkg/extension"
1414 "github.com/openshift/library-go/pkg/image/reference"
1515 "github.com/openshift/origin/pkg/clioptions/imagesetup"
1616 "github.com/openshift/origin/pkg/cmd"
@@ -19,6 +19,7 @@ import (
1919 "github.com/spf13/cobra"
2020 "k8s.io/kube-openapi/pkg/util/sets"
2121 "k8s.io/kubectl/pkg/util/templates"
22+ k8simage "k8s.io/kubernetes/test/utils/image"
2223)
2324
2425func NewImagesCommand () * cobra.Command {
@@ -112,14 +113,14 @@ type imagesOptions struct {
112113// TAG is the hash described above.
113114func createImageMirrorForInternalImages (prefix string , ref reference.DockerImageReference , mirrored bool ) ([]string , error ) {
114115 source := ref .Exact ()
115-
116- initialImageSets := []extensions.ImageSet {
116+ k8sOriginalImageSets := []extensions.ImageSet {
117117 k8simage .GetOriginalImageConfigs (),
118118 }
119+ externalImageSets := []extension.Image {}
120+ initialImageSets := []extensions.ImageSet {}
119121
120122 // If ENV is not set, the list of images should come from external binaries
121123 if len (os .Getenv ("OPENSHIFT_SKIP_EXTERNAL_TESTS" )) == 0 {
122- // Extract all test binaries
123124 extractionContext , extractionContextCancel := context .WithTimeout (context .Background (), 30 * time .Minute )
124125 defer extractionContextCancel ()
125126 cleanUpFn , externalBinaries , err := extensions .ExtractAllTestBinaries (extractionContext , 10 )
@@ -138,30 +139,52 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
138139 if len (imageSetsFromBinaries ) == 0 {
139140 return nil , fmt .Errorf ("no test images were reported by external binaries" )
140141 }
141- initialImageSets = imageSetsFromBinaries
142+ externalImageSets = imageSetsFromBinaries
143+ } else {
144+ initialImageSets = k8sOriginalImageSets
142145 }
143146
144147 // Take the initial images coming from external binaries and remove any exceptions that might exist.
148+ // Also, split the images into default, updated, and initial sets (initial set is the images that are not mapped)
145149 exceptions := image .Exceptions .List ()
146150 defaultImageSets := []extensions.ImageSet {}
147- for i := range initialImageSets {
148- filtered := extensions.ImageSet {}
149- for imageID , imageConfig := range initialImageSets [i ] {
150- if ! slices .ContainsFunc (exceptions , func (e string ) bool {
151- return strings .Contains (imageConfig .GetE2EImage (), e )
152- }) {
153- filtered [imageID ] = imageConfig
151+ updatedImageSets := []extensions.ImageSet {}
152+ for _ , image := range externalImageSets {
153+ originalImage := covertMappedImageToImageSet (image )
154+ imageConfig := originalImage [k8simage .ImageID (image .Index )]
155+ if ! slices .ContainsFunc (exceptions , func (e string ) bool {
156+ return strings .Contains (imageConfig .GetE2EImage (), e )
157+ }) {
158+ defaultImageSets = append (defaultImageSets , originalImage )
159+ if image .Mapped != nil {
160+ mappedImage := covertMappedImageToImageSet (* image .Mapped )
161+ updatedImageSets = append (updatedImageSets , mappedImage )
162+ } else {
163+ initialImageSets = append (initialImageSets , originalImage )
154164 }
155165 }
156- if len (filtered ) > 0 {
157- defaultImageSets = append (defaultImageSets , filtered )
158- }
159166 }
160167
161- // Created a new slice with the updatedImageSets addresses for the images
162- updatedImageSets := []extensions.ImageSet {}
163- for i := range defaultImageSets {
164- updatedImageSets = append (updatedImageSets , k8simage .GetMappedImageConfigs (defaultImageSets [i ], ref .Exact ()))
168+ // Map initial images to the target repository
169+ for _ , img := range initialImageSets {
170+ imageSet := extensions.ImageSet {}
171+ for imageID , imageConfig := range img {
172+ m := map [string ]k8simage.ImageID {
173+ imageConfig .GetE2EImage (): k8simage .ImageID (imageID ),
174+ }
175+ mappedImage := image .GetMappedImages (m , source )
176+ ref , err := reference .Parse (mappedImage [imageConfig .GetE2EImage ()])
177+ if err != nil {
178+ continue
179+ }
180+ config := k8simage.Config {}
181+ config .SetRegistry (ref .Registry )
182+ config .SetName (ref .RepositoryName ())
183+ config .SetVersion (ref .Tag )
184+ imageSet [k8simage .ImageID (imageID )] = config
185+ }
186+
187+ updatedImageSets = append (updatedImageSets , imageSet )
165188 }
166189
167190 openshiftDefaults := image .OriginalImages ()
@@ -178,9 +201,9 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
178201 covered := sets .NewString ()
179202 for i := range updatedImageSets {
180203 for imageID , imageConfig := range updatedImageSets [i ] {
181- defaultConfig := defaultImageSets [i ][imageID ]
204+ originalConfig := defaultImageSets [i ][imageID ]
182205 pullSpec := imageConfig .GetE2EImage ()
183- if pullSpec == defaultConfig .GetE2EImage () {
206+ if pullSpec == originalConfig .GetE2EImage () {
184207 continue
185208 }
186209 if covered .Has (pullSpec ) {
@@ -250,3 +273,14 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
250273 sort .Strings (lines )
251274 return lines , nil
252275}
276+
277+ func covertMappedImageToImageSet (image extension.Image ) extensions.ImageSet {
278+ imageSet := extensions.ImageSet {}
279+ imageConfig := k8simage.Config {}
280+ imageConfig .SetName (image .Name )
281+ imageConfig .SetVersion (image .Version )
282+ imageConfig .SetRegistry (image .Registry )
283+ imageSet [k8simage .ImageID (image .Index )] = imageConfig
284+
285+ return imageSet
286+ }
0 commit comments