Skip to content

Commit e4fba40

Browse files
Merge pull request #6275 from bfournie/release-image-mirror
AGENT-326: Fix releaseImage mirror handling with unit test
2 parents ddf29b4 + 9fcee1b commit e4fba40

File tree

2 files changed

+102
-9
lines changed

2 files changed

+102
-9
lines changed

pkg/asset/agent/image/ignition.go

+21-9
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"net/url"
77
"path"
88
"path/filepath"
9+
"regexp"
910
"strings"
1011

1112
"github.com/coreos/ignition/v2/config/util"
@@ -139,15 +140,7 @@ func (a *Ignition) Generate(dependencies asset.Parents) error {
139140
registryCABundle := &mirror.CaBundle{}
140141
dependencies.Get(registriesConfig, registryCABundle)
141142

142-
// Get the mirror for release image
143-
releaseImageMirror := ""
144-
source := strings.Split(agentManifests.ClusterImageSet.Spec.ReleaseImage, ":")
145-
for _, config := range registriesConfig.MirrorConfig {
146-
if config.Location == source[0] {
147-
// include the tag with the build release image
148-
releaseImageMirror = fmt.Sprintf("%s:%s", config.Mirror, source[1])
149-
}
150-
}
143+
releaseImageMirror := getMirrorFromRelease(agentManifests.ClusterImageSet.Spec.ReleaseImage, registriesConfig)
151144

152145
infraEnvID := uuid.New().String()
153146
logrus.Debug("Generated random infra-env id ", infraEnvID)
@@ -387,3 +380,22 @@ func RetrieveRendezvousIP(agentConfig *agent.Config, nmStateConfigs []*v1beta1.N
387380
}
388381
return rendezvousIP, err
389382
}
383+
384+
func getMirrorFromRelease(releaseImage string, registriesConfig *mirror.RegistriesConf) string {
385+
386+
releaseImageMirror := ""
387+
source := regexp.MustCompile(`^(.+?)(@sha256)?:(.+)`).FindStringSubmatch(releaseImage)
388+
for _, config := range registriesConfig.MirrorConfig {
389+
if config.Location == source[1] {
390+
// include the tag with the build release image
391+
if len(source) == 4 {
392+
// Has Sha256
393+
releaseImageMirror = fmt.Sprintf("%s%s:%s", config.Mirror, source[2], source[3])
394+
} else if len(source) == 3 {
395+
releaseImageMirror = fmt.Sprintf("%s:%s", config.Mirror, source[2])
396+
}
397+
}
398+
}
399+
400+
return releaseImageMirror
401+
}

pkg/asset/agent/image/ignition_test.go

+81
Original file line numberDiff line numberDiff line change
@@ -414,3 +414,84 @@ func buildIgnitionAssetDefaultDependencies() []asset.Asset {
414414
&tls.AdminKubeConfigClientCertKey{},
415415
}
416416
}
417+
418+
func TestIgnition_getMirrorFromRelease(t *testing.T) {
419+
420+
cases := []struct {
421+
name string
422+
release string
423+
registriesConf mirror.RegistriesConf
424+
expectedMirror string
425+
}{
426+
{
427+
name: "no-mirror",
428+
release: "registry.ci.openshift.org/ocp/release:latest",
429+
registriesConf: mirror.RegistriesConf{},
430+
expectedMirror: "",
431+
},
432+
{
433+
name: "mirror-no-match",
434+
release: "registry.ci.openshift.org/ocp/release:4.11.0-0.nightly-foo",
435+
registriesConf: mirror.RegistriesConf{
436+
File: &asset.File{
437+
Filename: "registries.conf",
438+
Data: []byte(""),
439+
},
440+
MirrorConfig: []mirror.RegistriesConfig{
441+
{
442+
Location: "some.registry.org/release",
443+
Mirror: "some.mirror.org",
444+
},
445+
},
446+
},
447+
expectedMirror: "",
448+
},
449+
{
450+
name: "mirror-match",
451+
release: "registry.ci.openshift.org/ocp/release:4.11.0-0.nightly-foo",
452+
registriesConf: mirror.RegistriesConf{
453+
File: &asset.File{
454+
Filename: "registries.conf",
455+
Data: []byte(""),
456+
},
457+
MirrorConfig: []mirror.RegistriesConfig{
458+
{
459+
Location: "registry.ci.openshift.org/ocp/release",
460+
Mirror: "virthost.ostest.test.metalkube.org:5000/localimages/local-release-image",
461+
},
462+
},
463+
},
464+
expectedMirror: "virthost.ostest.test.metalkube.org:5000/localimages/local-release-image:4.11.0-0.nightly-foo",
465+
},
466+
{
467+
name: "mirror-match-with-checksum",
468+
release: "quay.io/openshift-release-dev/ocp-release@sha256:300bce8246cf880e792e106607925de0a404484637627edf5f517375517d54a4",
469+
registriesConf: mirror.RegistriesConf{
470+
File: &asset.File{
471+
Filename: "registries.conf",
472+
Data: []byte(""),
473+
},
474+
MirrorConfig: []mirror.RegistriesConfig{
475+
{
476+
Location: "quay.io/openshift-release-dev/ocp-v4.0-art-dev",
477+
Mirror: "localhost:5000/openshift4/openshift/release",
478+
},
479+
{
480+
Location: "quay.io/openshift-release-dev/ocp-release",
481+
Mirror: "localhost:5000/openshift-release-dev/ocp-release",
482+
},
483+
},
484+
},
485+
expectedMirror: "localhost:5000/openshift-release-dev/ocp-release@sha256:300bce8246cf880e792e106607925de0a404484637627edf5f517375517d54a4",
486+
},
487+
}
488+
for _, tc := range cases {
489+
t.Run(tc.name, func(t *testing.T) {
490+
491+
mirror := getMirrorFromRelease(tc.release, &tc.registriesConf)
492+
493+
assert.Equal(t, tc.expectedMirror, mirror)
494+
495+
})
496+
}
497+
}

0 commit comments

Comments
 (0)