diff --git a/pkg/asset/machines/worker.go b/pkg/asset/machines/worker.go index 92f335bc072..f985e4dde78 100644 --- a/pkg/asset/machines/worker.go +++ b/pkg/asset/machines/worker.go @@ -399,7 +399,11 @@ func (w *Worker) Generate(ctx context.Context, dependencies asset.Parents) error } if mpool.InstanceType == "" { - instanceTypes := awsdefaults.InstanceTypes(installConfig.Config.Platform.AWS.Region, installConfig.Config.ControlPlane.Architecture, configv1.HighlyAvailableTopologyMode) + arch := installConfig.Config.ControlPlane.Architecture + if len(installConfig.Config.Compute) > 0 { + arch = installConfig.Config.Compute[0].Architecture + } + instanceTypes := awsdefaults.InstanceTypes(installConfig.Config.Platform.AWS.Region, arch, configv1.HighlyAvailableTopologyMode) switch pool.Name { case types.MachinePoolEdgeRoleName: ok := awsSetPreferredInstanceByEdgeZone(ctx, instanceTypes, installConfig.AWS, zones) diff --git a/pkg/asset/rhcos/image.go b/pkg/asset/rhcos/image.go index c4962b794b9..9e4bb487af0 100644 --- a/pkg/asset/rhcos/image.go +++ b/pkg/asset/rhcos/image.go @@ -94,20 +94,40 @@ func osImage(ctx context.Context, config *types.InstallConfig) (string, string, if len(config.Platform.AWS.AMIID) > 0 { return config.Platform.AWS.AMIID, "", nil } + const globalResourceRegion = "us-east-1" + var osimageControlPlane, osimageCompute string region := config.Platform.AWS.Region - if !rhcos.AMIRegions(config.ControlPlane.Architecture).Has(region) { - const globalResourceRegion = "us-east-1" - logrus.Debugf("No AMI found in %s. Using AMI from %s.", region, globalResourceRegion) - region = globalResourceRegion + { + if !rhcos.AMIRegions(config.ControlPlane.Architecture).Has(region) { + logrus.Debugf("No AMI found in %s. Using AMI from %s.", region, globalResourceRegion) + region = globalResourceRegion + } + osimageControlPlane, err = st.GetAMI(archName, region) + if err != nil { + return "", "", err + } + if region != config.Platform.AWS.Region { + osimageControlPlane = fmt.Sprintf("%s,%s", osimageControlPlane, region) + } } - osimageControlPlane, err := st.GetAMI(archName, region) - if err != nil { - return "", "", err + if len(config.Compute) == 0 || config.Compute[0].Architecture == config.ControlPlane.Architecture { + return osimageControlPlane, "", nil } - if region != config.Platform.AWS.Region { - osimageControlPlane = fmt.Sprintf("%s,%s", osimageControlPlane, region) + { + if !rhcos.AMIRegions(config.Compute[0].Architecture).Has(region) { + logrus.Debugf("No AMI found in %s. Using AMI from %s.", region, globalResourceRegion) + region = globalResourceRegion + } + archName := arch.RpmArch(string(config.Compute[0].Architecture)) + osimageCompute, err = st.GetAMI(archName, region) + if err != nil { + return "", "", err + } + if region != config.Platform.AWS.Region { + osimageCompute = fmt.Sprintf("%s,%s", osimageCompute, region) + } } - return osimageControlPlane, "", nil + return osimageControlPlane, osimageCompute, nil case gcp.Name: if streamArch.Images.Gcp != nil { img := streamArch.Images.Gcp