Skip to content

Commit 4afcfbb

Browse files
fix(controller): use ownerreferences without controller owner relation (#1095)
Signed-off-by: Oliver Bähler <oliverbaehler@hotmail.com>
1 parent 82995a3 commit 4afcfbb

File tree

7 files changed

+30
-10
lines changed

7 files changed

+30
-10
lines changed

controllers/tenant/manager.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"k8s.io/client-go/util/retry"
1717
ctrl "sigs.k8s.io/controller-runtime"
1818
"sigs.k8s.io/controller-runtime/pkg/client"
19+
"sigs.k8s.io/controller-runtime/pkg/handler"
1920
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2021

2122
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
@@ -31,11 +32,11 @@ type Manager struct {
3132
func (r *Manager) SetupWithManager(mgr ctrl.Manager) error {
3233
return ctrl.NewControllerManagedBy(mgr).
3334
For(&capsulev1beta2.Tenant{}).
34-
Owns(&corev1.Namespace{}).
3535
Owns(&networkingv1.NetworkPolicy{}).
3636
Owns(&corev1.LimitRange{}).
3737
Owns(&corev1.ResourceQuota{}).
3838
Owns(&rbacv1.RoleBinding{}).
39+
Watches(&corev1.Namespace{}, handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &capsulev1beta2.Tenant{})).
3940
Complete(r)
4041
}
4142

pkg/webhook/namespace/utils.go renamed to pkg/utils/reference.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2020-2023 Project Capsule Authors.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
package namespace
4+
package utils
55

66
import (
77
"strings"
@@ -15,7 +15,7 @@ const (
1515
ObjectReferenceTenantKind = "Tenant"
1616
)
1717

18-
func isTenantOwnerReference(or metav1.OwnerReference) bool {
18+
func IsTenantOwnerReference(or metav1.OwnerReference) bool {
1919
parts := strings.Split(or.APIVersion, "/")
2020
if len(parts) != 2 {
2121
return false

pkg/webhook/namespace/freezed.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
1717
"github.com/projectcapsule/capsule/pkg/configuration"
18+
capsuleutils "github.com/projectcapsule/capsule/pkg/utils"
1819
capsulewebhook "github.com/projectcapsule/capsule/pkg/webhook"
1920
"github.com/projectcapsule/capsule/pkg/webhook/utils"
2021
)
@@ -35,7 +36,7 @@ func (r *freezedHandler) OnCreate(client client.Client, decoder admission.Decode
3536
}
3637

3738
for _, objectRef := range ns.ObjectMeta.OwnerReferences {
38-
if !isTenantOwnerReference(objectRef) {
39+
if !capsuleutils.IsTenantOwnerReference(objectRef) {
3940
continue
4041
}
4142

pkg/webhook/namespace/prefix.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616

1717
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
1818
"github.com/projectcapsule/capsule/pkg/configuration"
19+
capsuleutils "github.com/projectcapsule/capsule/pkg/utils"
1920
capsulewebhook "github.com/projectcapsule/capsule/pkg/webhook"
2021
"github.com/projectcapsule/capsule/pkg/webhook/utils"
2122
)
@@ -49,7 +50,7 @@ func (r *prefixHandler) OnCreate(clt client.Client, decoder admission.Decoder, r
4950
tnt := &capsulev1beta2.Tenant{}
5051

5152
for _, or := range ns.ObjectMeta.OwnerReferences {
52-
if !isTenantOwnerReference(or) {
53+
if !capsuleutils.IsTenantOwnerReference(or) {
5354
continue
5455
}
5556

pkg/webhook/namespace/quota.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
1414

1515
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
16+
capsuleutils "github.com/projectcapsule/capsule/pkg/utils"
1617
capsulewebhook "github.com/projectcapsule/capsule/pkg/webhook"
1718
"github.com/projectcapsule/capsule/pkg/webhook/utils"
1819
)
@@ -31,7 +32,7 @@ func (r *quotaHandler) OnCreate(client client.Client, decoder admission.Decoder,
3132
}
3233

3334
for _, objectRef := range ns.ObjectMeta.OwnerReferences {
34-
if !isTenantOwnerReference(objectRef) {
35+
if !capsuleutils.IsTenantOwnerReference(objectRef) {
3536
continue
3637
}
3738

pkg/webhook/namespace/user_metadata.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
capsulev1beta2 "github.com/projectcapsule/capsule/api/v1beta2"
1717
"github.com/projectcapsule/capsule/pkg/api"
18+
capsuleutils "github.com/projectcapsule/capsule/pkg/utils"
1819
capsulewebhook "github.com/projectcapsule/capsule/pkg/webhook"
1920
"github.com/projectcapsule/capsule/pkg/webhook/utils"
2021
)
@@ -35,7 +36,7 @@ func (r *userMetadataHandler) OnCreate(client client.Client, decoder admission.D
3536
tnt := &capsulev1beta2.Tenant{}
3637

3738
for _, objectRef := range ns.ObjectMeta.OwnerReferences {
38-
if !isTenantOwnerReference(objectRef) {
39+
if !capsuleutils.IsTenantOwnerReference(objectRef) {
3940
continue
4041
}
4142

@@ -90,7 +91,7 @@ func (r *userMetadataHandler) OnUpdate(client client.Client, decoder admission.D
9091
tnt := &capsulev1beta2.Tenant{}
9192

9293
for _, objectRef := range newNs.ObjectMeta.OwnerReferences {
93-
if !isTenantOwnerReference(objectRef) {
94+
if !capsuleutils.IsTenantOwnerReference(objectRef) {
9495
continue
9596
}
9697

pkg/webhook/ownerreference/patching.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"strings"
1313

1414
corev1 "k8s.io/api/core/v1"
15+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1516
"k8s.io/apimachinery/pkg/runtime"
1617
"k8s.io/apimachinery/pkg/types"
1718
"k8s.io/client-go/tools/record"
@@ -71,7 +72,21 @@ func (h *handler) OnUpdate(_ client.Client, decoder admission.Decoder, _ record.
7172
return &response
7273
}
7374

74-
newNs.OwnerReferences = oldNs.OwnerReferences
75+
var refs []metav1.OwnerReference
76+
77+
for _, ref := range oldNs.OwnerReferences {
78+
if capsuleutils.IsTenantOwnerReference(ref) {
79+
refs = append(refs, ref)
80+
}
81+
}
82+
83+
for _, ref := range newNs.OwnerReferences {
84+
if !capsuleutils.IsTenantOwnerReference(ref) {
85+
refs = append(refs, ref)
86+
}
87+
}
88+
89+
newNs.OwnerReferences = refs
7590

7691
c, err := json.Marshal(newNs)
7792
if err != nil {
@@ -212,7 +227,7 @@ func (h *handler) patchResponseForOwnerRef(tenant *capsulev1beta2.Tenant, ns *co
212227
return admission.Errored(http.StatusInternalServerError, err)
213228
}
214229

215-
if err = controllerutil.SetControllerReference(tenant, ns, scheme); err != nil {
230+
if err = controllerutil.SetOwnerReference(tenant, ns, scheme); err != nil {
216231
recorder.Eventf(tenant, corev1.EventTypeWarning, "Error", "Namespace %s cannot be assigned to the desired Tenant", ns.GetName())
217232

218233
return admission.Errored(http.StatusInternalServerError, err)

0 commit comments

Comments
 (0)