Skip to content

Commit ce6844f

Browse files
committed
feat(controller): Index ResourceTemplate.spec.webhookRef
1 parent c49c994 commit ce6844f

File tree

3 files changed

+15
-31
lines changed

3 files changed

+15
-31
lines changed

internal/controller/webhook/reconciler_beta.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
// +kubebuilder:rbac:groups=pullup.dev,resources=httpwebhooks,verbs=get;list;watch
2727
// +kubebuilder:rbac:groups=pullup.dev,resources=githubwebhooks,verbs=get;list;watch
2828

29-
const ownerRefUIDField = "metadata.ownerReferences.uid"
29+
const webhookRefField = "spec.webhookRef"
3030

3131
var ErrObjectNotWebhook = errors.New("object is not a webhook")
3232

@@ -54,11 +54,11 @@ type BetaReconcilerFactory struct {
5454
}
5555

5656
func NewBetaReconcilerFactory(conf BetaReconcilerConfig, mgr manager.Manager) (*BetaReconcilerFactory, error) {
57-
err := mgr.GetFieldIndexer().IndexField(context.Background(), &v1beta1.ResourceTemplate{}, ownerRefUIDField, func(obj runtime.Object) []string {
57+
err := mgr.GetFieldIndexer().IndexField(context.Background(), &v1beta1.ResourceTemplate{}, webhookRefField, func(obj runtime.Object) []string {
5858
var result []string
5959

60-
for _, ref := range obj.(*v1beta1.ResourceTemplate).OwnerReferences {
61-
result = append(result, string(ref.UID))
60+
if ref := obj.(*v1beta1.ResourceTemplate).Spec.WebhookRef; ref != nil {
61+
result = append(result, objectRefString(ref))
6262
}
6363

6464
return result
@@ -113,9 +113,15 @@ func (r *BetaReconciler) Reconcile(req reconcile.Request) (reconcile.Result, err
113113
return reconcile.Result{}, ErrObjectNotWebhook
114114
}
115115

116+
apiVersion, kind := webhook.GetObjectKind().GroupVersionKind().ToAPIVersionAndKind()
117+
116118
list := new(v1beta1.ResourceTemplateList)
117119
err := r.Client.List(ctx, list, client.InNamespace(webhook.GetNamespace()), client.MatchingFields(map[string]string{
118-
ownerRefUIDField: string(webhook.GetUID()),
120+
webhookRefField: objectRefString(&v1beta1.ObjectReference{
121+
APIVersion: apiVersion,
122+
Kind: kind,
123+
Name: webhook.GetName(),
124+
}),
119125
}))
120126
if err != nil {
121127
return reconcile.Result{Requeue: true}, fmt.Errorf("failed to list resource templates: %w", err)
@@ -179,3 +185,7 @@ func (r *BetaReconciler) patchResource(ctx context.Context, webhook hookutil.Web
179185
Reason: ReasonPatched,
180186
}
181187
}
188+
189+
func objectRefString(ref *v1beta1.ObjectReference) string {
190+
return fmt.Sprintf("apiVersion=%s, kind=%s, name=%s", ref.APIVersion, ref.Kind, ref.Name)
191+
}

internal/controller/webhook/testdata/http-webhook-success.yml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@ kind: ResourceTemplate
1515
metadata:
1616
name: bar-46
1717
namespace: foo
18-
ownerReferences:
19-
- apiVersion: pullup.dev/v1beta1
20-
kind: HTTPWebhook
21-
name: bar
22-
controller: true
23-
blockOwnerDeletion: true
2418
spec:
2519
webhookRef:
2620
apiVersion: pullup.dev/v1beta1
@@ -35,12 +29,6 @@ kind: ResourceTemplate
3529
metadata:
3630
name: bar-64
3731
namespace: foo
38-
ownerReferences:
39-
- apiVersion: pullup.dev/v1beta1
40-
kind: HTTPWebhook
41-
name: bar
42-
controller: true
43-
blockOwnerDeletion: true
4432
spec:
4533
webhookRef:
4634
apiVersion: pullup.dev/v1beta1

internal/controller/webhook/testdata/reconciler_beta.golden

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,6 @@
77
creationTimestamp: null
88
name: bar-46
99
namespace: foo
10-
ownerReferences:
11-
- apiVersion: pullup.dev/v1beta1
12-
blockOwnerDeletion: true
13-
controller: true
14-
kind: HTTPWebhook
15-
name: bar
16-
uid: ""
1710
selfLink: /apis/pullup.dev/v1beta1/namespaces/foo/resourcetemplates/bar-46
1811
spec:
1912
data:
@@ -33,13 +26,6 @@
3326
creationTimestamp: null
3427
name: bar-64
3528
namespace: foo
36-
ownerReferences:
37-
- apiVersion: pullup.dev/v1beta1
38-
blockOwnerDeletion: true
39-
controller: true
40-
kind: HTTPWebhook
41-
name: bar
42-
uid: ""
4329
selfLink: /apis/pullup.dev/v1beta1/namespaces/foo/resourcetemplates/bar-64
4430
spec:
4531
data:

0 commit comments

Comments
 (0)