Skip to content

Commit 4c2802e

Browse files
committed
pass instance reservation info to instance launch
1 parent c007460 commit 4c2802e

File tree

2 files changed

+42
-12
lines changed

2 files changed

+42
-12
lines changed

pkg/cloud/services/ec2/instances.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

11601170
func getInstanceMarketOptionsRequest(i *infrav1.Instance) (*types.InstanceMarketOptionsRequest, error) {

pkg/cloud/services/ec2/instances_test.go

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6216,9 +6216,10 @@ func TestGetCapacityReservationSpecification(t *testing.T) {
62166216
mockCapacityReservationID := "cr-123"
62176217
mockCapacityReservationIDPtr := &mockCapacityReservationID
62186218
testCases := []struct {
6219-
name string
6220-
capacityReservationID *string
6221-
expectedRequest *types.CapacityReservationSpecification
6219+
name string
6220+
capacityReservationID *string
6221+
capacityReservationPreference infrav1.CapacityReservationPreference
6222+
expectedRequest *types.CapacityReservationSpecification
62226223
}{
62236224
{
62246225
name: "with no CapacityReservationID options specified",
@@ -6234,10 +6235,29 @@ func TestGetCapacityReservationSpecification(t *testing.T) {
62346235
},
62356236
},
62366237
},
6238+
{
6239+
name: "with a valid reservation ID and a preference",
6240+
capacityReservationID: mockCapacityReservationIDPtr,
6241+
capacityReservationPreference: infrav1.CapacityReservationPreferenceOnly,
6242+
expectedRequest: &types.CapacityReservationSpecification{
6243+
CapacityReservationTarget: &types.CapacityReservationTarget{
6244+
CapacityReservationId: aws.String(mockCapacityReservationID),
6245+
},
6246+
CapacityReservationPreference: types.CapacityReservationPreferenceCapacityReservationsOnly,
6247+
},
6248+
},
6249+
{
6250+
name: "with no reservation ID and a preference",
6251+
capacityReservationID: nil,
6252+
capacityReservationPreference: infrav1.CapacityReservationPreferenceNone,
6253+
expectedRequest: &types.CapacityReservationSpecification{
6254+
CapacityReservationPreference: types.CapacityReservationPreferenceNone,
6255+
},
6256+
},
62376257
}
62386258
for _, tc := range testCases {
62396259
t.Run(tc.name, func(t *testing.T) {
6240-
request := getCapacityReservationSpecification(tc.capacityReservationID)
6260+
request := getCapacityReservationSpecification(tc.capacityReservationID, tc.capacityReservationPreference)
62416261
if !cmp.Equal(request, tc.expectedRequest, cmpopts.IgnoreUnexported(types.CapacityReservationSpecification{}, types.CapacityReservationTarget{})) {
62426262
t.Errorf("Case: %s. Got: %v, expected: %v", tc.name, request, tc.expectedRequest)
62436263
}

0 commit comments

Comments
 (0)