Skip to content

Commit 455cbd2

Browse files
committed
Updated openshift-tests images to utilize mapped images from external binary
Currently, openshift-tests images cmd uses vendored GetMappedImageConfigs() function to map upstream images to mirrored ones. After this change, images cmd will parsed mapped images directly from outputs from the k8s-tests-ext binary. This prevents unexpected issues from imcompatible upstreams changes with vendored funcs. Signed-off-by: Vu Dinh <[email protected]>
1 parent da8a7f3 commit 455cbd2

File tree

3 files changed

+43
-39
lines changed

3 files changed

+43
-39
lines changed

pkg/cmd/openshift-tests/images/images_command.go

Lines changed: 35 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
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

2425
func NewImagesCommand() *cobra.Command {
@@ -112,14 +113,10 @@ type imagesOptions struct {
112113
// TAG is the hash described above.
113114
func createImageMirrorForInternalImages(prefix string, ref reference.DockerImageReference, mirrored bool) ([]string, error) {
114115
source := ref.Exact()
115-
116-
initialImageSets := []extensions.ImageSet{
117-
k8simage.GetOriginalImageConfigs(),
118-
}
116+
externalImageSets := []extension.Image{}
119117

120118
// If ENV is not set, the list of images should come from external binaries
121119
if len(os.Getenv("OPENSHIFT_SKIP_EXTERNAL_TESTS")) == 0 {
122-
// Extract all test binaries
123120
extractionContext, extractionContextCancel := context.WithTimeout(context.Background(), 30*time.Minute)
124121
defer extractionContextCancel()
125122
cleanUpFn, externalBinaries, err := extensions.ExtractAllTestBinaries(extractionContext, 10)
@@ -138,30 +135,34 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
138135
if len(imageSetsFromBinaries) == 0 {
139136
return nil, fmt.Errorf("no test images were reported by external binaries")
140137
}
141-
initialImageSets = imageSetsFromBinaries
138+
externalImageSets = imageSetsFromBinaries
142139
}
143140

144141
// Take the initial images coming from external binaries and remove any exceptions that might exist.
142+
// Also, split the images into default, updated, and initial sets (initial set is the images that are not mapped)
145143
exceptions := image.Exceptions.List()
146144
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
145+
updatedImageSets := []extensions.ImageSet{}
146+
initialImageSets := []extensions.ImageSet{}
147+
for _, image := range externalImageSets {
148+
originalImage := covertMappedImageToImageSet(image)
149+
imageConfig := originalImage[k8simage.ImageID(image.Index)]
150+
if !slices.ContainsFunc(exceptions, func(e string) bool {
151+
return strings.Contains(imageConfig.GetE2EImage(), e)
152+
}) {
153+
defaultImageSets = append(defaultImageSets, originalImage)
154+
if image.Mapped != nil {
155+
mappedImage := covertMappedImageToImageSet(*image.Mapped)
156+
updatedImageSets = append(updatedImageSets, mappedImage)
157+
} else {
158+
initialImageSets = append(initialImageSets, originalImage)
154159
}
155160
}
156-
if len(filtered) > 0 {
157-
defaultImageSets = append(defaultImageSets, filtered)
158-
}
159161
}
160162

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()))
163+
// Map initial images to the target repository
164+
for i := range initialImageSets {
165+
updatedImageSets = append(updatedImageSets, k8simage.GetMappedImageConfigs(initialImageSets[i], ref.Exact()))
165166
}
166167

167168
openshiftDefaults := image.OriginalImages()
@@ -178,9 +179,9 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
178179
covered := sets.NewString()
179180
for i := range updatedImageSets {
180181
for imageID, imageConfig := range updatedImageSets[i] {
181-
defaultConfig := defaultImageSets[i][imageID]
182+
originalConfig := defaultImageSets[i][imageID]
182183
pullSpec := imageConfig.GetE2EImage()
183-
if pullSpec == defaultConfig.GetE2EImage() {
184+
if pullSpec == originalConfig.GetE2EImage() {
184185
continue
185186
}
186187
if covered.Has(pullSpec) {
@@ -250,3 +251,14 @@ func createImageMirrorForInternalImages(prefix string, ref reference.DockerImage
250251
sort.Strings(lines)
251252
return lines, nil
252253
}
254+
255+
func covertMappedImageToImageSet(image extension.Image) extensions.ImageSet {
256+
imageSet := extensions.ImageSet{}
257+
imageConfig := k8simage.Config{}
258+
imageConfig.SetName(image.Name)
259+
imageConfig.SetVersion(image.Version)
260+
imageConfig.SetRegistry(image.Registry)
261+
imageSet[k8simage.ImageID(image.Index)] = imageConfig
262+
263+
return imageSet
264+
}

pkg/test/extensions/binary.go

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ func (b *TestBinary) RunTests(ctx context.Context, timeout time.Duration, env []
397397
return results
398398
}
399399

400-
func (b *TestBinary) ListImages(ctx context.Context) (ImageSet, error) {
400+
func (b *TestBinary) ListImages(ctx context.Context) ([]extension.Image, error) {
401401
start := time.Now()
402402
binName := filepath.Base(b.binaryPath)
403403

@@ -408,23 +408,14 @@ func (b *TestBinary) ListImages(ctx context.Context) (ImageSet, error) {
408408
return nil, fmt.Errorf("failed running '%s list': %w\nOutput: %s", b.binaryPath, err, output)
409409
}
410410

411-
var images []Image
411+
var images []extension.Image
412412
err = json.Unmarshal(output, &images)
413413
if err != nil {
414414
return nil, err
415415
}
416416

417-
result := make(ImageSet, len(images))
418-
for _, image := range images {
419-
imageConfig := k8simage.Config{}
420-
imageConfig.SetName(image.Name)
421-
imageConfig.SetVersion(image.Version)
422-
imageConfig.SetRegistry(image.Registry)
423-
result[k8simage.ImageID(image.Index)] = imageConfig
424-
}
425-
426417
logrus.Infof("Listed %d test images for %q in %v", len(images), binName, time.Since(start))
427-
return result, nil
418+
return images, nil
428419
}
429420

430421
// ExtractAllTestBinaries determines the optimal release payload to use, and extracts all the external
@@ -613,9 +604,9 @@ func (binaries TestBinaries) Info(ctx context.Context, parallelism int) ([]*Exte
613604
return infos, nil
614605
}
615606

616-
func (binaries TestBinaries) ListImages(ctx context.Context, parallelism int) ([]ImageSet, error) {
607+
func (binaries TestBinaries) ListImages(ctx context.Context, parallelism int) ([]extension.Image, error) {
617608
var (
618-
allImages []ImageSet
609+
allImages []extension.Image
619610
mu sync.Mutex
620611
wg sync.WaitGroup
621612
errCh = make(chan error, len(binaries))
@@ -651,12 +642,12 @@ func (binaries TestBinaries) ListImages(ctx context.Context, parallelism int) ([
651642
continue // Skip self - only external binaries need to be queried for images
652643
}
653644

654-
imageConfig, err := binary.ListImages(ctx)
645+
image, err := binary.ListImages(ctx)
655646
if err != nil {
656647
errCh <- err
657648
}
658649
mu.Lock()
659-
allImages = append(allImages, imageConfig)
650+
allImages = append(allImages, image...)
660651
mu.Unlock()
661652
}
662653
}

vendor/github.com/openshift-eng/openshift-tests-extension/pkg/extension/types.go

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

0 commit comments

Comments
 (0)