diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go index 0a955d7904d..d02d8e315f2 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler.go @@ -111,6 +111,7 @@ func (c *ChaosExperimentHandler) SaveChaosExperiment(ctx context.Context, reques if err != nil { return "", err } + // Updating the existing experiment if wfDetails.ExperimentID == request.ID { logrus.WithFields(logFields).Info("request received to update k8s chaos experiment") @@ -121,6 +122,13 @@ func (c *ChaosExperimentHandler) SaveChaosExperiment(ctx context.Context, reques } } + // Gitops Update + err = c.gitOpsService.UpsertExperimentToGit(ctx, projectID, newRequest) + if err != nil { + logrus.WithFields(logFields).Errorf("failed to push the experiment manifest to Git., err: %v", err) + return "", err + } + err = c.chaosExperimentService.ProcessExperimentUpdate(newRequest, username, wfType, revID, false, projectID, nil) if err != nil { return "", err @@ -128,7 +136,6 @@ func (c *ChaosExperimentHandler) SaveChaosExperiment(ctx context.Context, reques return "experiment updated successfully", nil } - err = c.validateDuplicateExperimentName(ctx, projectID, request.Name) if err != nil { return "", err @@ -137,6 +144,13 @@ func (c *ChaosExperimentHandler) SaveChaosExperiment(ctx context.Context, reques // Saving chaos experiment in the DB logrus.WithFields(logFields).Info("request received to save k8s chaos experiment") + // Gitops Update + err = c.gitOpsService.UpsertExperimentToGit(ctx, projectID, newRequest) + if err != nil { + logrus.WithFields(logFields).Errorf("failed to push the experiment manifest to Git, err: %v", err) + return "", err + } + err = c.chaosExperimentService.ProcessExperimentCreation(ctx, newRequest, username, projectID, wfType, revID, nil) if err != nil { return "", err @@ -160,6 +174,12 @@ func (c *ChaosExperimentHandler) CreateChaosExperiment(ctx context.Context, requ return nil, err } + // Gitops Update + err = c.gitOpsService.UpsertExperimentToGit(ctx, projectID, newRequest) + if err != nil { + return nil, err + } + tkn := ctx.Value(authorization.AuthKey).(string) uid, err := authorization.GetUsername(tkn) err = c.chaosExperimentService.ProcessExperimentCreation(context.TODO(), newRequest, uid, projectID, wfType, revID, r) @@ -223,6 +243,17 @@ func (c *ChaosExperimentHandler) DeleteChaosExperiment(ctx context.Context, proj workflowRun.IsRemoved = true + wf := model.ChaosExperimentRequest{ + ExperimentID: &workflow.ExperimentID, + ExperimentName: workflow.Name, + } + + err = c.gitOpsService.DeleteExperimentFromGit(ctx, projectID, &wf) + if err != nil { + logrus.Errorf("Failed to delete experiment manifest from git, err: %v", err) + return false, err + } + err = c.chaosExperimentRunService.ProcessExperimentRunDelete(ctx, query, workflowRunID, workflowRun, workflow, uid, r) if err != nil { return false, err @@ -249,6 +280,13 @@ func (c *ChaosExperimentHandler) UpdateChaosExperiment(ctx context.Context, requ } tkn := ctx.Value(authorization.AuthKey).(string) uid, err := authorization.GetUsername(tkn) + + err = c.gitOpsService.UpsertExperimentToGit(ctx, projectID, newRequest) + if err != nil { + logrus.Errorf("failed to push experiment manifest to git, err: %v", err) + return nil, err + } + err = c.chaosExperimentService.ProcessExperimentUpdate(newRequest, uid, wfType, revID, false, projectID, r) if err != nil { return nil, err diff --git a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go index 7fe5c27a2e6..c5bb2995425 100644 --- a/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go +++ b/chaoscenter/graphql/server/pkg/chaos_experiment/handler/handler_test.go @@ -117,6 +117,7 @@ func TestChaosExperimentHandler_SaveChaosExperiment(t *testing.T) { mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, request2, mock.Anything, mock.Anything).Return(request2, &experimentType, nil).Once() mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", request2, mock.Anything, mock.Anything, mock.Anything, false, mock.Anything, mock.Anything).Return(nil).Once() + mockServices.GitOpsService.On("UpsertExperimentToGit", ctx, mock.Anything, request2).Return(nil).Once() }, wantErr: false, }, @@ -195,6 +196,8 @@ func TestChaosExperimentHandler_SaveChaosExperiment(t *testing.T) { mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, request2, mock.Anything, mock.Anything).Return(request2, &experimentType, nil).Once() mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", request2, mock.Anything, mock.Anything, mock.Anything, false, mock.Anything, mock.Anything).Return(nil).Once() + + mockServices.GitOpsService.On("UpsertExperimentToGit", ctx, mock.Anything, request2).Return(nil).Once() }, }, } @@ -272,6 +275,7 @@ func TestChaosExperimentHandler_DeleteChaosExperiment(t *testing.T) { mockServices.MongodbOperator.On("Get", mock.Anything, mongodb.ChaosExperimentRunsCollection, mock.Anything).Return(singleResult, nil).Once() mockServices.ChaosExperimentRunService.On("ProcessExperimentRunDelete", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil).Once() + mockServices.GitOpsService.On("DeleteExperimentFromGit", ctx, mock.Anything, mock.Anything).Return(nil).Once() }, wantErr: false, }, @@ -321,6 +325,7 @@ func TestChaosExperimentHandler_DeleteChaosExperiment(t *testing.T) { mockServices.MongodbOperator.On("Get", mock.Anything, mongodb.ChaosExperimentCollection, mock.Anything).Return(singleResult, nil).Once() mockServices.MongodbOperator.On("Get", mock.Anything, mongodb.ChaosExperimentRunsCollection, mock.Anything).Return(singleResult, nil).Once() mockServices.ChaosExperimentRunService.On("ProcessExperimentRunDelete", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("")).Once() + mockServices.GitOpsService.On("DeleteExperimentFromGit", ctx, mock.Anything, mock.Anything).Return(nil).Once() }, wantErr: true, }, @@ -374,6 +379,8 @@ func TestChaosExperimentHandler_UpdateChaosExperiment(t *testing.T) { mockServices.MongodbOperator.On("CountDocuments", ctx, mongodb.ChaosExperimentCollection, mock.Anything, mock.Anything).Return(int64(0), nil).Once() mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, nil).Once() mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil).Once() + mockServices.GitOpsService.On("UpsertExperimentToGit", ctx, mock.Anything, request).Return(nil).Once() + }, wantErr: false, }, @@ -412,6 +419,8 @@ func TestChaosExperimentHandler_UpdateChaosExperiment(t *testing.T) { mockServices.ChaosExperimentService.On("ProcessExperiment", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(request, &experimentType, nil).Once() mockServices.ChaosExperimentService.On("ProcessExperimentUpdate", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(errors.New("experiment update failed")).Once() + + mockServices.GitOpsService.On("UpsertExperimentToGit", ctx, mock.Anything, request).Return(nil).Once() }, wantErr: true, },