Skip to content

Commit

Permalink
Enhancement: support instanceName filtering for kubernetes deployme…
Browse files Browse the repository at this point in the history
…nt (#2488)


---------

Co-authored-by: shamoon <[email protected]>
  • Loading branch information
atropos112 and shamoon authored Dec 17, 2023
1 parent 30e4a2a commit eea20de
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
4 changes: 4 additions & 0 deletions docs/configs/kubernetes.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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
Expand Down
6 changes: 5 additions & 1 deletion src/utils/config/service-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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");

Expand Down Expand Up @@ -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 = {
Expand Down

0 comments on commit eea20de

Please sign in to comment.