Skip to content

Commit

Permalink
merge create and update organizations (#233)
Browse files Browse the repository at this point in the history
  • Loading branch information
QuentinBisson authored Jan 21, 2025
1 parent 5e8cb61 commit 10fbec0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 39 deletions.
13 changes: 3 additions & 10 deletions internal/controller/grafanaorganization_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ func (r GrafanaOrganizationReconciler) configureSharedOrg(ctx context.Context) e
sharedOrg := grafana.SharedOrg

logger.Info("configuring shared organization")
if err := grafana.UpdateOrganization(ctx, r.GrafanaAPI, &sharedOrg); err != nil {
if err := grafana.UpsertOrganization(ctx, r.GrafanaAPI, &sharedOrg); err != nil {
logger.Error(err, "failed to rename shared org")
return errors.WithStack(err)
}
Expand Down Expand Up @@ -222,17 +222,11 @@ func newOrganization(grafanaOrganization *v1alpha1.GrafanaOrganization) grafana.
}
}

func (r GrafanaOrganizationReconciler) configureOrganization(ctx context.Context, grafanaOrganization *v1alpha1.GrafanaOrganization) (err error) {
func (r GrafanaOrganizationReconciler) configureOrganization(ctx context.Context, grafanaOrganization *v1alpha1.GrafanaOrganization) error {
logger := log.FromContext(ctx)
// Create or update organization in Grafana
var organization = newOrganization(grafanaOrganization)
if organization.ID == 0 {
// if the CR doesn't have an orgID, create the organization in Grafana
err = grafana.CreateOrganization(ctx, r.GrafanaAPI, &organization)
} else {
err = grafana.UpdateOrganization(ctx, r.GrafanaAPI, &organization)
}

err := grafana.UpsertOrganization(ctx, r.GrafanaAPI, &organization)
if err != nil {
return errors.WithStack(err)
}
Expand All @@ -259,7 +253,6 @@ func (r GrafanaOrganizationReconciler) configureDatasources(ctx context.Context,

// Create or update organization in Grafana
var organization = newOrganization(grafanaOrganization)

datasources, err := grafana.ConfigureDefaultDatasources(ctx, r.GrafanaAPI, organization)
if err != nil {
return errors.WithStack(err)
Expand Down
46 changes: 17 additions & 29 deletions pkg/grafana/grafana.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,38 +69,31 @@ var defaultDatasources = []Datasource{
},
}

func CreateOrganization(ctx context.Context, grafanaAPI *client.GrafanaHTTPAPI, organization *Organization) error {
func UpsertOrganization(ctx context.Context, grafanaAPI *client.GrafanaHTTPAPI, organization *Organization) error {
logger := log.FromContext(ctx)

logger.Info("creating organization")
err := assertNameIsAvailable(ctx, grafanaAPI, organization)
if err != nil {
return errors.WithStack(err)
}

createdOrg, err := grafanaAPI.Orgs.CreateOrg(&models.CreateOrgCommand{
Name: organization.Name,
})
if err != nil {
logger.Error(err, "failed to create organization")
return errors.WithStack(err)
}
logger.Info("created organization")

organization.ID = *createdOrg.Payload.OrgID
return nil
}

func UpdateOrganization(ctx context.Context, grafanaAPI *client.GrafanaHTTPAPI, organization *Organization) error {
logger := log.FromContext(ctx)

logger.Info("updating organization")
found, err := FindOrgByID(grafanaAPI, organization.ID)
logger.Info("upserting organization")
found, err := findOrgByID(grafanaAPI, organization.ID)
if err != nil {
if isNotFound(err) {
logger.Info("organization id not found, creating")
// If the CR orgID does not exist in Grafana, then we create the organization
return CreateOrganization(ctx, grafanaAPI, organization)
createdOrg, err := grafanaAPI.Orgs.CreateOrg(&models.CreateOrgCommand{
Name: organization.Name,
})
if err != nil {
logger.Error(err, "failed to create organization")
return errors.WithStack(err)
}
logger.Info("created organization")

organization.ID = *createdOrg.Payload.OrgID
return nil
}
logger.Error(err, fmt.Sprintf("failed to find organization with ID: %d", organization.ID))
return errors.WithStack(err)
Expand All @@ -112,11 +105,6 @@ func UpdateOrganization(ctx context.Context, grafanaAPI *client.GrafanaHTTPAPI,
return nil
}

err = assertNameIsAvailable(ctx, grafanaAPI, organization)
if err != nil {
return errors.WithStack(err)
}

// if the name of the CR is different from the name of the org in Grafana, update the name of the org in Grafana using the CR's display name.
_, err = grafanaAPI.Orgs.UpdateOrg(organization.ID, &models.UpdateOrgForm{
Name: organization.Name,
Expand All @@ -135,7 +123,7 @@ func DeleteOrganization(ctx context.Context, grafanaAPI *client.GrafanaHTTPAPI,
logger := log.FromContext(ctx)

logger.Info("deleting organization")
_, err := FindOrgByID(grafanaAPI, organization.ID)
_, err := findOrgByID(grafanaAPI, organization.ID)
if err != nil {
if isNotFound(err) {
logger.Info("organization id was not found, skipping deletion")
Expand Down Expand Up @@ -312,8 +300,8 @@ func FindOrgByName(grafanaAPI *client.GrafanaHTTPAPI, name string) (*Organizatio
}, nil
}

// FindOrgByID is a wrapper function used to find a Grafana organization by its id
func FindOrgByID(grafanaAPI *client.GrafanaHTTPAPI, orgID int64) (*Organization, error) {
// findOrgByID is a wrapper function used to find a Grafana organization by its id
func findOrgByID(grafanaAPI *client.GrafanaHTTPAPI, orgID int64) (*Organization, error) {
organization, err := grafanaAPI.Orgs.GetOrgByID(orgID)
if err != nil {
return nil, errors.WithStack(err)
Expand Down

0 comments on commit 10fbec0

Please sign in to comment.