func()

in internal/deployers/eksapi/node.go [626:655]


func (m *nodeManager) getValidAvailabilityZonesFilter(opts *deployerOptions, infra *Infrastructure) ([]string, error) {
	if !opts.EFA {
		// no filter needed, leaves scheduling to EC2 provisioner
		return []string{}, nil
	}
	describeFilters := []ec2types.Filter{
		{
			Name:   aws.String("instance-type"),
			Values: opts.InstanceTypes,
		},
		{
			Name:   aws.String("location"),
			Values: infra.availabilityZones,
		},
	}
	describeResponse, err := m.clients.EC2().DescribeInstanceTypeOfferings(context.TODO(), &ec2.DescribeInstanceTypeOfferingsInput{
		Filters:      describeFilters,
		LocationType: ec2types.LocationTypeAvailabilityZone,
	})
	if err != nil {
		return nil, fmt.Errorf("failed to describe instance type offerings: %v", err)
	}
	if describeResponse == nil || len(describeResponse.InstanceTypeOfferings) == 0 {
		return nil, fmt.Errorf("no instance type offerings in current region with filters %v", describeFilters)
	}
	// EFA traffic cannot cross an AZ https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html#efa-limits
	targetAZ := aws.ToString(describeResponse.InstanceTypeOfferings[0].Location)
	klog.Infof("Found availability zone %q with offering for instance types %v", targetAZ, opts.InstanceTypes)
	return []string{targetAZ}, nil
}