in pkg/controller/core/clusterqueue_controller.go [83:139]
func (r *ClusterQueueReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
var cqObj kueue.ClusterQueue
if err := r.client.Get(ctx, req.NamespacedName, &cqObj); err != nil {
// we'll ignore not-found errors, since there is nothing to do.
return ctrl.Result{}, client.IgnoreNotFound(err)
}
log := ctrl.LoggerFrom(ctx).WithValues("clusterQueue", klog.KObj(&cqObj))
ctx = ctrl.LoggerInto(ctx, log)
log.V(2).Info("Reconciling ClusterQueue")
if cqObj.ObjectMeta.DeletionTimestamp.IsZero() {
// Although we'll add the finalizer via webhook mutation now, this is still useful
// as a fallback.
if !controllerutil.ContainsFinalizer(&cqObj, kueue.ResourceInUseFinalizerName) {
controllerutil.AddFinalizer(&cqObj, kueue.ResourceInUseFinalizerName)
if err := r.client.Update(ctx, &cqObj); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
}
} else {
if !r.cache.ClusterQueueTerminating(cqObj.Name) {
r.cache.TerminateClusterQueue(cqObj.Name)
}
if controllerutil.ContainsFinalizer(&cqObj, kueue.ResourceInUseFinalizerName) {
// The clusterQueue is being deleted, remove the finalizer only if
// there are no active admitted workloads.
if r.cache.ClusterQueueEmpty(cqObj.Name) {
controllerutil.RemoveFinalizer(&cqObj, kueue.ResourceInUseFinalizerName)
if err := r.client.Update(ctx, &cqObj); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
}
return ctrl.Result{}, nil
}
}
newCQObj := cqObj.DeepCopy()
if r.cache.ClusterQueueActive(newCQObj.Name) {
msg := "Can admit new workloads"
if err := r.updateCqStatusIfChanged(ctx, newCQObj, metav1.ConditionTrue, "Ready", msg); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
} else if r.cache.ClusterQueueTerminating(newCQObj.Name) {
msg := "Can't admit new workloads; clusterQueue is terminating"
if err := r.updateCqStatusIfChanged(ctx, newCQObj, metav1.ConditionFalse, "Terminating", msg); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
} else {
msg := "Can't admit new workloads; some flavors are not found"
if err := r.updateCqStatusIfChanged(ctx, newCQObj, metav1.ConditionFalse, "FlavorNotFound", msg); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
}
return ctrl.Result{}, nil
}