Skip to content

Commit

Permalink
MNG capacity block needs a single instance type in launch template
Browse files Browse the repository at this point in the history
Signed-off-by: Davanum Srinivas <[email protected]>
  • Loading branch information
dims committed Feb 13, 2025
1 parent f975b40 commit 089e445
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
22 changes: 20 additions & 2 deletions pkg/cfn/builder/managed_nodegroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,9 +130,11 @@ func (m *ManagedNodeGroupResourceSet) AddAllResources(ctx context.Context) error
managedResource.CapacityType = gfnt.NewString("SPOT")
}

isCapacityBlockEnabled := false
if m.nodeGroup.InstanceMarketOptions != nil &&
m.nodeGroup.InstanceMarketOptions.MarketType != nil &&
*m.nodeGroup.InstanceMarketOptions.MarketType == "capacity-block" {
isCapacityBlockEnabled = true
managedResource.CapacityType = gfnt.NewString("CAPACITY_BLOCK")
}

Expand Down Expand Up @@ -173,7 +175,15 @@ func (m *ManagedNodeGroupResourceSet) AddAllResources(ctx context.Context) error
}

if launchTemplateData.InstanceType == "" {
managedResource.InstanceTypes = gfnt.NewStringSlice(instanceTypes...)
if isCapacityBlockEnabled {
if len(instanceTypes) > 1 {
return errors.New("when using capacity type CAPACITY_BLOCK please specify only one instance type")
} else {
launchTemplateData.InstanceType = ec2types.InstanceType(instanceTypes[0])
}
} else {
managedResource.InstanceTypes = gfnt.NewStringSlice(instanceTypes...)
}
}
} else {
launchTemplateData, err := m.makeLaunchTemplateData(ctx)
Expand All @@ -183,7 +193,15 @@ func (m *ManagedNodeGroupResourceSet) AddAllResources(ctx context.Context) error
if launchTemplateData.ImageId == nil {
managedResource.AmiType = makeAMIType()
}
managedResource.InstanceTypes = gfnt.NewStringSlice(instanceTypes...)

if isCapacityBlockEnabled {
if len(instanceTypes) > 1 {
return errors.New("cannot specify multiple instance types when using capacity block")
}
launchTemplateData.InstanceType = gfnt.NewString(instanceTypes[0])
} else {
managedResource.InstanceTypes = gfnt.NewStringSlice(instanceTypes...)
}

ltRef := m.newResource("LaunchTemplate", &gfnec2.LaunchTemplate{
LaunchTemplateName: gfnt.MakeFnSubString(fmt.Sprintf("${%s}", gfnt.StackName)),
Expand Down
4 changes: 1 addition & 3 deletions pkg/cfn/builder/testdata/launch_template/capacity_block.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"InstanceMarketOptions": {
"MarketType": "capacity-block"
},
"InstanceType": "p5en.48xlarge",
"MetadataOptions": {
"HttpPutResponseHopLimit": 2,
"HttpTokens": "required"
Expand Down Expand Up @@ -96,9 +97,6 @@
"AmiType": "AL2023_x86_64_NVIDIA",
"CapacityType": "CAPACITY_BLOCK",
"ClusterName": "lt",
"InstanceTypes": [
"p5en.48xlarge"
],
"Labels": {
"alpha.eksctl.io/cluster-name": "lt",
"alpha.eksctl.io/nodegroup-name": "cb-test"
Expand Down

0 comments on commit 089e445

Please sign in to comment.