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,13 @@ 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+ externalImageSets := []extension. Image {}
116117 initialImageSets := []extensions.ImageSet {
117118 k8simage .GetOriginalImageConfigs (),
118119 }
119120
120121 // If ENV is not set, the list of images should come from external binaries
121122 if len (os .Getenv ("OPENSHIFT_SKIP_EXTERNAL_TESTS" )) == 0 {
122- // Extract all test binaries
123123 extractionContext , extractionContextCancel := context .WithTimeout (context .Background (), 30 * time .Minute )
124124 defer extractionContextCancel ()
125125 cleanUpFn , externalBinaries , err := extensions .ExtractAllTestBinaries (extractionContext , 10 )
@@ -138,11 +138,31 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
138138 if len (imageSetsFromBinaries ) == 0 {
139139 return nil , fmt .Errorf ("no test images were reported by external binaries" )
140140 }
141- initialImageSets = imageSetsFromBinaries
141+ externalImageSets = imageSetsFromBinaries
142142 }
143143
144- // Take the initial images coming from external binaries and remove any exceptions that might exist.
144+ // Convert external images to initial and updated image sets
145+ // Add mapped images to updated image set if they exist
145146 exceptions := image .Exceptions .List ()
147+ updatedImageSets := []extensions.ImageSet {}
148+ initial := extensions.ImageSet {}
149+ updated := extensions.ImageSet {}
150+ for _ , image := range externalImageSets {
151+ imageConfig := covertMappedImageToImageConfig (image )
152+ if ! slices .ContainsFunc (exceptions , func (e string ) bool {
153+ return strings .Contains (imageConfig .GetE2EImage (), e )
154+ }) {
155+ initial [k8simage .ImageID (image .Index )] = imageConfig
156+ if image .Mapped != nil {
157+ updated [k8simage .ImageID (image .Index )] = covertMappedImageToImageConfig (* image .Mapped )
158+ }
159+ }
160+ }
161+ if len (initial ) > 0 {
162+ initialImageSets = []extensions.ImageSet {initial }
163+ }
164+
165+ // Take the initial images coming from external binaries and remove any exceptions that might exist.
146166 defaultImageSets := []extensions.ImageSet {}
147167 for i := range initialImageSets {
148168 filtered := extensions.ImageSet {}
@@ -158,12 +178,31 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
158178 }
159179 }
160180
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 ()))
181+ // Map initial images to the target repository
182+ for _ , img := range initialImageSets {
183+ for imageID , imageConfig := range img {
184+ // If the imageID is in the updated image set, skip it
185+ if _ , ok := updated [imageID ]; ok {
186+ continue
187+ }
188+ m := map [string ]k8simage.ImageID {
189+ imageConfig .GetE2EImage (): k8simage .ImageID (imageID ),
190+ }
191+ mappedImage := image .GetMappedImages (m , source )
192+ ref , err := reference .Parse (mappedImage [imageConfig .GetE2EImage ()])
193+ if err != nil {
194+ continue
195+ }
196+ config := k8simage.Config {}
197+ config .SetRegistry (ref .Registry )
198+ config .SetName (ref .RepositoryName ())
199+ config .SetVersion (ref .Tag )
200+ updated [k8simage .ImageID (imageID )] = config
201+ }
165202 }
166203
204+ updatedImageSets = []extensions.ImageSet {updated }
205+
167206 openshiftDefaults := image .OriginalImages ()
168207 openshiftUpdated := image .GetMappedImages (openshiftDefaults , imagesetup .DefaultTestImageMirrorLocation )
169208
@@ -178,9 +217,9 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
178217 covered := sets .NewString ()
179218 for i := range updatedImageSets {
180219 for imageID , imageConfig := range updatedImageSets [i ] {
181- defaultConfig := defaultImageSets [i ][imageID ]
220+ originalConfig := defaultImageSets [i ][imageID ]
182221 pullSpec := imageConfig .GetE2EImage ()
183- if pullSpec == defaultConfig .GetE2EImage () {
222+ if pullSpec == originalConfig .GetE2EImage () {
184223 continue
185224 }
186225 if covered .Has (pullSpec ) {
@@ -250,3 +289,12 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
250289 sort .Strings (lines )
251290 return lines , nil
252291}
292+
293+ func covertMappedImageToImageConfig (image extension.Image ) k8simage.Config {
294+ imageConfig := k8simage.Config {}
295+ imageConfig .SetName (image .Name )
296+ imageConfig .SetVersion (image .Version )
297+ imageConfig .SetRegistry (image .Registry )
298+
299+ return imageConfig
300+ }
0 commit comments