in pkg/controllers/nodeclaim/capacityreservation/controller.go [63:103]
func (c *Controller) Reconcile(ctx context.Context) (reconcile.Result, error) {
ctx = injection.WithControllerName(ctx, c.Name())
cpNodeClaims, err := c.cp.List(ctx)
if err != nil {
return reconcile.Result{}, fmt.Errorf("listing instance types, %w", err)
}
providerIDsToCPNodeClaims := lo.SliceToMap(cpNodeClaims, func(nc *karpv1.NodeClaim) (string, *karpv1.NodeClaim) {
return nc.Status.ProviderID, nc
})
ncs := &karpv1.NodeClaimList{}
if err := c.kubeClient.List(ctx, ncs); err != nil {
return reconcile.Result{}, fmt.Errorf("listing nodeclaims, %w", err)
}
updatedNodeClaims := sets.New[string]()
var errs []error
for i := range ncs.Items {
cpNC, ok := providerIDsToCPNodeClaims[ncs.Items[i].Status.ProviderID]
if !ok {
continue
}
updated, err := c.syncCapacityType(ctx, cpNC.Labels[karpv1.CapacityTypeLabelKey], &ncs.Items[i])
if err != nil {
errs = append(errs, err)
}
if updated {
updatedNodeClaims.Insert(ncs.Items[i].Name)
}
}
if len(updatedNodeClaims) != 0 {
log.FromContext(ctx).WithValues("NodeClaims", lo.Map(updatedNodeClaims.UnsortedList(), func(name string, _ int) klog.ObjectRef {
return klog.KRef("", name)
})).V(1).Info("updated capacity type for nodeclaims")
}
if len(errs) != 0 {
if lo.EveryBy(errs, func(err error) bool { return errors.IsConflict(err) }) {
return reconcile.Result{Requeue: true}, nil
}
return reconcile.Result{}, multierr.Combine(errs...)
}
return reconcile.Result{RequeueAfter: time.Minute}, nil
}