103 lines
2.6 KiB
Go
103 lines
2.6 KiB
Go
package gitops
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
)
|
|
|
|
// Operator is the struct for gitOps operator
|
|
type Operator struct {
|
|
operator mongodb.MongoOperator
|
|
}
|
|
|
|
// NewGitOpsOperator returns a new instance of gitOps operator
|
|
func NewGitOpsOperator(mongodbOperator mongodb.MongoOperator) *Operator {
|
|
return &Operator{
|
|
operator: mongodbOperator,
|
|
}
|
|
}
|
|
|
|
// AddGitConfig inserts new git config for project
|
|
func (g *Operator) AddGitConfig(ctx context.Context, config *GitConfigDB) error {
|
|
err := g.operator.Create(ctx, mongodb.GitOpsCollection, config)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetGitConfig retrieves git config using project id
|
|
func (g *Operator) GetGitConfig(ctx context.Context, projectID string) (*GitConfigDB, error) {
|
|
query := bson.D{{"project_id", projectID}}
|
|
var res GitConfigDB
|
|
result, err := g.operator.Get(ctx, mongodb.GitOpsCollection, query)
|
|
err = result.Decode(&res)
|
|
if err != nil {
|
|
if err == mongo.ErrNoDocuments {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &res, nil
|
|
}
|
|
|
|
// GetAllGitConfig retrieves all git configs from db
|
|
func (g *Operator) GetAllGitConfig(ctx context.Context) ([]GitConfigDB, error) {
|
|
query := bson.D{{}}
|
|
results, err := g.operator.List(ctx, mongodb.GitOpsCollection, query)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var configs []GitConfigDB
|
|
err = results.All(ctx, &configs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return configs, nil
|
|
}
|
|
|
|
// ReplaceGitConfig updates git config matching the query
|
|
func (g *Operator) ReplaceGitConfig(ctx context.Context, query bson.D, update *GitConfigDB) error {
|
|
updateResult, err := g.operator.Replace(ctx, mongodb.GitOpsCollection, 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 (g *Operator) UpdateGitConfig(ctx context.Context, query bson.D, update bson.D) error {
|
|
updateResult, err := g.operator.Update(ctx, mongodb.GitOpsCollection, query, update)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if updateResult.MatchedCount == 0 {
|
|
return errors.New("No matching git config found")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// DeleteGitConfig removes git config corresponding to the given project id
|
|
func (g *Operator) DeleteGitConfig(ctx context.Context, projectID string) error {
|
|
query := bson.D{{"project_id", projectID}}
|
|
_, err := g.operator.Delete(ctx, mongodb.GitOpsCollection, query)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|