Skip to content

Commit 225c90b

Browse files
authored
chore(controllers): Test CR deletion, Update finalizer behaviour of Dashboard, Datasource, and Folder (#2098)
* chore: Add missing starting/skipping finalize logs * chore: Align Dashboard, Datasource and Folder finalize to always DELETE: * test: Delete CRs and reconcile, ignoring dummy-deployment errors
1 parent bb19edc commit 225c90b

7 files changed

+32
-21
lines changed

controllers/alertrulegroup_controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ func (r *GrafanaAlertRuleGroupReconciler) reconcileWithInstance(ctx context.Cont
292292

293293
func (r *GrafanaAlertRuleGroupReconciler) finalize(ctx context.Context, group *grafanav1beta1.GrafanaAlertRuleGroup) error {
294294
log := logf.FromContext(ctx)
295+
log.Info("Finalizing GrafanaAlertRuleGroup")
295296

296297
isCleanupInGrafanaRequired := true
297298

controllers/dashboard_controller.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,26 +219,24 @@ func (r *GrafanaDashboardReconciler) Reconcile(ctx context.Context, req ctrl.Req
219219

220220
func (r *GrafanaDashboardReconciler) finalize(ctx context.Context, cr *v1beta1.GrafanaDashboard) error {
221221
log := logf.FromContext(ctx)
222+
log.Info("Finalizing GrafanaDashboard")
223+
224+
uid := content.CustomUIDOrUID(cr, cr.Status.UID)
222225

223226
instances, err := GetScopedMatchingInstances(ctx, r.Client, cr)
224227
if err != nil {
225228
return fmt.Errorf("fetching instances: %w", err)
226229
}
227230

228231
for _, grafana := range instances {
229-
found, uid := grafana.Status.Dashboards.Find(cr.Namespace, cr.Name)
230-
if !found {
231-
continue
232-
}
233-
234232
grafanaClient, err := client2.NewGeneratedGrafanaClient(ctx, r.Client, &grafana)
235233
if err != nil {
236234
return fmt.Errorf("creating grafana http client: %w", err)
237235
}
238236

239237
isCleanupInGrafanaRequired := true
240238

241-
resp, err := grafanaClient.Dashboards.GetDashboardByUID(*uid)
239+
resp, err := grafanaClient.Dashboards.GetDashboardByUID(uid)
242240
if err != nil {
243241
var notFound *dashboards.GetDashboardByUIDNotFound
244242
if !errors.As(err, &notFound) {
@@ -254,7 +252,7 @@ func (r *GrafanaDashboardReconciler) finalize(ctx context.Context, cr *v1beta1.G
254252
dash = resp.GetPayload()
255253
}
256254

257-
_, err = grafanaClient.Dashboards.DeleteDashboardByUID(*uid) //nolint:errcheck
255+
_, err = grafanaClient.Dashboards.DeleteDashboardByUID(uid) //nolint:errcheck
258256
if err != nil {
259257
var notFound *dashboards.DeleteDashboardByUIDNotFound
260258
if !errors.As(err, &notFound) {

controllers/datasource_controller.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -214,28 +214,28 @@ func (r *GrafanaDatasourceReconciler) deleteOldDatasource(ctx context.Context, c
214214
}
215215

216216
func (r *GrafanaDatasourceReconciler) finalize(ctx context.Context, cr *v1beta1.GrafanaDatasource) error {
217+
log := logf.FromContext(ctx)
218+
log.Info("Finalizing GrafanaDatasource")
219+
217220
instances, err := GetScopedMatchingInstances(ctx, r.Client, cr)
218221
if err != nil {
219222
return fmt.Errorf("fetching instances: %w", err)
220223
}
221224

222-
for _, grafana := range instances {
223-
found, uid := grafana.Status.Datasources.Find(cr.Namespace, cr.Name)
224-
if !found {
225-
continue
226-
}
225+
uid := cr.CustomUIDOrUID()
227226

227+
for _, grafana := range instances {
228228
grafanaClient, err := client2.NewGeneratedGrafanaClient(ctx, r.Client, &grafana)
229229
if err != nil {
230230
return err
231231
}
232232

233-
_, err = grafanaClient.Datasources.DeleteDataSourceByUID(*uid) // nolint:errcheck
233+
_, err = grafanaClient.Datasources.DeleteDataSourceByUID(uid) // nolint:errcheck
234234

235235
var notFound *datasources.DeleteDataSourceByUIDNotFound
236236
if err != nil {
237237
if !errors.As(err, &notFound) {
238-
return fmt.Errorf("deleting datasource %s: %w", *uid, err)
238+
return fmt.Errorf("deleting datasource %s: %w", uid, err)
239239
}
240240
}
241241

controllers/folder_controller.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ func (r *GrafanaFolderReconciler) Reconcile(ctx context.Context, req ctrl.Reques
151151
}
152152

153153
func (r *GrafanaFolderReconciler) finalize(ctx context.Context, folder *grafanav1beta1.GrafanaFolder) error {
154+
log := logf.FromContext(ctx)
155+
log.Info("Finalizing GrafanaFolder")
156+
157+
uid := folder.CustomUIDOrUID()
158+
154159
instances, err := GetScopedMatchingInstances(ctx, r.Client, folder)
155160
if err != nil {
156161
return fmt.Errorf("fetching instances: %w", err)
@@ -160,17 +165,12 @@ func (r *GrafanaFolderReconciler) finalize(ctx context.Context, folder *grafanav
160165
params := folders.NewDeleteFolderParams().WithForceDeleteRules(&reftrue)
161166

162167
for _, grafana := range instances {
163-
found, uid := grafana.Status.Folders.Find(folder.Namespace, folder.Name)
164-
if !found {
165-
continue
166-
}
167-
168168
grafanaClient, err := client2.NewGeneratedGrafanaClient(ctx, r.Client, &grafana)
169169
if err != nil {
170170
return err
171171
}
172172

173-
_, err = grafanaClient.Folders.DeleteFolder(params.WithFolderUID(*uid)) //nolint
173+
_, err = grafanaClient.Folders.DeleteFolder(params.WithFolderUID(uid)) //nolint
174174
if err != nil {
175175
var notFound *folders.DeleteFolderNotFound
176176
if !errors.As(err, &notFound) {

controllers/librarypanel_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ func (r *GrafanaLibraryPanelReconciler) reconcileWithInstance(ctx context.Contex
237237

238238
func (r *GrafanaLibraryPanelReconciler) finalize(ctx context.Context, libraryPanel *v1beta1.GrafanaLibraryPanel) error {
239239
log := logf.FromContext(ctx)
240-
log.Info("finalizing GrafanaLibraryPanel")
240+
log.Info("Finalizing GrafanaLibraryPanel")
241241

242242
uid := content.CustomUIDOrUID(libraryPanel, libraryPanel.Status.UID)
243243

controllers/notificationpolicy_controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ func (r *GrafanaNotificationPolicyReconciler) reconcileWithInstance(ctx context.
308308

309309
func (r *GrafanaNotificationPolicyReconciler) finalize(ctx context.Context, notificationPolicy *v1beta1.GrafanaNotificationPolicy) error {
310310
log := logf.FromContext(ctx)
311+
log.Info("Finalizing GrafanaNotificationPolicy")
311312

312313
instances, err := GetScopedMatchingInstances(ctx, r.Client, notificationPolicy)
313314
if err != nil {

controllers/suite_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"fmt"
2222
"path/filepath"
2323
"slices"
24+
"strings"
2425
"testing"
2526

2627
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -255,4 +256,14 @@ func reconcileAndValidateCondition(r GrafanaCommonReconciler, cr v1beta1.CommonR
255256
require.NoError(t, err)
256257

257258
containsEqualCondition(cr.CommonStatus().Conditions, condition)
259+
260+
err = k8sClient.Delete(testCtx, cr)
261+
require.NoError(t, err)
262+
263+
_, err = r.Reconcile(testCtx, req)
264+
if err != nil && strings.Contains(err.Error(), "dummy-deployment") {
265+
require.Error(t, err)
266+
} else {
267+
require.NoError(t, err)
268+
}
258269
}

0 commit comments

Comments
 (0)