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
}