@@ -125,7 +125,14 @@ func reconcileAWS(machineSet *machinev1beta1.MachineSet, configMap *corev1.Confi
125
125
// Use the GetAwsRegionImage function to find the correct AMI for the region and architecture
126
126
awsRegionImage , err := streamData .GetAwsRegionImage (arch , region )
127
127
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 )
129
136
}
130
137
131
138
newami := awsRegionImage .Image
@@ -134,12 +141,23 @@ func reconcileAWS(machineSet *machinev1beta1.MachineSet, configMap *corev1.Confi
134
141
135
142
patchRequired = false
136
143
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
+ }
138
152
if newami != currentAMI {
139
153
klog .Infof ("New target boot image: %s: %s" , region , newami )
140
154
klog .Infof ("Current image: %s: %s" , region , currentAMI )
141
155
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
+ }
143
161
}
144
162
145
163
if newProviderSpec .UserDataSecret .Name != ManagedWorkerSecretName {
0 commit comments