Files

70 lines
1.4 KiB
Go

// Copyright 2020-2026 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0
package tenantowners
import (
"context"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/util/workqueue"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
"github.com/projectcapsule/capsule/pkg/api/rbac"
indexer "github.com/projectcapsule/capsule/pkg/runtime/indexers/tenantowner"
)
func (r *TenantOwnerManager) enqueueTenantOwnerRequests(
ctx context.Context,
q workqueue.TypedRateLimitingInterface[ctrl.Request],
owners rbac.OwnerStatusListSpec,
) {
seen := make(map[types.NamespacedName]struct{}, len(owners))
for _, owner := range owners {
if owner.Name == "" {
continue
}
tenantOwnerList := &capsulev1beta2.TenantOwnerList{}
if err := r.List(
ctx,
tenantOwnerList,
client.MatchingFields{
indexer.NameIndexerFieldName: owner.Name,
},
); err != nil {
r.Log.Error(
err,
"Failed to list TenantOwners by spec.name",
"ownerName", owner.Name,
"ownerKind", owner.Kind,
)
continue
}
for _, tenantOwner := range tenantOwnerList.Items {
if tenantOwner.Spec.Kind != owner.Kind {
continue
}
key := types.NamespacedName{
Name: tenantOwner.Name,
}
if _, ok := seen[key]; ok {
continue
}
seen[key] = struct{}{}
q.Add(ctrl.Request{
NamespacedName: key,
})
}
}
}