diff --git a/controllers/chaosengine_controller.go b/controllers/chaosengine_controller.go index 1b311cf0c..f50de66b6 100644 --- a/controllers/chaosengine_controller.go +++ b/controllers/chaosengine_controller.go @@ -266,6 +266,10 @@ func engineRunnerPod(runnerPod *podEngineRunner) error { if err := runnerPod.r.Client.Get(context.TODO(), types.NamespacedName{Name: runnerPod.engineRunner.Name, Namespace: runnerPod.engineRunner.Namespace}, runnerPod.pod); err != nil && k8serrors.IsNotFound(err) { runnerPod.reqLogger.Info("Creating a new engineRunner Pod", "Pod.Namespace", runnerPod.engineRunner.Namespace, "Pod.Name", runnerPod.engineRunner.Name) if err = runnerPod.r.Client.Create(context.TODO(), runnerPod.engineRunner); err != nil { + if k8serrors.IsAlreadyExists(err) { + runnerPod.reqLogger.Info("Skip reconcile: engineRunner Pod already exists", "Pod.Namespace", runnerPod.pod.Namespace, "Pod.Name", runnerPod.pod.Name) + return nil + } return err } @@ -595,7 +599,7 @@ func (r *ChaosEngineReconciler) initEngine(engine *chaosTypes.EngineInfo) error // reconcileForCreationAndRunning reconciles for Chaos execution of Chaos Engine func (r *ChaosEngineReconciler) reconcileForCreationAndRunning(engine *chaosTypes.EngineInfo, reqLogger logr.Logger) (reconcile.Result, error) { - if err := r.validateAnnontatedApplication(engine); err != nil { + if err := r.validateAnnotatedApplication(engine); err != nil { if stopEngineWithAnnotationErrorMessage := r.updateEngineState(engine, litmuschaosv1alpha1.EngineStateStop); stopEngineWithAnnotationErrorMessage != nil { r.Recorder.Eventf(engine.Instance, corev1.EventTypeWarning, "ChaosResourcesOperationFailed", "(chaos stop) Unable to update chaosengine") return reconcile.Result{}, fmt.Errorf("unable to Update Engine State: %v", err) @@ -611,6 +615,9 @@ func (r *ChaosEngineReconciler) reconcileForCreationAndRunning(engine *chaosType isCompleted, err := r.checkRunnerContainerCompletedStatus(engine) if err != nil { + if k8serrors.IsNotFound(err) { + return reconcile.Result{Requeue: true}, nil + } r.Recorder.Eventf(engine.Instance, corev1.EventTypeWarning, "ChaosResourcesOperationFailed", "(chaos running) Unable to check chaos status") return reconcile.Result{}, err } @@ -643,7 +650,7 @@ func startReqLogger(request reconcile.Request) logr.Logger { return reqLogger } -func (r *ChaosEngineReconciler) validateAnnontatedApplication(engine *chaosTypes.EngineInfo) error { +func (r *ChaosEngineReconciler) validateAnnotatedApplication(engine *chaosTypes.EngineInfo) error { // Get the image for runner pod from chaosengine spec,operator env or default values. setChaosResourceImage(engine) @@ -746,6 +753,9 @@ func (r *ChaosEngineReconciler) updateChaosResult(engine *chaosTypes.EngineInfo, for _, result := range chaosresultList.Items { if result.Labels["chaosUID"] == string(engine.Instance.UID) { + if len(result.ObjectMeta.Annotations) == 0 { + return nil + } targetsList, annotations := getChaosStatus(result) result.Status.History.Targets = targetsList result.ObjectMeta.Annotations = annotations diff --git a/controllers/chaosengine_controller_test.go b/controllers/chaosengine_controller_test.go index 9a40d1823..94b10dd9e 100644 --- a/controllers/chaosengine_controller_test.go +++ b/controllers/chaosengine_controller_test.go @@ -423,7 +423,7 @@ func TestValidateAnnontatedApplication(t *testing.T) { if err != nil { fmt.Printf("Unable to create engine: %v", err) } - err = r.validateAnnontatedApplication(&mock.engine) + err = r.validateAnnotatedApplication(&mock.engine) if mock.isErr && err == nil { t.Fatalf("Test %q failed: expected error not to be nil", name) }