From b5084ba8b320f24594a59da86b3ba41b8bf897d2 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 18 Aug 2026 10:51:29 -0700 Subject: [PATCH] Fix: fix k8s gateway error logging (#7008) --- src/utils/kubernetes/resource-helpers.js | 2 +- src/utils/kubernetes/resource-helpers.test.js | 33 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/utils/kubernetes/resource-helpers.js b/src/utils/kubernetes/resource-helpers.js index 0ac143ac5..d039a1ee8 100644 --- a/src/utils/kubernetes/resource-helpers.js +++ b/src/utils/kubernetes/resource-helpers.js @@ -31,7 +31,7 @@ const getSchemaFromGateway = async (parentRef) => { return listener.protocol.toLowerCase(); }) .catch((error) => { - logger.error("Error getting gateways: %d %s %s", error.statusCode, error.body, error.response); + logger.error("Error getting gateways: %s", error.body ?? error.message); logger.debug(error); return "http"; diff --git a/src/utils/kubernetes/resource-helpers.test.js b/src/utils/kubernetes/resource-helpers.test.js index fbd22ef46..5b7429d4d 100644 --- a/src/utils/kubernetes/resource-helpers.test.js +++ b/src/utils/kubernetes/resource-helpers.test.js @@ -169,10 +169,41 @@ describe("utils/kubernetes/resource-helpers", () => { const service = await constructedServiceFromResource(resource); expect(service.href).toBe("http://example.com/r"); - expect(logger.error).toHaveBeenCalled(); + expect(logger.error).toHaveBeenCalledWith("Error getting gateways: %s", "boom"); expect(logger.debug).toHaveBeenCalled(); }); + it("logs the message for gateway errors that carry no response body", async () => { + const kc = getKubeConfig(); + const crd = kc.makeApiClient(); + crd.getNamespacedCustomObject.mockRejectedValueOnce(new Error("Required parameter namespace was null")); + + const base = "gethomepage.dev"; + const resource = { + kind: "HTTPRoute", + metadata: { + name: "route", + namespace: "ns", + annotations: { + [`${base}/enabled`]: "true", + }, + }, + spec: { + hostnames: ["example.com"], + parentRefs: [{ namespace: "ns", name: "gw", sectionName: "web" }], + rules: [ + { + matches: [{ path: { type: "PathPrefix", value: "/r" } }], + }, + ], + }, + }; + + const service = await constructedServiceFromResource(resource); + expect(service.href).toBe("http://example.com/r"); + expect(logger.error).toHaveBeenCalledWith("Error getting gateways: %s", "Required parameter namespace was null"); + }); + it("logs and recovers when environment substitution yields invalid json", async () => { substituteEnvironmentVars.mockImplementationOnce(() => "{bad json");