controllers/group/chain/create_group.go (43 lines of code) (raw):

package chain import ( "context" ctrl "sigs.k8s.io/controller-runtime" sonarApi "github.com/epam/edp-sonar-operator/api/v1alpha1" "github.com/epam/edp-sonar-operator/pkg/client/sonar" ) // CreateGroup is a handler for creating group. type CreateGroup struct { sonarApiClient sonar.GroupInterface } // NewCreateGroup creates an instance of CreateGroup handler. func NewCreateGroup(sonarApiClient sonar.GroupInterface) *CreateGroup { return &CreateGroup{sonarApiClient: sonarApiClient} } // ServeRequest implements the logic of creating group. func (c CreateGroup) ServeRequest(ctx context.Context, group *sonarApi.SonarGroup) error { log := ctrl.LoggerFrom(ctx).WithValues("name", group.Spec.Name) log.Info("Start creating group") sonarGroup, err := c.sonarApiClient.GetGroup(ctx, group.Spec.Name) if err != nil { if !sonar.IsErrNotFound(err) { return err } log.Info("Group doesn't exist, creating new one") if err = c.sonarApiClient.CreateGroup(ctx, &sonar.Group{ Name: group.Spec.Name, Description: group.Spec.Description, }); err != nil { return err } log.Info("Group has been created") return nil } if group.Spec.Description != sonarGroup.Description { log.Info("Updating group") if err = c.sonarApiClient.UpdateGroup(ctx, group.Spec.Name, &sonar.Group{ Name: group.Spec.Name, Description: group.Spec.Description, }); err != nil { return err } log.Info("Group has been updated") } return nil }