diff --git a/pkg/asset/agent/common.go b/pkg/asset/agent/common.go index 0a8f4a6134..b0d40f578f 100644 --- a/pkg/asset/agent/common.go +++ b/pkg/asset/agent/common.go @@ -34,8 +34,10 @@ type nmStateConfig struct { } const ( - // ExternalPlatformNameOci is the name of the external platform for OCP. + // ExternalPlatformNameOci is the name of the external platform for Oracle Cloud Infrastructure. ExternalPlatformNameOci = "oci" + // ExternalPlatformNameIBMZ is the name of the external platform for IBM Z (s390x). + ExternalPlatformNameIBMZ = "ibmz" ) // SupportedInstallerPlatforms lists the supported platforms for agent installer. diff --git a/pkg/asset/agent/image/agentimage.go b/pkg/asset/agent/image/agentimage.go index e481492a47..59d914b5eb 100644 --- a/pkg/asset/agent/image/agentimage.go +++ b/pkg/asset/agent/image/agentimage.go @@ -270,9 +270,9 @@ func (a *AgentImage) PersistToFile(directory string) error { if err != nil { return err } - // For external platform OCI, add CCM manifests in the openshift directory. + // For external platforms (OCI, IBM Z, etc.), add CCM manifests in the openshift directory. if a.platform == hiveext.ExternalPlatformType { - logrus.Infof("When using %s oci platform, always make sure CCM manifests were added in the %s directory.", hiveext.ExternalPlatformType, manifests.OpenshiftManifestDir()) + logrus.Infof("When using %s platform, always make sure CCM manifests were added in the %s directory.", hiveext.ExternalPlatformType, manifests.OpenshiftManifestDir()) } return nil diff --git a/pkg/asset/agent/image/kargs.go b/pkg/asset/agent/image/kargs.go index fb82c6596f..f566d54635 100644 --- a/pkg/asset/agent/image/kargs.go +++ b/pkg/asset/agent/image/kargs.go @@ -39,10 +39,15 @@ func (a *Kargs) Generate(_ context.Context, dependencies asset.Parents) error { switch agentWorkflow.Workflow { case workflow.AgentWorkflowTypeInstall: a.fips = agentClusterInstall.FIPSEnabled() - // Add kernel args for external oci platform - if agentClusterInstall.GetExternalPlatformName() == agent.ExternalPlatformNameOci { + // Add kernel args for external platforms + externalPlatformName := agentClusterInstall.GetExternalPlatformName() + switch externalPlatformName { + case agent.ExternalPlatformNameOci: logrus.Debugf("Added kernel args to enable serial console for %s %s platform", hiveext.ExternalPlatformType, agent.ExternalPlatformNameOci) a.consoleArgs = " console=ttyS0" + case agent.ExternalPlatformNameIBMZ: + logrus.Debugf("Added kernel args to enable serial console for %s %s platform", hiveext.ExternalPlatformType, agent.ExternalPlatformNameIBMZ) + a.consoleArgs = " console=ttysclp0" } case workflow.AgentWorkflowTypeAddNodes: diff --git a/pkg/asset/agent/installconfig.go b/pkg/asset/agent/installconfig.go index 893dc47d78..cbe1b38589 100644 --- a/pkg/asset/agent/installconfig.go +++ b/pkg/asset/agent/installconfig.go @@ -125,8 +125,8 @@ func ValidateSupportedPlatforms(platform types.Platform, controlPlaneArch string if platform.Name() != none.Name && controlPlaneArch == types.ArchitecturePPC64LE { allErrs = append(allErrs, field.Invalid(fieldPath, platform.Name(), fmt.Sprintf("CPU architecture \"%s\" only supports platform \"%s\".", types.ArchitecturePPC64LE, none.Name))) } - if platform.Name() != none.Name && controlPlaneArch == types.ArchitectureS390X { - allErrs = append(allErrs, field.Invalid(fieldPath, platform.Name(), fmt.Sprintf("CPU architecture \"%s\" only supports platform \"%s\".", types.ArchitectureS390X, none.Name))) + if platform.Name() != none.Name && platform.Name() != external.Name && controlPlaneArch == types.ArchitectureS390X { + allErrs = append(allErrs, field.Invalid(fieldPath, platform.Name(), fmt.Sprintf("CPU architecture \"%s\" only supports platform \"%s\" or \"%s\".", types.ArchitectureS390X, none.Name, external.Name))) } return allErrs } @@ -135,6 +135,7 @@ func (a *OptionalInstallConfig) validatePlatformsByName(installConfig *types.Ins var allErrs field.ErrorList if installConfig.Platform.Name() == external.Name { + // Validate OCI platform requirements if installConfig.Platform.External.PlatformName == ExternalPlatformNameOci && installConfig.Platform.External.CloudControllerManager != external.CloudControllerManagerTypeExternal { fieldPath := field.NewPath("platform", "external", "cloudControllerManager") @@ -142,6 +143,14 @@ func (a *OptionalInstallConfig) validatePlatformsByName(installConfig *types.Ins fmt.Sprintf("When using external %s platform, %s must be set to %s", ExternalPlatformNameOci, fieldPath, external.CloudControllerManagerTypeExternal))) } + // Validate IBM Z platform requirements + if installConfig.Platform.External.PlatformName == ExternalPlatformNameIBMZ && + installConfig.Platform.External.CloudControllerManager != external.CloudControllerManagerTypeExternal { + fieldPath := field.NewPath("platform", "external", "cloudControllerManager") + allErrs = append(allErrs, field.Invalid(fieldPath, installConfig.Platform.External.CloudControllerManager, + fmt.Sprintf("When using external %s platform, %s must be set to %s", + ExternalPlatformNameIBMZ, fieldPath, external.CloudControllerManagerTypeExternal))) + } } if installConfig.Platform.Name() == vsphere.Name {