Skip to content

Commit 59137f9

Browse files
committed
detect ownerReference changes
1 parent ed4e104 commit 59137f9

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ require (
7777
istio.io/gogo-genproto v0.0.0-20201015184601-1e80d26d6249 // indirect
7878
k8s.io/klog/v2 v2.130.1 // indirect
7979
k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f // indirect
80-
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect
80+
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
8181
sigs.k8s.io/controller-runtime v0.19.0
8282
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
8383
sigs.k8s.io/yaml v1.4.0 // indirect

kubernetes/ingress.go

+12-3
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ func (k *IngressService) Ensure(ctx context.Context, id router.InstanceID, o rou
211211
return err
212212
}
213213
} else if ingressHasChanges(span, existingIngress, ingress) {
214-
err = k.mergeIngresses(ctx, ingress, existingIngress, id, ingressClient, span)
214+
err = k.mergeIngressAndUpdate(ctx, ingress, existingIngress, id, ingressClient, span)
215215
if err != nil {
216216
setSpanError(span, err)
217217
return err
@@ -266,8 +266,9 @@ func (k *IngressService) Ensure(ctx context.Context, id router.InstanceID, o rou
266266
return nil
267267
}
268268

269-
func (k *IngressService) mergeIngresses(ctx context.Context, ingress *networkingV1.Ingress, existingIngress *networkingV1.Ingress, id router.InstanceID, ingressClient networkingTypedV1.IngressInterface, span opentracing.Span) error {
269+
func (k *IngressService) mergeIngressAndUpdate(ctx context.Context, ingress *networkingV1.Ingress, existingIngress *networkingV1.Ingress, id router.InstanceID, ingressClient networkingTypedV1.IngressInterface, span opentracing.Span) error {
270270
ingress.ObjectMeta.ResourceVersion = existingIngress.ObjectMeta.ResourceVersion
271+
ingress.ObjectMeta.UID = existingIngress.ObjectMeta.UID
271272
if existingIngress.Spec.DefaultBackend != nil {
272273
ingress.Spec.DefaultBackend = existingIngress.Spec.DefaultBackend
273274
}
@@ -409,7 +410,7 @@ func (k *IngressService) ensureCNameBackend(ctx context.Context, opts ensureCNam
409410
}
410411

411412
if ingressHasChanges(span, existingIngress, ingress) {
412-
err = k.mergeIngresses(ctx, ingress, existingIngress, opts.id, ingressClient, span)
413+
err = k.mergeIngressAndUpdate(ctx, ingress, existingIngress, opts.id, ingressClient, span)
413414
if err != nil {
414415
return err
415416
}
@@ -990,6 +991,14 @@ func ingressHasChanges(span opentracing.Span, existing *networkingV1.Ingress, in
990991
return true
991992
}
992993

994+
if !reflect.DeepEqual(existing.OwnerReferences, ing.OwnerReferences) {
995+
span.LogKV(
996+
"message", "ingress has changed the ownerReferences",
997+
"ingress", existing.Name,
998+
)
999+
return true
1000+
}
1001+
9931002
if existing.Annotations[AnnotationsCNames] != ing.Annotations[AnnotationsCNames] {
9941003
return true
9951004
}

kubernetes/ingress_test.go

+33
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"fmt"
1111
"testing"
1212

13+
"github.com/opentracing/opentracing-go"
1314
"github.com/stretchr/testify/assert"
1415
"github.com/stretchr/testify/require"
1516
"github.com/tsuru/kubernetes-router/router"
@@ -1832,3 +1833,35 @@ func defaultIngress(name, namespace string) *networkingV1.Ingress {
18321833
},
18331834
}
18341835
}
1836+
1837+
func TestIngressHasChanges(t *testing.T) {
1838+
span := opentracing.NoopTracer{}.StartSpan("test")
1839+
existing := &networkingV1.Ingress{
1840+
ObjectMeta: metav1.ObjectMeta{
1841+
OwnerReferences: []metav1.OwnerReference{
1842+
{
1843+
APIVersion: "v1",
1844+
Kind: "Service",
1845+
Name: "test-web",
1846+
BlockOwnerDeletion: ptr.To(true),
1847+
Controller: ptr.To(true),
1848+
},
1849+
},
1850+
},
1851+
}
1852+
ing := &networkingV1.Ingress{
1853+
ObjectMeta: metav1.ObjectMeta{
1854+
OwnerReferences: []metav1.OwnerReference{
1855+
{
1856+
APIVersion: "networking.k8s.io/v1",
1857+
Kind: "Ingress",
1858+
Name: "test-web",
1859+
BlockOwnerDeletion: ptr.To(true),
1860+
Controller: ptr.To(true),
1861+
},
1862+
},
1863+
},
1864+
}
1865+
1866+
assert.True(t, ingressHasChanges(span, existing, ing))
1867+
}

0 commit comments

Comments
 (0)