Skip to content

Commit 79ac1dd

Browse files
committed
Add spotMarketRequest on marketType spot
1 parent d5523dc commit 79ac1dd

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

Diff for: pkg/actuators/machine/instances.go

+8
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,10 @@ func getInstanceMarketOptionsRequest(providerConfig *machinev1beta1.AWSMachinePr
577577
return nil, errors.New("can't create spot capacity-blocks, remove spot market request")
578578
}
579579

580+
if (providerConfig.MarketType == machinev1beta1.MarketTypeSpot || providerConfig.SpotMarketOptions != nil) && providerConfig.CapacityReservationID != "" {
581+
return nil, errors.New("unable to generate marketOptions for spot instance, capacityReservationID is incompatible with marketType spot and spotMarketOptions")
582+
}
583+
580584
// Infer MarketType if not explicitly set
581585
if providerConfig.SpotMarketOptions != nil && providerConfig.MarketType == "" {
582586
providerConfig.MarketType = machinev1beta1.MarketTypeSpot
@@ -586,6 +590,10 @@ func getInstanceMarketOptionsRequest(providerConfig *machinev1beta1.AWSMachinePr
586590
providerConfig.MarketType = machinev1beta1.MarketTypeOnDemand
587591
}
588592

593+
if providerConfig.MarketType == machinev1beta1.MarketTypeSpot && providerConfig.SpotMarketOptions == nil {
594+
providerConfig.SpotMarketOptions = &machinev1beta1.SpotMarketOptions{}
595+
}
596+
589597
switch providerConfig.MarketType {
590598
case machinev1beta1.MarketTypeCapacityBlock:
591599
if providerConfig.CapacityReservationID == "" {

Diff for: pkg/actuators/machine/instances_test.go

+32
Original file line numberDiff line numberDiff line change
@@ -1254,6 +1254,38 @@ func TestGetInstanceMarketOptionsRequest(t *testing.T) {
12541254
},
12551255
wantErr: false,
12561256
},
1257+
{
1258+
name: "with an marketType Spot options specified",
1259+
providerConfig: &machinev1beta1.AWSMachineProviderConfig{
1260+
MarketType: machinev1beta1.MarketTypeSpot,
1261+
},
1262+
expectedRequest: &ec2.InstanceMarketOptionsRequest{
1263+
MarketType: aws.String(ec2.MarketTypeSpot),
1264+
SpotOptions: &ec2.SpotMarketOptions{
1265+
InstanceInterruptionBehavior: aws.String(ec2.InstanceInterruptionBehaviorTerminate),
1266+
SpotInstanceType: aws.String(ec2.SpotInstanceTypeOneTime),
1267+
},
1268+
},
1269+
wantErr: false,
1270+
},
1271+
{
1272+
name: "with an marketType Spot and CapacityRerservationID specified",
1273+
providerConfig: &machinev1beta1.AWSMachineProviderConfig{
1274+
MarketType: machinev1beta1.MarketTypeSpot,
1275+
CapacityReservationID: mockCapacityReservationID,
1276+
},
1277+
expectedRequest: nil,
1278+
wantErr: true,
1279+
},
1280+
{
1281+
name: "with an marketType Spot and CapacityRerservationID specified",
1282+
providerConfig: &machinev1beta1.AWSMachineProviderConfig{
1283+
SpotMarketOptions: &machinev1beta1.SpotMarketOptions{},
1284+
CapacityReservationID: mockCapacityReservationID,
1285+
},
1286+
expectedRequest: nil,
1287+
wantErr: true,
1288+
},
12571289
{
12581290
name: "with an empty MaxPrice specified",
12591291
providerConfig: &machinev1beta1.AWSMachineProviderConfig{

0 commit comments

Comments
 (0)