Skip to content

Commit

Permalink
Fix missing organization SSO settings (#246)
Browse files Browse the repository at this point in the history
* User best effort approach in Grafana Organization controller

This involves processing all different steps and only returning the last
error if any. This avoid a failing steps to prevents other steps to be
processed.
  • Loading branch information
TheoBrigitte authored Feb 6, 2025
1 parent 4c704fd commit 46dad51
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 7 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed

- improved run-local port-forward management
- Fix missing SSO settings in organizations

### Fixed

Expand Down
23 changes: 16 additions & 7 deletions internal/controller/grafanaorganization_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,24 +160,30 @@ func (r GrafanaOrganizationReconciler) reconcileCreate(ctx context.Context, graf
return ctrl.Result{}, nil
}

var lastError error

// Configure the shared organization in Grafana
if err := r.configureSharedOrg(ctx); err != nil {
return ctrl.Result{}, errors.WithStack(err)
lastError = err
}

// Configure the organization in Grafana
if err := r.configureOrganization(ctx, grafanaOrganization); err != nil {
return ctrl.Result{}, errors.WithStack(err)
lastError = err
}

// Update the datasources in the CR's status
if err := r.configureDatasources(ctx, grafanaOrganization); err != nil {
return ctrl.Result{}, errors.WithStack(err)
lastError = err
}

// Configure Grafana RBAC
if err := r.configureGrafanaSSO(ctx); err != nil {
return ctrl.Result{}, errors.WithStack(err)
lastError = err
}

if lastError != nil {
return ctrl.Result{}, errors.WithStack(lastError)
}

return ctrl.Result{}, nil
Expand All @@ -190,12 +196,12 @@ func (r GrafanaOrganizationReconciler) configureSharedOrg(ctx context.Context) e

logger.Info("configuring shared organization")
if err := grafana.UpsertOrganization(ctx, r.GrafanaAPI, &sharedOrg); err != nil {
logger.Error(err, "failed to rename shared org")
logger.Error(err, "failed to upsert shared org")
return errors.WithStack(err)
}

if _, err := grafana.ConfigureDefaultDatasources(ctx, r.GrafanaAPI, sharedOrg); err != nil {
logger.Info("failed to configure datasources for shared org")
logger.Error(err, "failed to configure datasources for shared org")
return errors.WithStack(err)
}

Expand Down Expand Up @@ -225,6 +231,7 @@ func (r GrafanaOrganizationReconciler) configureOrganization(ctx context.Context
var organization = newOrganization(grafanaOrganization)
err := grafana.UpsertOrganization(ctx, r.GrafanaAPI, &organization)
if err != nil {
logger.Error(err, "failed to upsert grafanaOrganization")
return errors.WithStack(err)
}

Expand Down Expand Up @@ -252,6 +259,7 @@ func (r GrafanaOrganizationReconciler) configureDatasources(ctx context.Context,
var organization = newOrganization(grafanaOrganization)
datasources, err := grafana.ConfigureDefaultDatasources(ctx, r.GrafanaAPI, organization)
if err != nil {
logger.Error(err, "failed to configure the grafanaOrganization with default datasources")
return errors.WithStack(err)
}

Expand Down Expand Up @@ -331,7 +339,7 @@ func (r *GrafanaOrganizationReconciler) configureGrafanaSSO(ctx context.Context)
organizationList := v1alpha1.GrafanaOrganizationList{}
err := r.Client.List(ctx, &organizationList)
if err != nil {
logger.Error(err, "failed to list grafana organizations.")
logger.Error(err, "failed to list grafana organizations")
return errors.WithStack(err)
}

Expand All @@ -342,6 +350,7 @@ func (r *GrafanaOrganizationReconciler) configureGrafanaSSO(ctx context.Context)
}
err = grafana.ConfigureSSOSettings(ctx, r.GrafanaAPI, organizations)
if err != nil {
logger.Error(err, "failed to configure grafanaOrganization with SSO settings")
return errors.WithStack(err)
}

Expand Down

0 comments on commit 46dad51

Please sign in to comment.