mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-08-21 05:26:56 +00:00
70 lines
1.4 KiB
Go
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,
|
|
})
|
|
}
|
|
}
|
|
}
|