diff --git a/pkg/cfn/builder/managed_nodegroup.go b/pkg/cfn/builder/managed_nodegroup.go index f55028c0b3..7e2fe14f67 100644 --- a/pkg/cfn/builder/managed_nodegroup.go +++ b/pkg/cfn/builder/managed_nodegroup.go @@ -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") } @@ -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) @@ -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)), diff --git a/pkg/cfn/builder/testdata/launch_template/capacity_block.json b/pkg/cfn/builder/testdata/launch_template/capacity_block.json index d5ed4d783c..088a2c521e 100644 --- a/pkg/cfn/builder/testdata/launch_template/capacity_block.json +++ b/pkg/cfn/builder/testdata/launch_template/capacity_block.json @@ -22,6 +22,7 @@ "InstanceMarketOptions": { "MarketType": "capacity-block" }, + "InstanceType": "p5en.48xlarge", "MetadataOptions": { "HttpPutResponseHopLimit": 2, "HttpTokens": "required" @@ -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"