diff --git a/components/notebook-controller/controllers/notebook_controller.go b/components/notebook-controller/controllers/notebook_controller.go index 0cd64e89..745afa4d 100644 --- a/components/notebook-controller/controllers/notebook_controller.go +++ b/components/notebook-controller/controllers/notebook_controller.go @@ -206,23 +206,42 @@ func (r *NotebookReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { } else { // Got the pod podFound = true - if len(pod.Status.ContainerStatuses) > 0 && - pod.Status.ContainerStatuses[0].State != instance.Status.ContainerState { - log.Info("Updating container state: ", "namespace", instance.Namespace, "name", instance.Name) - cs := pod.Status.ContainerStatuses[0].State - instance.Status.ContainerState = cs - oldConditions := instance.Status.Conditions - newCondition := getNextCondition(cs) - // Append new condition - if len(oldConditions) == 0 || oldConditions[0].Type != newCondition.Type || - oldConditions[0].Reason != newCondition.Reason || - oldConditions[0].Message != newCondition.Message { - log.Info("Appending to conditions: ", "namespace", instance.Namespace, "name", instance.Name, "type", newCondition.Type, "reason", newCondition.Reason, "message", newCondition.Message) - instance.Status.Conditions = append([]v1beta1.NotebookCondition{newCondition}, oldConditions...) + + // Update status of the CR using the ContainerState of + // the container that has the same name as the CR. + // If no container of same name is found, the state of the CR is not updated. + if len(pod.Status.ContainerStatuses) > 0 { + notebookContainerFound := false + for i := range pod.Status.ContainerStatuses { + if pod.Status.ContainerStatuses[i].Name != instance.Name { + continue + } + if pod.Status.ContainerStatuses[i].State == instance.Status.ContainerState { + continue + } + + log.Info("Updating Notebook CR state: ", "namespace", instance.Namespace, "name", instance.Name) + cs := pod.Status.ContainerStatuses[i].State + instance.Status.ContainerState = cs + oldConditions := instance.Status.Conditions + newCondition := getNextCondition(cs) + // Append new condition + if len(oldConditions) == 0 || oldConditions[0].Type != newCondition.Type || + oldConditions[0].Reason != newCondition.Reason || + oldConditions[0].Message != newCondition.Message { + log.Info("Appending to conditions: ", "namespace", instance.Namespace, "name", instance.Name, "type", newCondition.Type, "reason", newCondition.Reason, "message", newCondition.Message) + instance.Status.Conditions = append([]v1beta1.NotebookCondition{newCondition}, oldConditions...) + } + err = r.Status().Update(ctx, instance) + if err != nil { + return ctrl.Result{}, err + } + notebookContainerFound = true + break + } - err = r.Status().Update(ctx, instance) - if err != nil { - return ctrl.Result{}, err + if !notebookContainerFound { + log.Error(nil, "Could not find the Notebook container, will not update the status of the CR. No container has the same name as the CR.", "CR name:", instance.Name) } } }