Widgets in discovered services now work correctly

This commit is contained in:
James Wynn 2023-01-09 08:30:50 -06:00
parent 9a072cddde
commit 4d6ce1f7e2

View File

@ -114,18 +114,17 @@ export async function servicesFromDocker() {
} }
function getUrlFromIngress(ingress) { function getUrlFromIngress(ingress) {
let url = ingress.metadata.annotations['homepage/url']; const urlHost = ingress.spec.rules[0].host;
if(!url) { const urlPath = ingress.spec.rules[0].http.paths[0].path;
const urlHost = ingress.spec.rules[0].host; const urlSchema = ingress.spec.tls ? 'https' : 'http';
const urlPath = ingress.spec.rules[0].http.paths[0].path; return `${urlSchema}://${urlHost}${urlPath}`;
const urlSchema = ingress.spec.tls ? 'https' : 'http';
url = `${urlSchema}://${urlHost}${urlPath}`;
}
return url;
} }
export async function servicesFromKubernetes() { export async function servicesFromKubernetes() {
const ANNOTATION_BASE = 'gethomepage.dev';
const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`;
const ANNOTATION_POD_SELECTOR = `${ANNOTATION_BASE}/pod-selector`;
checkAndCopyConfig("kubernetes.yaml"); checkAndCopyConfig("kubernetes.yaml");
try { try {
@ -145,23 +144,23 @@ export async function servicesFromKubernetes() {
return []; return [];
} }
const services = ingressList.items const services = ingressList.items
.filter((ingress) => ingress.metadata.annotations && ingress.metadata.annotations['gethomepage.dev/enabled'] === 'true') .filter((ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === 'true')
.map((ingress) => { .map((ingress) => {
const constructedService = { const constructedService = {
app: ingress.metadata.name, app: ingress.metadata.name,
namespace: ingress.metadata.namespace, namespace: ingress.metadata.namespace,
href: ingress.metadata.annotations['gethomepage.dev/href'] || getUrlFromIngress(ingress), href: ingress.metadata.annotations[`${ANNOTATION_BASE}/href`] || getUrlFromIngress(ingress),
name: ingress.metadata.annotations['gethomepage.dev/name'] || ingress.metadata.name, name: ingress.metadata.annotations[`${ANNOTATION_BASE}/name`] || ingress.metadata.name,
group: ingress.metadata.annotations['gethomepage.dev/group'] || "Kubernetes", group: ingress.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
icon: ingress.metadata.annotations['gethomepage.dev/icon'] || '', icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || '',
description: ingress.metadata.annotations['gethomepage.dev/description'] || '', description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || '',
}; };
if (ingress.metadata.annotations['gethomepage.dev/pod-selector']) { if (ingress.metadata.annotations[ANNOTATION_POD_SELECTOR]) {
constructedService.podSelector = ingress.metadata.annotations['gethomepage.dev/pod-selector']; constructedService.podSelector = ingress.metadata.annotations[ANNOTATION_POD_SELECTOR];
} }
Object.keys(ingress.metadata.annotations).forEach((annotation) => { Object.keys(ingress.metadata.annotations).forEach((annotation) => {
if (annotation.startsWith("gethomepage.dev/widget/")) { if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
shvl.set(constructedService, annotation.replace("homepage/widget/", ""), ingress.metadata.annotations[annotation]); shvl.set(constructedService, annotation.replace(`${ANNOTATION_BASE}/`, ""), ingress.metadata.annotations[annotation]);
} }
}); });