@@ -258,6 +258,8 @@ func (s *Service) CreateInstance(ctx context.Context, scope *scope.MachineScope,
258258
259259 input .MarketType = scope .AWSMachine .Spec .MarketType
260260
261+ input .CapacityReservationPreference = scope .AWSMachine .Spec .CapacityReservationPreference
262+
261263 s .scope .Debug ("Running instance" , "machine-role" , scope .Role ())
262264 s .scope .Debug ("Running instance with instance metadata options" , "metadata options" , input .InstanceMetadataOptions )
263265 out , err := s .runInstance (scope .Role (), input )
@@ -655,7 +657,7 @@ func (s *Service) runInstance(role string, i *infrav1.Instance) (*infrav1.Instan
655657 }
656658 input .MetadataOptions = getInstanceMetadataOptionsRequest (i .InstanceMetadataOptions )
657659 input .PrivateDnsNameOptions = getPrivateDNSNameOptionsRequest (i .PrivateDNSName )
658- input .CapacityReservationSpecification = getCapacityReservationSpecification (i .CapacityReservationID )
660+ input .CapacityReservationSpecification = getCapacityReservationSpecification (i .CapacityReservationID , i . CapacityReservationPreference )
659661
660662 if i .Tenancy != "" {
661663 input .Placement = & types.Placement {
@@ -1144,17 +1146,25 @@ func filterGroups(list []string, strToFilter string) (newList []string) {
11441146 return
11451147}
11461148
1147- func getCapacityReservationSpecification (capacityReservationID * string ) * types.CapacityReservationSpecification {
1148- if capacityReservationID == nil {
1149- // Not targeting any specific Capacity Reservation
1149+ func getCapacityReservationSpecification (capacityReservationID * string , capacityReservationPreference infrav1.CapacityReservationPreference ) * types.CapacityReservationSpecification {
1150+ if capacityReservationID == nil && capacityReservationPreference == "" {
11501151 return nil
11511152 }
1152-
1153- return & types. CapacityReservationSpecification {
1154- CapacityReservationTarget : & types.CapacityReservationTarget {
1153+ var spec types. CapacityReservationSpecification
1154+ if capacityReservationID != nil {
1155+ spec . CapacityReservationTarget = & types.CapacityReservationTarget {
11551156 CapacityReservationId : capacityReservationID ,
1156- },
1157+ }
1158+ }
1159+ switch capacityReservationPreference {
1160+ case infrav1 .CapacityReservationPreferenceNone :
1161+ spec .CapacityReservationPreference = types .CapacityReservationPreferenceNone
1162+ case infrav1 .CapacityReservationPreferenceOnly :
1163+ spec .CapacityReservationPreference = types .CapacityReservationPreferenceCapacityReservationsOnly
1164+ case infrav1 .CapacityReservationPreferenceOpen :
1165+ spec .CapacityReservationPreference = types .CapacityReservationPreferenceOpen
11571166 }
1167+ return & spec
11581168}
11591169
11601170func getInstanceMarketOptionsRequest (i * infrav1.Instance ) (* types.InstanceMarketOptionsRequest , error ) {
0 commit comments