Skip to content

Commit d0b5481

Browse files
committed
Support multi-arch payload in releaseImage data
1 parent b768fca commit d0b5481

File tree

5 files changed

+34
-21
lines changed

5 files changed

+34
-21
lines changed

pkg/asset/agent/image/ignition.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/openshift/assisted-service/api/v1beta1"
2222
"github.com/openshift/assisted-service/models"
2323
"github.com/openshift/installer/pkg/asset"
24+
agentcommon "github.com/openshift/installer/pkg/asset/agent"
2425
"github.com/openshift/installer/pkg/asset/agent/agentconfig"
2526
"github.com/openshift/installer/pkg/asset/agent/manifests"
2627
"github.com/openshift/installer/pkg/asset/agent/mirror"
@@ -135,8 +136,20 @@ func (a *Ignition) Generate(dependencies asset.Parents) error {
135136
if infraEnv.Spec.CpuArchitecture != "" {
136137
archName = infraEnv.Spec.CpuArchitecture
137138
}
138-
139-
releaseImageList, err := releaseImageList(agentManifests.ClusterImageSet.Spec.ReleaseImage, archName)
139+
// Examine the release payload to see if its multi
140+
releaseArch, err := agentcommon.DetermineReleaseImageArch(agentManifests.GetPullSecretData(), agentManifests.ClusterImageSet.Spec.ReleaseImage)
141+
if err != nil {
142+
logrus.Warnf("Unable to validate the release image architecture, using infraEnv.Spec.CpuArchitecture for the release image arch")
143+
releaseArch = archName
144+
} else {
145+
releaseArch = arch.RpmArch(releaseArch)
146+
logrus.Debugf("Found Release Image Architecture: %s", releaseArch)
147+
}
148+
releaseArchs := []string{releaseArch}
149+
if releaseArch == "multi" {
150+
releaseArchs = []string{arch.RpmArch(types.ArchitectureARM64), arch.RpmArch(types.ArchitectureAMD64), arch.RpmArch(types.ArchitecturePPC64LE), arch.RpmArch(types.ArchitectureS390X)}
151+
}
152+
releaseImageList, err := releaseImageList(agentManifests.ClusterImageSet.Spec.ReleaseImage, releaseArch, releaseArchs)
140153
if err != nil {
141154
return err
142155
}

pkg/asset/agent/image/ignition_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func TestIgnition_getTemplateData(t *testing.T) {
6565
haveMirrorConfig := true
6666
publicContainerRegistries := "quay.io,registry.ci.openshift.org"
6767

68-
releaseImageList, err := releaseImageList(clusterImageSet.Spec.ReleaseImage, "x86_64")
68+
releaseImageList, err := releaseImageList(clusterImageSet.Spec.ReleaseImage, "x86_64", []string{"86_64"})
6969
assert.NoError(t, err)
7070

7171
arch := "x86_64"

pkg/asset/agent/image/releaseimage.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ import (
1010
)
1111

1212
type releaseImage struct {
13-
ReleaseVersion string `json:"openshift_version"`
14-
Arch string `json:"cpu_architecture"`
15-
PullSpec string `json:"url"`
16-
Tag string `json:"version"`
13+
ReleaseVersion string `json:"openshift_version"`
14+
Arch string `json:"cpu_architecture"`
15+
Archs []string `json:"cpu_architectures"`
16+
PullSpec string `json:"url"`
17+
Tag string `json:"version"`
1718
}
1819

1920
func isDigest(pullspec string) bool {
2021
return regexp.MustCompile(`.*sha256:[a-fA-F0-9]{64}$`).MatchString(pullspec)
2122
}
2223

23-
func releaseImageFromPullSpec(pullSpec, arch string) (releaseImage, error) {
24-
24+
func releaseImageFromPullSpec(pullSpec, arch string, archs []string) (releaseImage, error) {
2525
// When the pullspec it's a digest let's use the current version
2626
// stored in the installer
2727
if isDigest(pullSpec) {
@@ -33,6 +33,7 @@ func releaseImageFromPullSpec(pullSpec, arch string) (releaseImage, error) {
3333
return releaseImage{
3434
ReleaseVersion: versionString,
3535
Arch: arch,
36+
Archs: archs,
3637
PullSpec: pullSpec,
3738
Tag: versionString,
3839
}, nil
@@ -54,14 +55,14 @@ func releaseImageFromPullSpec(pullSpec, arch string) (releaseImage, error) {
5455
return releaseImage{
5556
ReleaseVersion: relVersion,
5657
Arch: arch,
58+
Archs: archs,
5759
PullSpec: pullSpec,
5860
Tag: tag,
5961
}, nil
6062
}
6163

62-
func releaseImageList(pullSpec, arch string) (string, error) {
63-
64-
relImage, err := releaseImageFromPullSpec(pullSpec, arch)
64+
func releaseImageList(pullSpec, arch string, archs []string) (string, error) {
65+
relImage, err := releaseImageFromPullSpec(pullSpec, arch, archs)
6566
if err != nil {
6667
return "", err
6768
}

pkg/asset/agent/image/releaseimage_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,37 +17,37 @@ func TestReleaseImageList(t *testing.T) {
1717
name: "4.10rc",
1818
pullSpec: "quay.io/openshift-release-dev/ocp-release:4.10.0-rc.1-x86_64",
1919
arch: "x86_64",
20-
result: "[{\"openshift_version\":\"4.10\",\"cpu_architecture\":\"x86_64\",\"url\":\"quay.io/openshift-release-dev/ocp-release:4.10.0-rc.1-x86_64\",\"version\":\"4.10.0-rc.1\"}]",
20+
result: "[{\"openshift_version\":\"4.10\",\"cpu_architecture\":\"x86_64\",\"cpu_architectures\":[\"x86_64\"],\"url\":\"quay.io/openshift-release-dev/ocp-release:4.10.0-rc.1-x86_64\",\"version\":\"4.10.0-rc.1\"}]",
2121
},
2222
{
2323
name: "pull-spec-includes-port-number",
2424
pullSpec: "quay.io:433/openshift-release-dev/ocp-release:4.10.0-rc.1-x86_64",
2525
arch: "x86_64",
26-
result: "[{\"openshift_version\":\"4.10\",\"cpu_architecture\":\"x86_64\",\"url\":\"quay.io:433/openshift-release-dev/ocp-release:4.10.0-rc.1-x86_64\",\"version\":\"4.10.0-rc.1\"}]",
26+
result: "[{\"openshift_version\":\"4.10\",\"cpu_architecture\":\"x86_64\",\"cpu_architectures\":[\"x86_64\"],\"url\":\"quay.io:433/openshift-release-dev/ocp-release:4.10.0-rc.1-x86_64\",\"version\":\"4.10.0-rc.1\"}]",
2727
},
2828
{
2929
name: "arm",
3030
pullSpec: "quay.io/openshift-release-dev/ocp-release:4.10.0-rc.1-aarch64",
3131
arch: "aarch64",
32-
result: "[{\"openshift_version\":\"4.10\",\"cpu_architecture\":\"aarch64\",\"url\":\"quay.io/openshift-release-dev/ocp-release:4.10.0-rc.1-aarch64\",\"version\":\"4.10.0-rc.1\"}]",
32+
result: "[{\"openshift_version\":\"4.10\",\"cpu_architecture\":\"aarch64\",\"cpu_architectures\":[\"aarch64\"],\"url\":\"quay.io/openshift-release-dev/ocp-release:4.10.0-rc.1-aarch64\",\"version\":\"4.10.0-rc.1\"}]",
3333
},
3434
{
3535
name: "4.11ci",
3636
pullSpec: "registry.ci.openshift.org/ocp/release:4.11.0-0.ci-2022-05-16-202609",
3737
arch: "x86_64",
38-
result: "[{\"openshift_version\":\"4.11\",\"cpu_architecture\":\"x86_64\",\"url\":\"registry.ci.openshift.org/ocp/release:4.11.0-0.ci-2022-05-16-202609\",\"version\":\"4.11.0-0.ci-2022-05-16-202609\"}]",
38+
result: "[{\"openshift_version\":\"4.11\",\"cpu_architecture\":\"x86_64\",\"cpu_architectures\":[\"x86_64\"],\"url\":\"registry.ci.openshift.org/ocp/release:4.11.0-0.ci-2022-05-16-202609\",\"version\":\"4.11.0-0.ci-2022-05-16-202609\"}]",
3939
},
4040
{
4141
name: "CI-ephemeral",
4242
pullSpec: "registry.build04.ci.openshift.org/ci-op-m7rfgytz/release@sha256:ebb203f24ee060d61bdb466696a9c20b3841f9929badf9b81fc99cbedc2a679e",
4343
arch: "x86_64",
44-
result: "[{\"openshift_version\":\"was not built correctly\",\"cpu_architecture\":\"x86_64\",\"url\":\"registry.build04.ci.openshift.org/ci-op-m7rfgytz/release@sha256:ebb203f24ee060d61bdb466696a9c20b3841f9929badf9b81fc99cbedc2a679e\",\"version\":\"was not built correctly\"}]",
44+
result: "[{\"openshift_version\":\"was not built correctly\",\"cpu_architecture\":\"x86_64\",\"cpu_architectures\":[\"x86_64\"],\"url\":\"registry.build04.ci.openshift.org/ci-op-m7rfgytz/release@sha256:ebb203f24ee060d61bdb466696a9c20b3841f9929badf9b81fc99cbedc2a679e\",\"version\":\"was not built correctly\"}]",
4545
},
4646
}
4747

4848
for _, tc := range cases {
4949
t.Run(tc.name, func(t *testing.T) {
50-
output, err := releaseImageList(tc.pullSpec, tc.arch)
50+
output, err := releaseImageList(tc.pullSpec, tc.arch, []string{tc.arch})
5151
assert.NoError(t, err)
5252
if err == nil {
5353
assert.Equal(t, tc.result, output)
@@ -65,7 +65,7 @@ func TestReleaseImageListErrors(t *testing.T) {
6565

6666
for _, tc := range cases {
6767
t.Run(tc, func(t *testing.T) {
68-
_, err := releaseImageList(tc, "x86_64")
68+
_, err := releaseImageList(tc, "x86_64", []string{"x86_64"})
6969
assert.Error(t, err)
7070
})
7171
}

pkg/asset/agent/image/unconfigured_ignition.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ func (a *UnconfiguredIgnition) Generate(dependencies asset.Parents) error {
112112
if infraEnv.Spec.CpuArchitecture != "" {
113113
archName = infraEnv.Spec.CpuArchitecture
114114
}
115-
116-
releaseImageList, err := releaseImageList(clusterImageSet.Spec.ReleaseImage, archName)
115+
releaseImageList, err := releaseImageList(clusterImageSet.Spec.ReleaseImage, archName, []string{archName})
117116
if err != nil {
118117
return err
119118
}

0 commit comments

Comments
 (0)