Merge pull request #2497 from gdsoumya/gitops-updates
Added edit gitops config feature and fixed auth server bug
This commit is contained in:
		
						commit
						2d2ea63899
					
				|  | @ -15,4 +15,4 @@ require ( | |||
| 	golang.org/x/net v0.0.0-20200202094626-16171245cfb2 // indirect | ||||
| 	golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d | ||||
| 	gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect | ||||
| ) | ||||
| ) | ||||
|  |  | |||
|  | @ -45,6 +45,7 @@ const ( | |||
| var DefaultUser = &UserCredentials{ | ||||
| 	UserName: types.DefaultUserName, | ||||
| 	Password: types.DefaultUserPassword, | ||||
| 	Role:     RoleAdmin, | ||||
| } | ||||
| 
 | ||||
| //PublicUserInfo displays the information of the user that is publicly available
 | ||||
|  |  | |||
|  | @ -600,7 +600,6 @@ github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z | |||
| github.com/litmuschaos/chaos-operator v0.0.0-20210126054859-85bb0ad85bfa h1:lBEvg10ZPndmBUMtVaMRVCqeKnKYmjtRSg2SF4iTQ7o= | ||||
| github.com/litmuschaos/chaos-operator v0.0.0-20210126054859-85bb0ad85bfa/go.mod h1:Z2GpYjqXwFd8bx+kv58YEQFxynx1v9PMGCGTQFRVnFQ= | ||||
| github.com/litmuschaos/elves v0.0.0-20201107015738-552d74669e3c/go.mod h1:DsbHGNUq/78NZozWVVI9Q6eBei4I+JjlkkD5aibJ3MQ= | ||||
| github.com/litmuschaos/litmus v0.0.0-20210302122130-471654357d2b h1:BlwWoDHEvYh8RvBBWOmPrA6RgAs+d6ujxie8RU5ZgPk= | ||||
| github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= | ||||
| github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= | ||||
| github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f/go.mod h1:JpH9J1c9oX6otFSgdUHwUBUizmKlrMjxWnIAjff4m04= | ||||
|  |  | |||
|  | @ -218,6 +218,7 @@ type ComplexityRoot struct { | |||
| 		UpdateChaosWorkflow func(childComplexity int, input *model.ChaosWorkFlowInput) int | ||||
| 		UpdateDashboard     func(childComplexity int, dashboard *model.UpdataDBInput) int | ||||
| 		UpdateDataSource    func(childComplexity int, datasource model.DSInput) int | ||||
| 		UpdateGitOps        func(childComplexity int, config model.GitConfig) int | ||||
| 		UpdateMyHub         func(childComplexity int, myhubInput model.UpdateMyHub, projectID string) int | ||||
| 		UpdatePanel         func(childComplexity int, panelInput []*model.Panel) int | ||||
| 		UpdateUser          func(childComplexity int, user model.UpdateUserInput) int | ||||
|  | @ -501,6 +502,7 @@ type MutationResolver interface { | |||
| 	GitopsNotifer(ctx context.Context, clusterInfo model.ClusterIdentity, workflowID string) (string, error) | ||||
| 	EnableGitOps(ctx context.Context, config model.GitConfig) (bool, error) | ||||
| 	DisableGitOps(ctx context.Context, projectID string) (bool, error) | ||||
| 	UpdateGitOps(ctx context.Context, config model.GitConfig) (bool, error) | ||||
| 	CreateDataSource(ctx context.Context, datasource *model.DSInput) (*model.DSResponse, error) | ||||
| 	CreateDashBoard(ctx context.Context, dashboard *model.CreateDBInput) (string, error) | ||||
| 	UpdateDataSource(ctx context.Context, datasource model.DSInput) (*model.DSResponse, error) | ||||
|  | @ -1543,6 +1545,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in | |||
| 
 | ||||
| 		return e.complexity.Mutation.UpdateDataSource(childComplexity, args["datasource"].(model.DSInput)), true | ||||
| 
 | ||||
| 	case "Mutation.updateGitOps": | ||||
| 		if e.complexity.Mutation.UpdateGitOps == nil { | ||||
| 			break | ||||
| 		} | ||||
| 
 | ||||
| 		args, err := ec.field_Mutation_updateGitOps_args(context.TODO(), rawArgs) | ||||
| 		if err != nil { | ||||
| 			return 0, false | ||||
| 		} | ||||
| 
 | ||||
| 		return e.complexity.Mutation.UpdateGitOps(childComplexity, args["config"].(model.GitConfig)), true | ||||
| 
 | ||||
| 	case "Mutation.updateMyHub": | ||||
| 		if e.complexity.Mutation.UpdateMyHub == nil { | ||||
| 			break | ||||
|  | @ -3664,8 +3678,7 @@ type Mutation { | |||
|   userClusterReg(clusterInput: ClusterInput!): clusterRegResponse! @authorized | ||||
| 
 | ||||
|   #It is used to create chaosworkflow | ||||
|   createChaosWorkFlow(input: ChaosWorkFlowInput!): ChaosWorkFlowResponse! | ||||
|     @authorized | ||||
|   createChaosWorkFlow(input: ChaosWorkFlowInput!): ChaosWorkFlowResponse! @authorized | ||||
| 
 | ||||
|   reRunChaosWorkFlow(workflowID: String!): String! @authorized | ||||
| 
 | ||||
|  | @ -3706,8 +3719,7 @@ type Mutation { | |||
| 
 | ||||
|   syncHub(id: ID!): [MyHubStatus!]! @authorized | ||||
| 
 | ||||
|   updateChaosWorkflow(input: ChaosWorkFlowInput): ChaosWorkFlowResponse! | ||||
|     @authorized | ||||
|   updateChaosWorkflow(input: ChaosWorkFlowInput): ChaosWorkFlowResponse! @authorized | ||||
| 
 | ||||
|   deleteClusterReg(cluster_id: String!): String! @authorized | ||||
| 
 | ||||
|  | @ -3725,6 +3737,8 @@ type Mutation { | |||
| 
 | ||||
|   disableGitOps(project_id: String!): Boolean! @authorized | ||||
| 
 | ||||
|   updateGitOps(config: GitConfig!): Boolean! @authorized | ||||
| 
 | ||||
|   # Analytics | ||||
| 
 | ||||
|   createDataSource(datasource: DSInput): DSResponse @authorized | ||||
|  | @ -4207,6 +4221,20 @@ func (ec *executionContext) field_Mutation_updateDataSource_args(ctx context.Con | |||
| 	return args, nil | ||||
| } | ||||
| 
 | ||||
| func (ec *executionContext) field_Mutation_updateGitOps_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { | ||||
| 	var err error | ||||
| 	args := map[string]interface{}{} | ||||
| 	var arg0 model.GitConfig | ||||
| 	if tmp, ok := rawArgs["config"]; ok { | ||||
| 		arg0, err = ec.unmarshalNGitConfig2githubᚗcomᚋlitmuschaosᚋlitmusᚋlitmusᚑportalᚋgraphqlᚑserverᚋgraphᚋmodelᚐGitConfig(ctx, tmp) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
| 	args["config"] = arg0 | ||||
| 	return args, nil | ||||
| } | ||||
| 
 | ||||
| func (ec *executionContext) field_Mutation_updateMyHub_args(ctx context.Context, rawArgs map[string]interface{}) (map[string]interface{}, error) { | ||||
| 	var err error | ||||
| 	args := map[string]interface{}{} | ||||
|  | @ -9145,6 +9173,67 @@ func (ec *executionContext) _Mutation_disableGitOps(ctx context.Context, field g | |||
| 	return ec.marshalNBoolean2bool(ctx, field.Selections, res) | ||||
| } | ||||
| 
 | ||||
| func (ec *executionContext) _Mutation_updateGitOps(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { | ||||
| 	defer func() { | ||||
| 		if r := recover(); r != nil { | ||||
| 			ec.Error(ctx, ec.Recover(ctx, r)) | ||||
| 			ret = graphql.Null | ||||
| 		} | ||||
| 	}() | ||||
| 	fc := &graphql.FieldContext{ | ||||
| 		Object:   "Mutation", | ||||
| 		Field:    field, | ||||
| 		Args:     nil, | ||||
| 		IsMethod: true, | ||||
| 	} | ||||
| 
 | ||||
| 	ctx = graphql.WithFieldContext(ctx, fc) | ||||
| 	rawArgs := field.ArgumentMap(ec.Variables) | ||||
| 	args, err := ec.field_Mutation_updateGitOps_args(ctx, rawArgs) | ||||
| 	if err != nil { | ||||
| 		ec.Error(ctx, err) | ||||
| 		return graphql.Null | ||||
| 	} | ||||
| 	fc.Args = args | ||||
| 	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { | ||||
| 		directive0 := func(rctx context.Context) (interface{}, error) { | ||||
| 			ctx = rctx // use context from middleware stack in children
 | ||||
| 			return ec.resolvers.Mutation().UpdateGitOps(rctx, args["config"].(model.GitConfig)) | ||||
| 		} | ||||
| 		directive1 := func(ctx context.Context) (interface{}, error) { | ||||
| 			if ec.directives.Authorized == nil { | ||||
| 				return nil, errors.New("directive authorized is not implemented") | ||||
| 			} | ||||
| 			return ec.directives.Authorized(ctx, nil, directive0) | ||||
| 		} | ||||
| 
 | ||||
| 		tmp, err := directive1(rctx) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		if tmp == nil { | ||||
| 			return nil, nil | ||||
| 		} | ||||
| 		if data, ok := tmp.(bool); ok { | ||||
| 			return data, nil | ||||
| 		} | ||||
| 		return nil, fmt.Errorf(`unexpected type %T from directive, should be bool`, tmp) | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		ec.Error(ctx, err) | ||||
| 		return graphql.Null | ||||
| 	} | ||||
| 	if resTmp == nil { | ||||
| 		if !graphql.HasFieldError(ctx, fc) { | ||||
| 			ec.Errorf(ctx, "must not be null") | ||||
| 		} | ||||
| 		return graphql.Null | ||||
| 	} | ||||
| 	res := resTmp.(bool) | ||||
| 	fc.Result = res | ||||
| 	return ec.marshalNBoolean2bool(ctx, field.Selections, res) | ||||
| } | ||||
| 
 | ||||
| func (ec *executionContext) _Mutation_createDataSource(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { | ||||
| 	defer func() { | ||||
| 		if r := recover(); r != nil { | ||||
|  | @ -19323,6 +19412,11 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) | |||
| 			if out.Values[i] == graphql.Null { | ||||
| 				invalids++ | ||||
| 			} | ||||
| 		case "updateGitOps": | ||||
| 			out.Values[i] = ec._Mutation_updateGitOps(ctx, field) | ||||
| 			if out.Values[i] == graphql.Null { | ||||
| 				invalids++ | ||||
| 			} | ||||
| 		case "createDataSource": | ||||
| 			out.Values[i] = ec._Mutation_createDataSource(ctx, field) | ||||
| 		case "createDashBoard": | ||||
|  |  | |||
|  | @ -279,8 +279,7 @@ type Mutation { | |||
|   userClusterReg(clusterInput: ClusterInput!): clusterRegResponse! @authorized | ||||
| 
 | ||||
|   #It is used to create chaosworkflow | ||||
|   createChaosWorkFlow(input: ChaosWorkFlowInput!): ChaosWorkFlowResponse! | ||||
|     @authorized | ||||
|   createChaosWorkFlow(input: ChaosWorkFlowInput!): ChaosWorkFlowResponse! @authorized | ||||
| 
 | ||||
|   reRunChaosWorkFlow(workflowID: String!): String! @authorized | ||||
| 
 | ||||
|  | @ -321,8 +320,7 @@ type Mutation { | |||
| 
 | ||||
|   syncHub(id: ID!): [MyHubStatus!]! @authorized | ||||
| 
 | ||||
|   updateChaosWorkflow(input: ChaosWorkFlowInput): ChaosWorkFlowResponse! | ||||
|     @authorized | ||||
|   updateChaosWorkflow(input: ChaosWorkFlowInput): ChaosWorkFlowResponse! @authorized | ||||
| 
 | ||||
|   deleteClusterReg(cluster_id: String!): String! @authorized | ||||
| 
 | ||||
|  | @ -340,6 +338,8 @@ type Mutation { | |||
| 
 | ||||
|   disableGitOps(project_id: String!): Boolean! @authorized | ||||
| 
 | ||||
|   updateGitOps(config: GitConfig!): Boolean! @authorized | ||||
| 
 | ||||
|   # Analytics | ||||
| 
 | ||||
|   createDataSource(datasource: DSInput): DSResponse @authorized | ||||
|  |  | |||
|  | @ -146,6 +146,10 @@ func (r *mutationResolver) DisableGitOps(ctx context.Context, projectID string) | |||
| 	return gitOpsHandler.DisableGitOpsHandler(ctx, projectID) | ||||
| } | ||||
| 
 | ||||
| func (r *mutationResolver) UpdateGitOps(ctx context.Context, config model.GitConfig) (bool, error) { | ||||
| 	return gitOpsHandler.UpdateGitOpsDetailsHandler(ctx, config) | ||||
| } | ||||
| 
 | ||||
| func (r *mutationResolver) CreateDataSource(ctx context.Context, datasource *model.DSInput) (*model.DSResponse, error) { | ||||
| 	return analyticsHandler.CreateDataSource(datasource) | ||||
| } | ||||
|  |  | |||
|  | @ -37,8 +37,6 @@ func init() { | |||
| 
 | ||||
| // AddGitConfig inserts new git config for project
 | ||||
| func AddGitConfig(ctx context.Context, config *GitConfigDB) error { | ||||
| 	ctx, cancel := context.WithTimeout(backgroundContext, timeout) | ||||
| 	defer cancel() | ||||
| 	_, err := gitOpsCollection.InsertOne(ctx, config) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
|  | @ -48,8 +46,6 @@ func AddGitConfig(ctx context.Context, config *GitConfigDB) error { | |||
| 
 | ||||
| // GetGitConfig retrieves git config using project id
 | ||||
| func GetGitConfig(ctx context.Context, projectID string) (*GitConfigDB, error) { | ||||
| 	ctx, cancel := context.WithTimeout(backgroundContext, timeout) | ||||
| 	defer cancel() | ||||
| 	query := bson.M{"project_id": projectID} | ||||
| 	var res GitConfigDB | ||||
| 	err := gitOpsCollection.FindOne(ctx, query).Decode(&res) | ||||
|  | @ -65,8 +61,6 @@ func GetGitConfig(ctx context.Context, projectID string) (*GitConfigDB, error) { | |||
| 
 | ||||
| // GetAllGitConfig retrieves all git configs from db
 | ||||
| func GetAllGitConfig(ctx context.Context) ([]GitConfigDB, error) { | ||||
| 	ctx, cancel := context.WithTimeout(backgroundContext, timeout) | ||||
| 	defer cancel() | ||||
| 	query := bson.D{{}} | ||||
| 	cursor, err := gitOpsCollection.Find(ctx, query) | ||||
| 	if err != nil { | ||||
|  | @ -80,10 +74,22 @@ func GetAllGitConfig(ctx context.Context) ([]GitConfigDB, error) { | |||
| 	return configs, nil | ||||
| } | ||||
| 
 | ||||
| // ReplaceGitConfig updates git config matching the query
 | ||||
| func ReplaceGitConfig(ctx context.Context, query bson.D, update *GitConfigDB) error { | ||||
| 	updateResult, err := gitOpsCollection.ReplaceOne(ctx, query, update) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	if updateResult.MatchedCount == 0 { | ||||
| 		return errors.New("No matching git config found") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // UpdateGitConfig update git config matching the query
 | ||||
| func UpdateGitConfig(ctx context.Context, query bson.D, update bson.D) error { | ||||
| 	ctx, cancel := context.WithTimeout(backgroundContext, timeout) | ||||
| 	defer cancel() | ||||
| 	updateResult, err := gitOpsCollection.UpdateOne(ctx, query, update) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
|  | @ -98,8 +104,6 @@ func UpdateGitConfig(ctx context.Context, query bson.D, update bson.D) error { | |||
| 
 | ||||
| // DeleteGitConfig removes git config corresponding to the given project id
 | ||||
| func DeleteGitConfig(ctx context.Context, projectID string) error { | ||||
| 	ctx, cancel := context.WithTimeout(backgroundContext, timeout) | ||||
| 	defer cancel() | ||||
| 	_, err := gitOpsCollection.DeleteOne(ctx, bson.M{"project_id": projectID}) | ||||
| 
 | ||||
| 	if err != nil { | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ import ( | |||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| 
 | ||||
|  | @ -117,16 +118,30 @@ func (c GitConfig) setupGitRepo(user GitUser) error { | |||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if exists { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	// create project dir and add config if not already present
 | ||||
| 	err = os.MkdirAll(projectPath, 0755) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	gitInfo := map[string]string{"projectID": c.ProjectID, "revision": "1"} | ||||
| 	if exists { | ||||
| 		data, err := ioutil.ReadFile(projectPath + "/.info") | ||||
| 		if err != nil { | ||||
| 			return errors.New("can't read existing git info file " + err.Error()) | ||||
| 		} | ||||
| 		err = json.Unmarshal(data, &gitInfo) | ||||
| 		if err != nil { | ||||
| 			return errors.New("can't read existing git info file " + err.Error()) | ||||
| 		} | ||||
| 		newRev, err := strconv.Atoi(gitInfo["revision"]) | ||||
| 		if err != nil { | ||||
| 			return errors.New("can't read existing git info file[failed to parse revision] " + err.Error()) | ||||
| 		} | ||||
| 		gitInfo["revision"] = strconv.Itoa(newRev + 1) | ||||
| 	} else { | ||||
| 		// create project dir and add config if not already present
 | ||||
| 		err = os.MkdirAll(projectPath, 0755) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	data, err := json.Marshal(map[string]string{"projectID": c.ProjectID}) | ||||
| 	data, err := json.Marshal(gitInfo) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | @ -146,8 +161,10 @@ func (c GitConfig) setupGitRepo(user GitUser) error { | |||
| // GitClone clones the repo
 | ||||
| func (c GitConfig) GitClone() (*git.Repository, error) { | ||||
| 	// clean the local path
 | ||||
| 	os.RemoveAll(c.LocalPath) | ||||
| 
 | ||||
| 	err := os.RemoveAll(c.LocalPath) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	auth, err := c.getAuthMethod() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|  | @ -441,8 +458,7 @@ func (c GitConfig) GetLatestCommitHash() (string, error) { | |||
| } | ||||
| 
 | ||||
| // SetupGitOps clones and sets up the repo for gitops and returns the LatestCommit
 | ||||
| func SetupGitOps(user GitUser, config dbSchemaGitOps.GitConfigDB) (string, error) { | ||||
| 	gitConfig := GetGitOpsConfig(config) | ||||
| func SetupGitOps(user GitUser, gitConfig GitConfig) (string, error) { | ||||
| 	err := gitConfig.setupGitRepo(user) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
|  |  | |||
|  | @ -30,7 +30,10 @@ import ( | |||
| 	"github.com/litmuschaos/litmus/litmus-portal/graphql-server/pkg/gitops" | ||||
| ) | ||||
| 
 | ||||
| const timeout = time.Second * 5 | ||||
| const ( | ||||
| 	timeout  = time.Second * 5 | ||||
| 	tempPath = "/tmp/gitops_test/" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	gitLock           = gitops.NewGitLock() | ||||
|  | @ -54,7 +57,7 @@ func EnableGitOpsHandler(ctx context.Context, config model.GitConfig) (bool, err | |||
| 	log.Print("Enabling Gitops") | ||||
| 	gitDB := dbSchemaGitOps.GetGitConfigDB(config) | ||||
| 
 | ||||
| 	commit, err := gitops.SetupGitOps(gitops.GitUserFromContext(ctx), gitDB) | ||||
| 	commit, err := gitops.SetupGitOps(gitops.GitUserFromContext(ctx), gitops.GetGitOpsConfig(gitDB)) | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("Failed to setup GitOps : " + err.Error()) | ||||
| 	} | ||||
|  | @ -87,7 +90,7 @@ func DisableGitOpsHandler(ctx context.Context, projectID string) (bool, error) { | |||
| 	return true, nil | ||||
| } | ||||
| 
 | ||||
| // GetGitOpsDetailsHandler
 | ||||
| // GetGitOpsDetailsHandler returns the current gitops config for the requested project
 | ||||
| func GetGitOpsDetailsHandler(ctx context.Context, projectID string) (*model.GitConfigResponse, error) { | ||||
| 	gitLock.Lock(projectID, nil) | ||||
| 	defer gitLock.Unlock(projectID, nil) | ||||
|  | @ -123,6 +126,51 @@ func GetGitOpsDetailsHandler(ctx context.Context, projectID string) (*model.GitC | |||
| 	return &resp, nil | ||||
| } | ||||
| 
 | ||||
| // UpdateGitOpsDetailsHandler updates an exiting gitops config for a project
 | ||||
| func UpdateGitOpsDetailsHandler(ctx context.Context, config model.GitConfig) (bool, error) { | ||||
| 	gitLock.Lock(config.ProjectID, nil) | ||||
| 	defer gitLock.Unlock(config.ProjectID, nil) | ||||
| 
 | ||||
| 	gitLock.Lock(config.RepoURL, &config.Branch) | ||||
| 	defer gitLock.Unlock(config.RepoURL, &config.Branch) | ||||
| 
 | ||||
| 	existingConfig, err := dbOperationsGitOps.GetGitConfig(ctx, config.ProjectID) | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("Cannot get Git Config from DB : " + err.Error()) | ||||
| 	} | ||||
| 	if existingConfig == nil { | ||||
| 		return false, errors.New("GitOps Disabled ") | ||||
| 	} | ||||
| 
 | ||||
| 	log.Print("Enabling Gitops") | ||||
| 	gitDB := dbSchemaGitOps.GetGitConfigDB(config) | ||||
| 
 | ||||
| 	gitConfig := gitops.GetGitOpsConfig(gitDB) | ||||
| 	originalPath := gitConfig.LocalPath | ||||
| 	gitConfig.LocalPath = tempPath + gitConfig.ProjectID | ||||
| 	commit, err := gitops.SetupGitOps(gitops.GitUserFromContext(ctx), gitConfig) | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("Failed to setup GitOps : " + err.Error()) | ||||
| 	} | ||||
| 	gitDB.LatestCommit = commit | ||||
| 
 | ||||
| 	err = dbOperationsGitOps.ReplaceGitConfig(ctx, bson.D{{"project_id", config.ProjectID}}, &gitDB) | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("Failed to enable GitOps in DB : " + err.Error()) | ||||
| 	} | ||||
| 
 | ||||
| 	err = os.RemoveAll(originalPath) | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("Cannot remove existing repo : " + err.Error()) | ||||
| 	} | ||||
| 	err = os.Rename(gitConfig.LocalPath, originalPath) | ||||
| 	if err != nil { | ||||
| 		return false, errors.New("Cannot copy new repo : " + err.Error()) | ||||
| 	} | ||||
| 
 | ||||
| 	return true, nil | ||||
| } | ||||
| 
 | ||||
| // GitOpsNotificationHandler sends workflow run request(single run workflow only) to agent on gitops notification
 | ||||
| func GitOpsNotificationHandler(ctx context.Context, clusterInfo model.ClusterIdentity, workflowID string) (string, error) { | ||||
| 	cInfo, err := cluster.VerifyCluster(clusterInfo) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue