in internal/deployers/eksapi/node.go [596:624]
func (m *nodeManager) getCapacityReservation(opts *deployerOptions) (*ec2types.CapacityReservation, error) {
capacityReservations, err := m.clients.EC2().DescribeCapacityReservations(context.TODO(), &ec2.DescribeCapacityReservationsInput{
Filters: []ec2types.Filter{
{
Name: aws.String("instance-type"),
Values: opts.InstanceTypes,
},
{
Name: aws.String("state"),
Values: []string{"active"},
},
},
})
if err != nil {
return nil, fmt.Errorf("failed to describe capacity reservation: %v", err)
}
var capacityReservation *ec2types.CapacityReservation
for _, cr := range capacityReservations.CapacityReservations {
if aws.ToInt32(cr.AvailableInstanceCount) >= int32(opts.Nodes) {
capacityReservation = &cr
break
}
}
if capacityReservation == nil {
return nil, fmt.Errorf("no capacity reservation found for instance type %s with %d nodes count", opts.InstanceTypes[0], opts.Nodes)
}
klog.Infof("Using capacity reservation: %s", aws.ToString(capacityReservation.CapacityReservationId))
return capacityReservation, nil
}