func filterRejectExoticInstanceTypes()

in pkg/providers/instance/instance.go [618:643]


func filterRejectExoticInstanceTypes(instanceTypes []*cloudprovider.InstanceType) ([]*cloudprovider.InstanceType, []*cloudprovider.InstanceType) {
	var genericInstanceTypes []*cloudprovider.InstanceType
	var exoticInstanceTypes []*cloudprovider.InstanceType
	for _, it := range instanceTypes {
		// deprioritize metal even if our opinionated filter isn't applied due to something like an instance family
		// requirement
		if _, ok := lo.Find(it.Requirements.Get(v1.LabelInstanceSize).Values(), func(size string) bool { return strings.Contains(size, "metal") }); ok {
			exoticInstanceTypes = append(exoticInstanceTypes, it)
			continue
		}
		if !resources.IsZero(it.Capacity[v1.ResourceAWSNeuron]) ||
			!resources.IsZero(it.Capacity[v1.ResourceAWSNeuronCore]) ||
			!resources.IsZero(it.Capacity[v1.ResourceAMDGPU]) ||
			!resources.IsZero(it.Capacity[v1.ResourceNVIDIAGPU]) ||
			!resources.IsZero(it.Capacity[v1.ResourceHabanaGaudi]) {
			exoticInstanceTypes = append(exoticInstanceTypes, it)
			continue
		}
		genericInstanceTypes = append(genericInstanceTypes, it)
	}
	// if we got some subset of instance types, then prefer to use those
	if len(genericInstanceTypes) != 0 {
		return genericInstanceTypes, exoticInstanceTypes
	}
	return instanceTypes, nil
}