Skip to content

Commit 19f298a

Browse files
committed
Validate release arch when possible
1 parent d0b5481 commit 19f298a

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

pkg/asset/agent/installconfig.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/openshift/assisted-service/models"
1313
"github.com/openshift/installer/pkg/asset"
1414
"github.com/openshift/installer/pkg/asset/installconfig"
15+
"github.com/openshift/installer/pkg/asset/releaseimage"
1516
"github.com/openshift/installer/pkg/types"
1617
"github.com/openshift/installer/pkg/types/baremetal"
1718
baremetaldefaults "github.com/openshift/installer/pkg/types/baremetal/defaults"
@@ -79,6 +80,9 @@ func (a *OptionalInstallConfig) validateInstallConfig(installConfig *types.Insta
7980
if err := a.validateSupportedArchs(installConfig); err != nil {
8081
allErrs = append(allErrs, err...)
8182
}
83+
if err := a.validateReleaseArch(installConfig); err != nil {
84+
allErrs = append(allErrs, err...)
85+
}
8286

8387
if installConfig.FeatureSet != configv1.Default {
8488
allErrs = append(allErrs, field.NotSupported(field.NewPath("FeatureSet"), installConfig.FeatureSet, []string{string(configv1.Default)}))
@@ -129,6 +133,34 @@ func (a *OptionalInstallConfig) validateSupportedPlatforms(installConfig *types.
129133
return allErrs
130134
}
131135

136+
func (a *OptionalInstallConfig) validateReleaseArch(installConfig *types.InstallConfig) field.ErrorList {
137+
var allErrs field.ErrorList
138+
139+
fieldPath := field.NewPath("ControlPlane", "Architecture")
140+
releaseImage := &releaseimage.Image{}
141+
asseterr := releaseImage.Generate(asset.Parents{})
142+
if asseterr != nil {
143+
allErrs = append(allErrs, field.InternalError(fieldPath, asseterr))
144+
}
145+
releaseArch, err := DetermineReleaseImageArch(installConfig.PullSecret, releaseImage.PullSpec)
146+
if err != nil {
147+
logrus.Warnf("Unable to validate the release image architecture, skipping validation")
148+
} else {
149+
// Validate that the release image supports the install-config architectures.
150+
switch releaseArch {
151+
// Check the release image to see if it is multi.
152+
case "multi":
153+
logrus.Debugf("multi architecture release image %s found, all archs supported", releaseImage.PullSpec)
154+
// If the release image isn't multi, then its single arch, and it must match the cpu architecture.
155+
case string(installConfig.ControlPlane.Architecture):
156+
logrus.Debugf("Supported architecture %s found for the release image: %s", installConfig.ControlPlane.Architecture, releaseImage.PullSpec)
157+
default:
158+
allErrs = append(allErrs, field.Forbidden(fieldPath, fmt.Sprintf("unsupported release image architecture. ControlPlane Arch: %s doesn't match Release Image Arch: %s", installConfig.ControlPlane.Architecture, releaseArch)))
159+
}
160+
}
161+
return allErrs
162+
}
163+
132164
func (a *OptionalInstallConfig) validateSupportedArchs(installConfig *types.InstallConfig) field.ErrorList {
133165
var allErrs field.ErrorList
134166

0 commit comments

Comments
 (0)