Proper parsing of bookmark labels
This commit is contained in:
parent
0fe21d9bf7
commit
8f62141862
@ -5,7 +5,6 @@ import { SettingsContext } from "utils/contexts/settings";
|
|||||||
import ResolvedIcon from "components/resolvedicon";
|
import ResolvedIcon from "components/resolvedicon";
|
||||||
|
|
||||||
export default function Item({ bookmark }) {
|
export default function Item({ bookmark }) {
|
||||||
console.log(bookmark);
|
|
||||||
const description = bookmark.description ?? new URL(bookmark.href).hostname;
|
const description = bookmark.description ?? new URL(bookmark.href).hostname;
|
||||||
const { settings } = useContext(SettingsContext);
|
const { settings } = useContext(SettingsContext);
|
||||||
|
|
||||||
|
|||||||
@ -6,11 +6,10 @@ import yaml from "js-yaml";
|
|||||||
import {
|
import {
|
||||||
getDockerServers,
|
getDockerServers,
|
||||||
listDockerContainers,
|
listDockerContainers,
|
||||||
getUrlFromIngress,
|
|
||||||
mapObjectsToGroup,
|
mapObjectsToGroup,
|
||||||
getIngressList,
|
getIngressList,
|
||||||
ANNOTATION_BASE,
|
ANNOTATION_BASE,
|
||||||
ANNOTATION_WIDGET_BASE,
|
ANNOTATION_BOOKMARK_BASE,
|
||||||
} from "./integration-helpers";
|
} from "./integration-helpers";
|
||||||
|
|
||||||
import createLogger from "utils/logger";
|
import createLogger from "utils/logger";
|
||||||
@ -55,38 +54,36 @@ export async function bookmarksFromDocker() {
|
|||||||
try {
|
try {
|
||||||
const isSwarm = !!servers[serverName].swarm;
|
const isSwarm = !!servers[serverName].swarm;
|
||||||
const containers = await listDockerContainers(servers, serverName);
|
const containers = await listDockerContainers(servers, serverName);
|
||||||
const discovered = containers.map((container) => {
|
const constructed = [];
|
||||||
|
containers.forEach((container) => {
|
||||||
let constructedBookmark = null;
|
let constructedBookmark = null;
|
||||||
const containerLabels = isSwarm ? shvl.get(container, "Spec.Labels") : container.Labels;
|
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) => {
|
Object.keys(containerLabels).forEach((label) => {
|
||||||
if (label.startsWith("homepage.bookmarks.")) {
|
if (label.startsWith("homepage.bookmarks.")) {
|
||||||
const containerNameNoSlash = containerName.replace(/^\//, "");
|
let value = label.replace("homepage.bookmarks.", "");
|
||||||
|
const bookmarkKey = value.substring(0, value.indexOf("."));
|
||||||
let value = label.replace(`homepage.bookmarks.${containerNameNoSlash}.`, "");
|
value = value.replace(`${bookmarkKey}.`, "");
|
||||||
if (instanceName && value.startsWith(`instance.${instanceName}.`)) {
|
if (instanceName && value.startsWith(`instance.${instanceName}.`)) {
|
||||||
value = value.replace(`instance.${instanceName}.`, "");
|
value = value.replace(`instance.${instanceName}.`, "");
|
||||||
} else if (value.startsWith("instance.")) {
|
} else if (value.startsWith("instance.")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!constructedBookmark) {
|
if (!constructedBookmark || constructedBookmark.key !== bookmarkKey) {
|
||||||
constructedBookmark = {
|
constructedBookmark = {
|
||||||
container: containerNameNoSlash,
|
|
||||||
server: serverName,
|
|
||||||
type: "bookmark",
|
type: "bookmark",
|
||||||
|
key: bookmarkKey,
|
||||||
};
|
};
|
||||||
|
constructed.push(constructedBookmark);
|
||||||
}
|
}
|
||||||
shvl.set(constructedBookmark, value, substituteEnvironmentVars(containerLabels[label]));
|
shvl.set(constructedBookmark, value, substituteEnvironmentVars(containerLabels[label]));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return constructedBookmark;
|
|
||||||
});
|
});
|
||||||
|
return { server: serverName, bookmarks: constructed.filter((filteredBookmark) => filteredBookmark) };
|
||||||
return { server: serverName, bookmarks: discovered.filter((filteredBookmark) => filteredBookmark) };
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
logger.error(e);
|
||||||
// a server failed, but others may succeed
|
// a server failed, but others may succeed
|
||||||
return { server: serverName, bookmarks: [] };
|
return { server: serverName, bookmarks: [] };
|
||||||
}
|
}
|
||||||
@ -103,27 +100,29 @@ export async function bookmarksFromKubernetes() {
|
|||||||
if (!ingressList) {
|
if (!ingressList) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
const bookmarks = ingressList.items
|
const constructed = [];
|
||||||
|
ingressList.items
|
||||||
.filter(
|
.filter(
|
||||||
(ingress) =>
|
(ingress) =>
|
||||||
ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true",
|
ingress.metadata.annotations && ingress.metadata.annotations[`${ANNOTATION_BASE}/enabled`] === "true",
|
||||||
)
|
)
|
||||||
.map((ingress) => {
|
.forEach((ingress) => {
|
||||||
let constructedBookmark = {
|
let constructedBookmark = null;
|
||||||
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",
|
|
||||||
};
|
|
||||||
Object.keys(ingress.metadata.annotations).forEach((annotation) => {
|
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(
|
shvl.set(
|
||||||
constructedBookmark,
|
constructedBookmark,
|
||||||
annotation.replace(`${ANNOTATION_BASE}/`, ""),
|
annotation.replace(`${ANNOTATION_BOOKMARK_BASE}.${bookmarkKey}.`, ""),
|
||||||
ingress.metadata.annotations[annotation],
|
ingress.metadata.annotations[annotation],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -140,7 +139,7 @@ export async function bookmarksFromKubernetes() {
|
|||||||
|
|
||||||
const mappedBookmarkGroups = [];
|
const mappedBookmarkGroups = [];
|
||||||
|
|
||||||
bookmarks.forEach((serverBookmark) => {
|
constructed.forEach((serverBookmark) => {
|
||||||
let serverGroup = mappedBookmarkGroups.find((searchedGroup) => searchedGroup.name === serverBookmark.group);
|
let serverGroup = mappedBookmarkGroups.find((searchedGroup) => searchedGroup.name === serverBookmark.group);
|
||||||
if (!serverGroup) {
|
if (!serverGroup) {
|
||||||
mappedBookmarkGroups.push({
|
mappedBookmarkGroups.push({
|
||||||
|
|||||||
@ -89,6 +89,7 @@ export async function checkCRD(kc, name) {
|
|||||||
|
|
||||||
export const ANNOTATION_BASE = "gethomepage.dev";
|
export const ANNOTATION_BASE = "gethomepage.dev";
|
||||||
export const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`;
|
export const ANNOTATION_WIDGET_BASE = `${ANNOTATION_BASE}/widget.`;
|
||||||
|
export const ANNOTATION_BOOKMARK_BASE = `${ANNOTATION_BASE}/bookmarks.`;
|
||||||
|
|
||||||
export async function getIngressList() {
|
export async function getIngressList() {
|
||||||
checkAndCopyConfig("kubernetes.yaml");
|
checkAndCopyConfig("kubernetes.yaml");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user