controllers/qualityprofile/chain/create_qualityprofile.go (37 lines of code) (raw):
package chain
import (
"context"
"fmt"
ctrl "sigs.k8s.io/controller-runtime"
sonarApi "github.com/epam/edp-sonar-operator/api/v1alpha1"
"github.com/epam/edp-sonar-operator/pkg/client/sonar"
)
// CreateQualityProfile is a handler for creating quality profile.
type CreateQualityProfile struct {
sonarApiClient sonar.QualityProfileClient
}
// NewCreateQualityProfile creates an instance of CreateQualityProfile handler.
func NewCreateQualityProfile(sonarApiClient sonar.QualityProfileClient) *CreateQualityProfile {
return &CreateQualityProfile{sonarApiClient: sonarApiClient}
}
// ServeRequest implements the logic of creating quality profile.
func (h CreateQualityProfile) ServeRequest(ctx context.Context, profile *sonarApi.SonarQualityProfile) error {
log := ctrl.LoggerFrom(ctx).WithValues("name", profile.Spec.Name)
log.Info("Start creating quality profile")
sonarProfile, err := h.sonarApiClient.GetQualityProfile(ctx, profile.Spec.Name)
if err != nil {
if !sonar.IsErrNotFound(err) {
return fmt.Errorf("failed to get quality profile: %w", err)
}
log.Info("Quality profile doesn't exist, creating new one")
if sonarProfile, err = h.sonarApiClient.CreateQualityProfile(ctx, profile.Spec.Name, profile.Spec.Language); err != nil {
return fmt.Errorf("failed to create quality profile: %w", err)
}
log.Info("Quality profile has been created")
}
if profile.Spec.Default && profile.Spec.Default != sonarProfile.IsDefault {
log.Info("Updating default quality profile")
if err = h.sonarApiClient.SetAsDefaultQualityProfile(ctx, profile.Spec.Name, profile.Spec.Language); err != nil {
return fmt.Errorf("failed to set default quality profile: %w", err)
}
log.Info("Default quality profile has been updated")
}
return nil
}