in pkg/controllers/nodeclass/validation.go [430:458]
func (v *Validation) getInstanceTypesForNodeClass(ctx context.Context, nodeClass *v1.EC2NodeClass) ([]*cloudprovider.InstanceType, error) {
instanceTypes, err := v.instanceTypeProvider.List(ctx, nodeClass)
if err != nil {
return nil, fmt.Errorf("listing instance types for nodeclass, %w", err)
}
nodePools, err := nodepoolutils.ListManaged(ctx, v.kubeClient, v.cloudProvider, nodepoolutils.ForNodeClass(nodeClass))
if err != nil {
return nil, fmt.Errorf("listing nodepools for nodeclass, %w", err)
}
var compatibleInstanceTypes []*cloudprovider.InstanceType
names := sets.New[string]()
for _, np := range nodePools {
reqs := scheduling.NewNodeSelectorRequirementsWithMinValues(np.Spec.Template.Spec.Requirements...)
if np.Spec.Template.ObjectMeta.Labels != nil {
reqs.Add(lo.Values(scheduling.NewLabelRequirements(np.Spec.Template.ObjectMeta.Labels))...)
}
for _, it := range instanceTypes {
if it.Requirements.Intersects(reqs) != nil {
continue
}
if names.Has(it.Name) {
continue
}
names.Insert(it.Name)
compatibleInstanceTypes = append(compatibleInstanceTypes, it)
}
}
return compatibleInstanceTypes, nil
}