func()

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
}