Skip to content

Commit 0913c46

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 0913c46

File tree

4 files changed

+72
-27
lines changed

4 files changed

+72
-27
lines changed

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

Lines changed: 59 additions & 11 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,13 @@ 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+
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+
}

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
}

test/extended/util/image/zz_generated.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# This file is generated by hack/update-generated.sh
2+
/: quay.io/openshift/community-e2e-images:e2e-25-registry-k8s-io-pause-3-10-b3MYAwZ_MelO9baY
23
docker.io/library/registry:2.8.0-beta.1 quay.io/openshift/community-e2e-images:e2e-docker-io-library-registry-2-8-0-beta-1-8x_YFKSuz9Xw6lZD
4+
gcr.io/authenticated-image-pulling/alpine:3.7 quay.io/openshift/community-e2e-images:e2e-5-gcr-io-authenticated-image-pulling-alpine-3-7-k0vnpjJdFU4B_885
5+
gcr.io/authenticated-image-pulling/windows-nanoserver:v1 quay.io/openshift/community-e2e-images:e2e-6-gcr-io-authenticated-image-pulling-windows-nanoserver-v1-JL_XVPCftjC9psmR
6+
gcr.io/k8s-authenticated-test/agnhost:2.6 quay.io/openshift/community-e2e-images:e2e-2-gcr-io-k8s-authenticated-test-agnhost-2-6-JK0iEHnrlg2SLZKc
7+
invalid.registry.k8s.io/invalid/alpine:3.1 quay.io/openshift/community-e2e-images:e2e-12-invalid-registry-k8s-io-invalid-alpine-3-1-0j4KrpB4tVH3QMjb
38
quay.io/keycloak/keycloak:25.0 quay.io/openshift/community-e2e-images:e2e-quay-io-keycloak-keycloak-25-0-rEIw9B2Zcc3L1M6k
49
quay.io/kubevirt/fedora-with-test-tooling-container-disk:20241024_891122a6fc quay.io/openshift/community-e2e-images:e2e-quay-io-kubevirt-fedora-with-test-tooling-container-disk-20241024_891122a6fc-IycYTh-87XrXse4E
510
quay.io/openshifttest/ldap:1.2 quay.io/openshift/community-e2e-images:e2e-quay-io-openshifttest-ldap-1-2-O3f5zPgtmWzEtasv

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)