From 2f420a9e08d9cf8218f4894739a5a8e8bc46de09 Mon Sep 17 00:00:00 2001 From: Travis Raines <571832+rainest@users.noreply.github.com> Date: Tue, 15 Aug 2023 11:40:52 -0700 Subject: [PATCH] fix(discovery) update non-terminating instances Use not terminating instead of ready condition to determine which Kong instances are available for configuration updates. This provides compatibility with Kong instances that use the 3.3+ /status/ready endpoint instead of /status. --- internal/adminapi/endpoints.go | 2 +- .../kongadminapi_controller_envtest_test.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/adminapi/endpoints.go b/internal/adminapi/endpoints.go index a0a9bdd417..38436f0e82 100644 --- a/internal/adminapi/endpoints.go +++ b/internal/adminapi/endpoints.go @@ -99,7 +99,7 @@ func AdminAPIsFromEndpointSlice( } for _, e := range endpoints.Endpoints { - if e.Conditions.Ready == nil || !*e.Conditions.Ready { + if e.Conditions.Terminating != nil && *e.Conditions.Terminating { continue } diff --git a/internal/controllers/configuration/kongadminapi_controller_envtest_test.go b/internal/controllers/configuration/kongadminapi_controller_envtest_test.go index ad2296b6f7..4469d9ec8b 100644 --- a/internal/controllers/configuration/kongadminapi_controller_envtest_test.go +++ b/internal/controllers/configuration/kongadminapi_controller_envtest_test.go @@ -190,7 +190,7 @@ func TestKongAdminAPIController(t *testing.T) { ) }) - t.Run("not Ready Endpoints are not matched", func(t *testing.T) { + t.Run("terminating Endpoints are not matched", func(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() adminService, adminPod, n := startKongAdminAPIServiceReconciler(ctx, t, client, cfg) @@ -216,7 +216,7 @@ func TestKongAdminAPIController(t *testing.T) { { Addresses: []string{"10.0.0.1"}, Conditions: discoveryv1.EndpointConditions{ - Ready: lo.ToPtr(false), + Terminating: lo.ToPtr(true), }, TargetRef: &corev1.ObjectReference{ Kind: "Pod", @@ -457,16 +457,16 @@ func TestKongAdminAPIController(t *testing.T) { n.LastNotified(), ) - // Update all endpoints so that they are not Ready. + // Update all endpoints so that they are Terminating. for i := range endpoints.Endpoints { - endpoints.Endpoints[i].Conditions.Ready = lo.ToPtr(false) + endpoints.Endpoints[i].Conditions.Terminating = lo.ToPtr(true) } require.NoError(t, client.Update(ctx, &endpoints, &ctrlclient.UpdateOptions{})) require.NoError(t, client.Get(ctx, k8stypes.NamespacedName{Name: endpoints.Name, Namespace: endpoints.Namespace}, &endpoints, &ctrlclient.GetOptions{})) assert.Eventually(t, func() bool { return len(n.LastNotified()) == 0 }, 3*time.Second, time.Millisecond) - // Update 1 endpoint so that that it's Ready. - endpoints.Endpoints[0].Conditions.Ready = lo.ToPtr(true) + // Update 1 endpoint so that it's not Terminating. + endpoints.Endpoints[0].Conditions.Terminating = nil require.NoError(t, client.Update(ctx, &endpoints, &ctrlclient.UpdateOptions{})) require.NoError(t, client.Get(ctx, k8stypes.NamespacedName{Name: endpoints.Name, Namespace: endpoints.Namespace}, &endpoints, &ctrlclient.GetOptions{}))