From eea20defb13adc1bf532665f5d194e09729ce1bd Mon Sep 17 00:00:00 2001 From: Atropos <33070637+atropos112@users.noreply.github.com> Date: Sun, 17 Dec 2023 18:55:40 +0000 Subject: [PATCH] Enhancement: support `instanceName` filtering for kubernetes deployment (#2488) --------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- docs/configs/kubernetes.md | 4 ++++ src/utils/config/service-helpers.js | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/configs/kubernetes.md b/docs/configs/kubernetes.md index c1777612d..6ba995c49 100644 --- a/docs/configs/kubernetes.md +++ b/docs/configs/kubernetes.md @@ -79,6 +79,7 @@ metadata: gethomepage.dev/widget.url: "https://emby.example.com" gethomepage.dev/pod-selector: "" gethomepage.dev/weight: 10 # optional + gethomepage.dev/instance: "public" # optional spec: rules: - host: emby.example.com @@ -95,6 +96,8 @@ spec: When the Kubernetes cluster connection has been properly configured, this service will be automatically discovered and added to your Homepage. **You do not need to specify the `namespace` or `app` values, as they will be automatically inferred.** +If you are using multiple instances of homepage, an `instance` annotation can be specified to limit services to a specific instance. If no instance is provided, the service will be visible on all instances. + ### Traefik IngressRoute support Homepage can also read ingresses defined using the Traefik IngressRoute custom resource definition. Due to the complex nature of Traefik routing rules, it is required for the `gethomepage.dev/href` annotation to be set: @@ -116,6 +119,7 @@ metadata: gethomepage.dev/widget.url: "https://emby.example.com" gethomepage.dev/pod-selector: "" gethomepage.dev/weight: 10 # optional + gethomepage.dev/instance: "public" # optional spec: entryPoints: - websecure diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index c2319781c..f96f6509f 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -169,6 +169,7 @@ export async function checkCRD(kc, name) { export async function servicesFromKubernetes() { const ANNOTATION_BASE = "gethomepage.dev"; const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`; + const { instanceName } = getSettings(); checkAndCopyConfig("kubernetes.yaml"); @@ -238,7 +239,10 @@ export async function servicesFromKubernetes() { const services = ingressList.items .filter( (ingress) => - ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true", + ingress.metadata.annotations && + ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true" && + (!ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] || + ingress.metadata.annotations[`${ANNOTATION_BASE}/instance`] === instanceName), ) .map((ingress) => { let constructedService = {