mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-21 05:26:56 +00:00
* 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: tls controller Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * feat: add tenantowner tenant status reference Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: tlsreconciler only patches cabundles Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * chore: refactor logger usage 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> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * fix: tlsreconciler only patches cabundles Signed-off-by: Oliver Baehler <oliver@sudo-i.net> * fix: tlsreconciler only patches cabundles 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>
78 lines
2.1 KiB
Go
78 lines
2.1 KiB
Go
// Copyright 2020-2026 Project Capsule Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package predicates
|
|
|
|
import (
|
|
"sigs.k8s.io/controller-runtime/pkg/event"
|
|
|
|
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
|
|
"github.com/projectcapsule/capsule/pkg/api/rbac"
|
|
)
|
|
|
|
type TenantStatusOwnersChangedPredicate struct{}
|
|
|
|
func (TenantStatusOwnersChangedPredicate) Create(e event.CreateEvent) bool {
|
|
tenant, ok := e.Object.(*capsulev1beta2.Tenant)
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
return len(tenant.Status.Owners) > 0
|
|
}
|
|
|
|
func (TenantStatusOwnersChangedPredicate) Delete(e event.DeleteEvent) bool {
|
|
tenant, ok := e.Object.(*capsulev1beta2.Tenant)
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
return len(tenant.Status.Owners) > 0
|
|
}
|
|
|
|
func (TenantStatusOwnersChangedPredicate) Generic(e event.GenericEvent) bool {
|
|
tenant, ok := e.Object.(*capsulev1beta2.Tenant)
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
return len(tenant.Status.Owners) > 0
|
|
}
|
|
|
|
// TenantCountChangedPredicate fires on Tenant create/delete only.
|
|
// Update events are ignored because only create and delete change the set of
|
|
// tenants; updates to labels, spec, or status do not affect tenant membership.
|
|
// Kept separate from TenantStatusOwnersChangedPredicate which intentionally ignores
|
|
// create/delete because those do not affect user aggregation.
|
|
type TenantCountChangedPredicate struct{}
|
|
|
|
func (TenantCountChangedPredicate) Create(event.CreateEvent) bool { return true }
|
|
func (TenantCountChangedPredicate) Delete(event.DeleteEvent) bool { return true }
|
|
func (TenantCountChangedPredicate) Generic(event.GenericEvent) bool { return false }
|
|
func (TenantCountChangedPredicate) Update(event.UpdateEvent) bool { return false }
|
|
|
|
func (TenantStatusOwnersChangedPredicate) Update(e event.UpdateEvent) bool {
|
|
oldObj, ok1 := e.ObjectOld.(*capsulev1beta2.Tenant)
|
|
newObj, ok2 := e.ObjectNew.(*capsulev1beta2.Tenant)
|
|
|
|
if !ok1 || !ok2 {
|
|
return false
|
|
}
|
|
|
|
return ownersChanged(oldObj.Status.Owners, newObj.Status.Owners)
|
|
}
|
|
|
|
func ownersChanged(a, b rbac.OwnerStatusListSpec) bool {
|
|
if len(a) != len(b) {
|
|
return true
|
|
}
|
|
|
|
for i := range a {
|
|
if a[i].Name != b[i].Name || a[i].Kind != b[i].Kind {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|