Proper parsing of bookmark labels

This commit is contained in:
shamoon 2023-12-18 00:37:41 -08:00
parent 0fe21d9bf7
commit 8f62141862
3 changed files with 29 additions and 30 deletions

View File

@ -5,7 +5,6 @@ import { SettingsContext } from "utils/contexts/settings";
import ResolvedIcon from "components/resolvedicon";
export default function Item({ bookmark }) {
console.log(bookmark);
const description = bookmark.description ?? new URL(bookmark.href).hostname;
const { settings } = useContext(SettingsContext);

View File

@ -6,11 +6,10 @@ import yaml from "js-yaml";
import {
getDockerServers,
listDockerContainers,
getUrlFromIngress,
mapObjectsToGroup,
getIngressList,
ANNOTATION_BASE,
ANNOTATION_WIDGET_BASE,
ANNOTATION_BOOKMARK_BASE,
} from "./integration-helpers";
import createLogger from "utils/logger";
@ -55,38 +54,36 @@ export async function bookmarksFromDocker() {
try {
const isSwarm = !!servers[serverName].swarm;
const containers = await listDockerContainers(servers, serverName);
const discovered = containers.map((container) => {
const constructed = [];
containers.forEach((container) => {
let constructedBookmark = null;
const containerLabels = isSwarm ? shvl.get(container, "Spec.Labels") : container.Labels;
const containerName = isSwarm ? shvl.get(container, "Spec.Name") : container.Names[0];
Object.keys(containerLabels).forEach((label) => {
if (label.startsWith("homepage.bookmarks.")) {
const containerNameNoSlash = containerName.replace(/^\//, "");
let value = label.replace(`homepage.bookmarks.${containerNameNoSlash}.`, "");
let value = label.replace("homepage.bookmarks.", "");
const bookmarkKey = value.substring(0, value.indexOf("."));
value = value.replace(`${bookmarkKey}.`, "");
if (instanceName && value.startsWith(`instance.${instanceName}.`)) {
value = value.replace(`instance.${instanceName}.`, "");
} else if (value.startsWith("instance.")) {
return;
}
if (!constructedBookmark) {
if (!constructedBookmark || constructedBookmark.key !== bookmarkKey) {
constructedBookmark = {
container: containerNameNoSlash,
server: serverName,
type: "bookmark",
key: bookmarkKey,
};
constructed.push(constructedBookmark);
}
shvl.set(constructedBookmark, value, substituteEnvironmentVars(containerLabels[label]));
}
});
return constructedBookmark;
});
return { server: serverName, bookmarks: discovered.filter((filteredBookmark) => filteredBookmark) };
return { server: serverName, bookmarks: constructed.filter((filteredBookmark) => filteredBookmark) };
} catch (e) {
logger.error(e);
// a server failed, but others may succeed
return { server: serverName, bookmarks: [] };
}
@ -103,27 +100,29 @@ export async function bookmarksFromKubernetes() {
if (!ingressList) {
return [];
}
const bookmarks = ingressList.items
const constructed = [];
ingressList.items
.filter(
(ingress) =>
ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true",
)
.map((ingress) => {
let constructedBookmark = {
app: ingress.metadata.annotations[`${ANNOTATION_BASE}/app`] || ingress.metadata.name,
namespace: ingress.metadata.namespace,
href: ingress.metadata.annotations[`${ANNOTATION_BASE}/href`] || getUrlFromIngress(ingress),
name: ingress.metadata.annotations[`${ANNOTATION_BASE}/name`] || ingress.metadata.name,
group: ingress.metadata.annotations[`${ANNOTATION_BASE}/group`] || "Kubernetes",
icon: ingress.metadata.annotations[`${ANNOTATION_BASE}/icon`] || "",
description: ingress.metadata.annotations[`${ANNOTATION_BASE}/description`] || "",
type: "bookmark",
};
.forEach((ingress) => {
let constructedBookmark = null;
Object.keys(ingress.metadata.annotations).forEach((annotation) => {
if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
if (annotation.startsWith(ANNOTATION_BOOKMARK_BASE)) {
const trimmedAnnotation = annotation.replace(`${ANNOTATION_BOOKMARK_BASE}.`, "");
const bookmarkKey = trimmedAnnotation.substring(0, trimmedAnnotation.indexOf("."));
if (!constructedBookmark || constructedBookmark.key !== bookmarkKey) {
constructedBookmark = {
type: "bookmark",
key: bookmarkKey,
};
constructed.push(constructedBookmark);
}
shvl.set(
constructedBookmark,
annotation.replace(`${ANNOTATION_BASE}/`, ""),
annotation.replace(`${ANNOTATION_BOOKMARK_BASE}.${bookmarkKey}.`, ""),
ingress.metadata.annotations[annotation],
);
}
@ -140,7 +139,7 @@ export async function bookmarksFromKubernetes() {
const mappedBookmarkGroups = [];
bookmarks.forEach((serverBookmark) => {
constructed.forEach((serverBookmark) => {
let serverGroup = mappedBookmarkGroups.find((searchedGroup) => searchedGroup.name === serverBookmark.group);
if (!serverGroup) {
mappedBookmarkGroups.push({

View File

@ -89,6 +89,7 @@ export async function checkCRD(kc, name) {
export const ANNOTATION_BASE = "gethomepage.dev";
export const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`;
export const ANNOTATION_BOOKMARK_BASE = `${ANNOTATION_BASE}/bookmarks.`;
export async function getIngressList() {
checkAndCopyConfig("kubernetes.yaml");