mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-25 16:07:24 +00:00
fix: metric recorders for all conditionals (#1998)
* fix(controller): decode old object for delete requests Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * chore: modernize golang Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> * fix: preserve ca-bundles injected from external providers Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add metadata enforcement Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add metadata enforcement Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: add resourcepoolclaim validation Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: add resourcepoolclaim validation Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: add resourcepoolclaim validation Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix: add resourcepoolclaim validation Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: wave of fixes Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: wave of fixes Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: wave of fixes Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: wave of fixes Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: wave of fixes Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: wave of fixes Signed-off-by: Oliver Baehler <oliver@sudo-i.net> --------- Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com> Signed-off-by: Oliver Baehler <oliver@sudo-i.net> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
co-authored by
Copilot Autofix powered by AI
parent
8e1cc910bd
commit
4b07463705
@@ -146,13 +146,15 @@ func (r *resourcePoolController) finalize(
|
||||
ctx context.Context,
|
||||
pool *capsulev1beta2.ResourcePool,
|
||||
) {
|
||||
// Case: all claims are gone, remove finalizer
|
||||
if pool.Status.ClaimSize == 0 && controllerutil.ContainsFinalizer(pool, meta.ControllerFinalizer) {
|
||||
managedResources := pool.Status.ClaimSize + pool.Status.NamespaceSize
|
||||
|
||||
// Case: all managed resources are gone, remove finalizer
|
||||
if managedResources == 0 && controllerutil.ContainsFinalizer(pool, meta.ControllerFinalizer) {
|
||||
controllerutil.RemoveFinalizer(pool, meta.ControllerFinalizer)
|
||||
}
|
||||
|
||||
// Case: claims still exist, add finalizer if not already present
|
||||
if pool.Status.ClaimSize > 0 && !controllerutil.ContainsFinalizer(pool, meta.ControllerFinalizer) {
|
||||
// Case: managed resources still exist, add finalizer if not already present
|
||||
if managedResources > 0 && !controllerutil.ContainsFinalizer(pool, meta.ControllerFinalizer) {
|
||||
controllerutil.AddFinalizer(pool, meta.ControllerFinalizer)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
// Copyright 2020-2026 Project Capsule Authors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package resourcepools
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
|
||||
|
||||
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
||||
"github.com/projectcapsule/capsule/pkg/api/meta"
|
||||
)
|
||||
|
||||
func TestResourcePoolFinalize(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
claimSize uint
|
||||
namespaceSize uint
|
||||
initialFinalizer bool
|
||||
wantFinalizer bool
|
||||
}{
|
||||
{
|
||||
name: "adds finalizer when namespaces are managed without claims",
|
||||
namespaceSize: 2,
|
||||
initialFinalizer: false,
|
||||
wantFinalizer: true,
|
||||
},
|
||||
{
|
||||
name: "adds finalizer when claims are managed",
|
||||
claimSize: 1,
|
||||
initialFinalizer: false,
|
||||
wantFinalizer: true,
|
||||
},
|
||||
{
|
||||
name: "removes finalizer when no managed resources remain",
|
||||
initialFinalizer: true,
|
||||
wantFinalizer: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
pool := &capsulev1beta2.ResourcePool{
|
||||
Status: capsulev1beta2.ResourcePoolStatus{
|
||||
ClaimSize: tt.claimSize,
|
||||
NamespaceSize: tt.namespaceSize,
|
||||
},
|
||||
}
|
||||
|
||||
if tt.initialFinalizer {
|
||||
controllerutil.AddFinalizer(pool, meta.ControllerFinalizer)
|
||||
}
|
||||
|
||||
(&resourcePoolController{}).finalize(context.Background(), pool)
|
||||
|
||||
if got := controllerutil.ContainsFinalizer(pool, meta.ControllerFinalizer); got != tt.wantFinalizer {
|
||||
t.Fatalf("finalizer presence = %v, want %v", got, tt.wantFinalizer)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -101,7 +101,7 @@ func (r Manager) Reconcile(ctx context.Context, request ctrl.Request) (result ct
|
||||
|
||||
r.Metrics.RecordConditions(instance)
|
||||
|
||||
if e := patchHelper.Patch(ctx, instance); err != nil {
|
||||
if e := patchHelper.Patch(ctx, instance); e != nil {
|
||||
if apierrors.IsNotFound(e) || apierrors.HasStatusCause(e, corev1.NamespaceTerminatingCause) {
|
||||
err = nil
|
||||
|
||||
|
||||
Reference in New Issue
Block a user