mirror of
https://github.com/lukaszraczylo/jobs-manager-operator.git
synced 2026-06-08 22:49:28 +00:00
72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
package controllers
|
|
|
|
import (
|
|
corev1 "k8s.io/api/core/v1"
|
|
)
|
|
|
|
func (cp *connPackage) checkGroupsStatus() {
|
|
groupsTotal := len(cp.mj.Spec.Groups)
|
|
totalJobs := 0
|
|
completedJobs := 0
|
|
didAnyJobAbort := false
|
|
changePresent := false
|
|
groupsCompleted := 0
|
|
|
|
// Check if all groups have completed and set ManagedJob status to "succeeded" if so.
|
|
if cp.mj.Spec.Status != ExecutionStatusSucceeded && groupsTotal > 0 {
|
|
for _, group := range cp.mj.Spec.Groups {
|
|
groupJobsTotal := len(group.Jobs)
|
|
groupJobsCompleted := 0
|
|
|
|
for _, job := range group.Jobs {
|
|
if job.Status == ExecutionStatusSucceeded {
|
|
groupJobsCompleted++
|
|
completedJobs++
|
|
}
|
|
if job.Status == ExecutionStatusFailed || job.Status == ExecutionStatusAborted {
|
|
didAnyJobAbort = true
|
|
}
|
|
totalJobs++
|
|
}
|
|
|
|
if groupJobsTotal == groupJobsCompleted {
|
|
// All the jobs in the group are completed.
|
|
if group.Status != ExecutionStatusSucceeded {
|
|
group.Status = ExecutionStatusSucceeded
|
|
changePresent = true
|
|
}
|
|
groupsCompleted++
|
|
}
|
|
}
|
|
}
|
|
|
|
if groupsTotal == groupsCompleted && cp.mj.Spec.Status != ExecutionStatusSucceeded && cp.mj.Status != ExecutionStatusSucceeded {
|
|
cp.mj.Spec.Status = ExecutionStatusSucceeded
|
|
changePresent = true
|
|
cp.r.Recorder.Eventf(cp.mj, corev1.EventTypeNormal, "Completed", "All jobs completed")
|
|
}
|
|
|
|
// Update status if any job aborted.
|
|
if didAnyJobAbort && cp.mj.Spec.Status != ExecutionStatusFailed {
|
|
cp.mj.Spec.Status = ExecutionStatusFailed
|
|
changePresent = true
|
|
cp.r.Recorder.Eventf(cp.mj, corev1.EventTypeNormal, "Aborted", "One of the jobs aborted")
|
|
}
|
|
|
|
// Update status to "running" if not already set.
|
|
// if cp.mj.Spec.Status != ExecutionStatusRunning && cp.mj.Spec.Status != ExecutionStatusSucceeded {
|
|
// cp.mj.Spec.Status = ExecutionStatusRunning
|
|
// cp.mj.Status = ExecutionStatusRunning
|
|
// changePresent = true
|
|
// }
|
|
|
|
// Check if the ManagedJob status has changed.
|
|
statusChanged := cp.mj.Spec.Status != cp.mj.Status
|
|
|
|
// Update status and send event if it has changed.
|
|
if statusChanged || changePresent {
|
|
cp.updateCRDStatusDirectly()
|
|
// cp.r.Client.Status().Update(cp.ctx, cp.mj)
|
|
}
|
|
}
|