Skip to content

Commit c325563

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 c325563

File tree

3 files changed

+63
-37
lines changed

3 files changed

+63
-37
lines changed

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

Lines changed: 55 additions & 21 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,14 @@ 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{
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+
}

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)