Skip to content

Commit b927430

Browse files
Merge pull request #5000 from openshift-cherrypick-robot/cherry-pick-4995-to-release-4.18
[release-4.18] OCPBUGS-55290: MCO should fall back to us-east-1 for AWS bootimages if no region specific-AMI exists
2 parents 4a7266b + bce389b commit b927430

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

pkg/controller/machine-set-boot-image/platform_helpers.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,14 @@ func reconcileAWS(machineSet *machinev1beta1.MachineSet, configMap *corev1.Confi
125125
// Use the GetAwsRegionImage function to find the correct AMI for the region and architecture
126126
awsRegionImage, err := streamData.GetAwsRegionImage(arch, region)
127127
if err != nil {
128-
return false, nil, fmt.Errorf("failed to get AMI for region %s: %v", region, err)
128+
// On error, attempt to default to us-east-1 region instead
129+
// This mirrors the installer approach:
130+
// https://github.com/openshift/installer/blob/08aa270e20db77b237306b3f3700d6b2ad654abc/pkg/asset/rhcos/image.go#L99-L103
131+
klog.Infof("failed to get AMI for region %s: %v", region, err)
132+
if awsRegionImage, err = streamData.GetAwsRegionImage(arch, "us-east-1"); err != nil {
133+
return false, nil, fmt.Errorf("failed to get default AMI for region %s: %v", region, err)
134+
}
135+
klog.Infof("Using AMI for region us-east-1 %s", awsRegionImage.Image)
129136
}
130137

131138
newami := awsRegionImage.Image
@@ -134,12 +141,23 @@ func reconcileAWS(machineSet *machinev1beta1.MachineSet, configMap *corev1.Confi
134141

135142
patchRequired = false
136143
newProviderSpec := providerSpec.DeepCopy()
137-
currentAMI := *newProviderSpec.AMI.ID
144+
145+
// AMIs can be defined via filters, which is the case for OKD. In such cases,
146+
// ID will be nil for the very first update, and a default value will need to
147+
// be populated
148+
currentAMI := "undefined AMI ID"
149+
if newProviderSpec.AMI.ID != nil {
150+
currentAMI = *newProviderSpec.AMI.ID
151+
}
138152
if newami != currentAMI {
139153
klog.Infof("New target boot image: %s: %s", region, newami)
140154
klog.Infof("Current image: %s: %s", region, currentAMI)
141155
patchRequired = true
142-
newProviderSpec.AMI.ID = &newami
156+
// Only one of ID, ARN or Filters in the AMI may be specified, so define
157+
// a new AMI object with only an ID field.
158+
newProviderSpec.AMI = machinev1beta1.AWSResourceReference{
159+
ID: &newami,
160+
}
143161
}
144162

145163
if newProviderSpec.UserDataSecret.Name != ManagedWorkerSecretName {

0 commit comments

Comments
 (0)