From 8e44424ffcff45d9d34744069dc3724c7610c021 Mon Sep 17 00:00:00 2001 From: djeinstine Date: Mon, 10 Feb 2025 10:41:40 +0000 Subject: [PATCH] fixed getKubeArguments. Bad if statement. --- src/utils/config/kubernetes.js | 6 +- src/utils/kubernetes/kubernetes-export.js | 14 +++ .../kubernetes/kubernetes-httproute-list.js | 80 +++++++------- .../kubernetes/kubernetes-ingress-list.js | 26 ++--- src/utils/kubernetes/kubernetes-routes.js | 6 +- .../kubernetes/kubernetes-service-helpers.js | 64 ----------- .../kubernetes/kubernetes-traefik-list.js | 100 +++++++++--------- src/utils/kubernetes/resource-helpers.js | 69 ++++++++++++ 8 files changed, 192 insertions(+), 173 deletions(-) create mode 100644 src/utils/kubernetes/kubernetes-export.js delete mode 100644 src/utils/kubernetes/kubernetes-service-helpers.js create mode 100644 src/utils/kubernetes/resource-helpers.js diff --git a/src/utils/config/kubernetes.js b/src/utils/config/kubernetes.js index 3cf7350fe..953b43aaa 100644 --- a/src/utils/config/kubernetes.js +++ b/src/utils/config/kubernetes.js @@ -44,10 +44,10 @@ export default function getKubeArguments() { const config = yaml.load(configData); let kubeData; - if (config?.mode === "disabled") { - kubeData = { config: null }; - } else { + if (config?.mode === "default" || config?.mode === "cluster") { kubeData = extractKubeData(config); + } else { + kubeData = { config: null }; } return kubeData; diff --git a/src/utils/kubernetes/kubernetes-export.js b/src/utils/kubernetes/kubernetes-export.js new file mode 100644 index 000000000..ac769bde8 --- /dev/null +++ b/src/utils/kubernetes/kubernetes-export.js @@ -0,0 +1,14 @@ +// import listIngress from "utils/kubernetes/kubernetes-ingress-list"; +// import listTraefikIngress from "utils/kubernetes/kubernetes-traefik-list"; +// import listHttpRoute from "utils/kubernetes/kubernetes-httproute-list"; +// import { isDiscoverable,constructedServiceFromResource } from "utils/kubernetes/resource-helpers"; + +// const kubernetes = { +// listIngress, +// listTraefikIngress, +// listHttpRoute, +// isDiscoverable, +// constructedServiceFromResource +// }; + +// export default kubernetes; \ No newline at end of file diff --git a/src/utils/kubernetes/kubernetes-httproute-list.js b/src/utils/kubernetes/kubernetes-httproute-list.js index a92db429b..db85ac054 100644 --- a/src/utils/kubernetes/kubernetes-httproute-list.js +++ b/src/utils/kubernetes/kubernetes-httproute-list.js @@ -1,50 +1,50 @@ -import { CustomObjectsApi, CoreV1Api } from "@kubernetes/client-node"; -import createLogger from "utils/logger"; +// import { CustomObjectsApi, CoreV1Api } from "@kubernetes/client-node"; +// import createLogger from "utils/logger"; -export async function getHttpRouteList(kc) { +// export async function getHttpRouteList(kc) { - const logger = createLogger("service-helpers"); - const crd = kc.makeApiClient(CustomObjectsApi); - const core = kc.makeApiClient(CoreV1Api); - let httpRouteList = []; +// const logger = createLogger("service-helpers"); +// const crd = kc.makeApiClient(CustomObjectsApi); +// const core = kc.makeApiClient(CoreV1Api); +// let httpRouteList = []; - // httproutes - const getHttpRoute = async (namespace) => - crd - .listNamespacedCustomObject(apiGroup, version, namespace, "httproutes") - .then((response) => { - const [httpRoute] = response.body.items; - return httpRoute; - }) - .catch((error) => { - logger.error("Error getting httproutes: %d %s %s", error.statusCode, error.body, error.response); - logger.debug(error); - return null; - }); +// // httproutes +// const getHttpRoute = async (namespace) => +// crd +// .listNamespacedCustomObject(apiGroup, version, namespace, "httproutes") +// .then((response) => { +// const [httpRoute] = response.body.items; +// return httpRoute; +// }) +// .catch((error) => { +// logger.error("Error getting httproutes: %d %s %s", error.statusCode, error.body, error.response); +// logger.debug(error); +// return null; +// }); - // namespaces - const namespaces = await core - .listNamespace() - .then((response) => response.body.items.map((ns) => ns.metadata.name)) - .catch((error) => { - logger.error("Error getting namespaces: %d %s %s", error.statusCode, error.body, error.response); - logger.debug(error); - return null; - }); +// // namespaces +// const namespaces = await core +// .listNamespace() +// .then((response) => response.body.items.map((ns) => ns.metadata.name)) +// .catch((error) => { +// logger.error("Error getting namespaces: %d %s %s", error.statusCode, error.body, error.response); +// logger.debug(error); +// return null; +// }); - if (namespaces) { - const httpRouteListUnfiltered = await Promise.all( - namespaces.map(async (namespace) => { - const httpRoute = await getHttpRoute(namespace); - return httpRoute; - }), - ); +// if (namespaces) { +// const httpRouteListUnfiltered = await Promise.all( +// namespaces.map(async (namespace) => { +// const httpRoute = await getHttpRoute(namespace); +// return httpRoute; +// }), +// ); - httpRouteList = httpRouteListUnfiltered.filter((httpRoute) => httpRoute !== undefined); - } +// httpRouteList = httpRouteListUnfiltered.filter((httpRoute) => httpRoute !== undefined); +// } - return httpRouteList; -} \ No newline at end of file +// return httpRouteList; +// } \ No newline at end of file diff --git a/src/utils/kubernetes/kubernetes-ingress-list.js b/src/utils/kubernetes/kubernetes-ingress-list.js index c0db16c8a..a646857c5 100644 --- a/src/utils/kubernetes/kubernetes-ingress-list.js +++ b/src/utils/kubernetes/kubernetes-ingress-list.js @@ -1,18 +1,18 @@ -import NetworkingV1Api from "@kubernetes/client-node"; +// import NetworkingV1Api from "@kubernetes/client-node"; -export async function listIngress(kc) { +// export async function listIngress(kc) { - const networking = kc.makeApiClient(NetworkingV1Api); +// const networking = kc.makeApiClient(NetworkingV1Api); - const ingressList = await networking - .listIngressForAllNamespaces(null, null, null, null) - .then((response) => response.body) - .catch((error) => { - logger.error("Error getting ingresses: %d %s %s", error.statusCode, error.body, error.response); - logger.debug(error); - return null; - }); +// const ingressList = await networking +// .listIngressForAllNamespaces(null, null, null, null) +// .then((response) => response.body) +// .catch((error) => { +// logger.error("Error getting ingresses: %d %s %s", error.statusCode, error.body, error.response); +// logger.debug(error); +// return null; +// }); - return ingressList; -} \ No newline at end of file +// return ingressList; +// } \ No newline at end of file diff --git a/src/utils/kubernetes/kubernetes-routes.js b/src/utils/kubernetes/kubernetes-routes.js index 8d8fb5561..a82d0b3d6 100644 --- a/src/utils/kubernetes/kubernetes-routes.js +++ b/src/utils/kubernetes/kubernetes-routes.js @@ -1,6 +1,6 @@ import { CustomObjectsApi, NetworkingV1Api, CoreV1Api } from "@kubernetes/client-node"; -import getKubeArguments from "utils/config/kubernetes"; +import getKubeArguments,{checkCRD} from "utils/config/kubernetes"; import createLogger from "utils/logger"; const logger = createLogger("service-helpers"); @@ -31,7 +31,7 @@ async function getUrlFromHttpRoute(ingress) { let url = null if (ingress.spec.has("hostnames")) { - if (ingress.spec.rules[0].matches[0].path.type!="RegularExpression"){ + if (ingress.spec.rules[0].matches[0].path.type!=="RegularExpression"){ const urlHost = ingress.spec.hostnames[0]; const urlPath = ingress.spec.rules[0].matches[0].path.value; const urlSchema = (await getSchemaFromGateway(ingress.spec.parentRefs[0])) ? "https" : "http"; @@ -93,7 +93,7 @@ async function getHttpRouteList() { async function getIngressList(annotationBase) { - const traefik = kubeArguments.traefik; + const {traefik} = kubeArguments; const networking = kc.makeApiClient(NetworkingV1Api); const ingressList = await networking diff --git a/src/utils/kubernetes/kubernetes-service-helpers.js b/src/utils/kubernetes/kubernetes-service-helpers.js deleted file mode 100644 index d83c2448d..000000000 --- a/src/utils/kubernetes/kubernetes-service-helpers.js +++ /dev/null @@ -1,64 +0,0 @@ -import getUrlSchema from "utils/kubernetes/kubernetes-routes"; - -export function isDiscoverable(resource,instanceName,annotationBase) { - return resource.metadata.annotations && - resource.metadata.annotations[`${annotationBase}/enabled`] === "true" && - (!resource.metadata.annotations[`${annotationBase}/instance`] || - resource.metadata.annotations[`${annotationBase}/instance`] === instanceName || - `${annotationBase}/instance.${instanceName}` in resource.metadata.annotations) -} - -export async function constructedServiceFromResource (resource,annotationBase){ - - const ANNOTATION_WIDGET_BASE = `${annotationBase}/widget.`; - - let constructedService = { - app: resource.metadata.annotations[`${annotationBase}/app`] || resource.metadata.name, - namespace: resource.metadata.namespace, - href: resource.metadata.annotations[`${annotationBase}/href`] || (await getUrlSchema(resource)), - name: resource.metadata.annotations[`${annotationBase}/name`] || resource.metadata.name, - group: resource.metadata.annotations[`${annotationBase}/group`] || "Kubernetes", - weight: resource.metadata.annotations[`${annotationBase}/weight`] || "0", - icon: resource.metadata.annotations[`${annotationBase}/icon`] || "", - description: resource.metadata.annotations[`${annotationBase}/description`] || "", - external: false, - type: "service", - }; - if (resource.metadata.annotations[`${annotationBase}/external`]) { - constructedService.external = - String(resource.metadata.annotations[`${annotationBase}/external`]).toLowerCase() === "true"; - } - if (resource.metadata.annotations[`${annotationBase}/pod-selector`] !== undefined) { - constructedService.podSelector = resource.metadata.annotations[`${annotationBase}/pod-selector`]; - } - if (resource.metadata.annotations[`${annotationBase}/ping`]) { - constructedService.ping = resource.metadata.annotations[`${annotationBase}/ping`]; - } - if (resource.metadata.annotations[`${annotationBase}/siteMonitor`]) { - constructedService.siteMonitor = resource.metadata.annotations[`${annotationBase}/siteMonitor`]; - } - if (resource.metadata.annotations[`${annotationBase}/statusStyle`]) { - constructedService.statusStyle = resource.metadata.annotations[`${annotationBase}/statusStyle`]; - } - - Object - .keys(resource.metadata.annotations) - .forEach((annotation) => { - if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) { - shvl.set( - constructedService, - annotation.replace(`${annotationBase}/`, ""), - resource.metadata.annotations[annotation], - ); - } - }); - - try { - constructedService = JSON.parse(substituteEnvironmentVars(JSON.stringify(constructedService))); - } catch (e) { - logger.error("Error attempting k8s environment variable substitution."); - logger.debug(e); - } - - return constructedService; -} \ No newline at end of file diff --git a/src/utils/kubernetes/kubernetes-traefik-list.js b/src/utils/kubernetes/kubernetes-traefik-list.js index 4129cd636..00e81da97 100644 --- a/src/utils/kubernetes/kubernetes-traefik-list.js +++ b/src/utils/kubernetes/kubernetes-traefik-list.js @@ -1,60 +1,60 @@ -import CustomObjectsApi from "@kubernetes/client-node"; -import createLogger from "utils/logger"; +// import CustomObjectsApi from "@kubernetes/client-node"; +// import createLogger from "utils/logger"; -export async function listIngress(annotationBase,kc) { +// export async function listIngress(annotationBase,kc) { - const logger = createLogger("service-helpers"); - const traefik = kubeArguments.traefik; - let traefikList = []; +// const logger = createLogger("service-helpers"); +// const traefik = kubeArguments.traefik; +// let traefikList = []; - if (traefik) { - const crd = kc.makeApiClient(CustomObjectsApi); - const traefikContainoExists = await checkCRD("ingressroutes.traefik.containo.us",kc,logger); - const traefikExists = await checkCRD("ingressroutes.traefik.io",kc,logger); +// if (traefik) { +// const crd = kc.makeApiClient(CustomObjectsApi); +// const traefikContainoExists = await checkCRD("ingressroutes.traefik.containo.us",kc,logger); +// const traefikExists = await checkCRD("ingressroutes.traefik.io",kc,logger); - const traefikIngressListContaino = await crd - .listClusterCustomObject("traefik.containo.us", "v1alpha1", "ingressroutes") - .then((response) => response.body) - .catch(async (error) => { - if (traefikContainoExists) { - logger.error( - "Error getting traefik ingresses from traefik.containo.us: %d %s %s", - error.statusCode, - error.body, - error.response, - ); - logger.debug(error); - } +// const traefikIngressListContaino = await crd +// .listClusterCustomObject("traefik.containo.us", "v1alpha1", "ingressroutes") +// .then((response) => response.body) +// .catch(async (error) => { +// if (traefikContainoExists) { +// logger.error( +// "Error getting traefik ingresses from traefik.containo.us: %d %s %s", +// error.statusCode, +// error.body, +// error.response, +// ); +// logger.debug(error); +// } - return []; - }); +// return []; +// }); - const traefikIngressListIo = await crd - .listClusterCustomObject("traefik.io", "v1alpha1", "ingressroutes") - .then((response) => response.body) - .catch(async (error) => { - if (traefikExists) { - logger.error( - "Error getting traefik ingresses from traefik.io: %d %s %s", - error.statusCode, - error.body, - error.response, - ); - logger.debug(error); - } +// const traefikIngressListIo = await crd +// .listClusterCustomObject("traefik.io", "v1alpha1", "ingressroutes") +// .then((response) => response.body) +// .catch(async (error) => { +// if (traefikExists) { +// logger.error( +// "Error getting traefik ingresses from traefik.io: %d %s %s", +// error.statusCode, +// error.body, +// error.response, +// ); +// logger.debug(error); +// } - return []; - }); +// return []; +// }); - const traefikIngressList = [...(traefikIngressListContaino?.items ?? []), ...(traefikIngressListIo?.items ?? [])]; +// const traefikIngressList = [...(traefikIngressListContaino?.items ?? []), ...(traefikIngressListIo?.items ?? [])]; - if (traefikIngressList.length > 0) { - const traefikServices = traefikIngressList.filter( - (ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${annotationBase}/href`], - ); - traefikList.items.push(...traefikServices); - } - } +// if (traefikIngressList.length > 0) { +// const traefikServices = traefikIngressList.filter( +// (ingress) => ingress.metadata.annotations && ingress.metadata.annotations[`${annotationBase}/href`], +// ); +// traefikList.items.push(...traefikServices); +// } +// } - return traefikList; -} \ No newline at end of file +// return traefikList; +// } \ No newline at end of file diff --git a/src/utils/kubernetes/resource-helpers.js b/src/utils/kubernetes/resource-helpers.js new file mode 100644 index 000000000..66a72ec75 --- /dev/null +++ b/src/utils/kubernetes/resource-helpers.js @@ -0,0 +1,69 @@ +// import getUrlSchema from "utils/kubernetes/kubernetes-routes"; +// import { substituteEnvironmentVars } from "utils/config/config"; +// import createLogger from "utils/logger"; +// import * as shvl from "utils/config/shvl"; + +// const logger = createLogger("resource-helpers"); + +// export function isDiscoverable(resource,instanceName,annotationBase) { +// return resource.metadata.annotations && +// resource.metadata.annotations[`${annotationBase}/enabled`] === "true" && +// (!resource.metadata.annotations[`${annotationBase}/instance`] || +// resource.metadata.annotations[`${annotationBase}/instance`] === instanceName || +// `${annotationBase}/instance.${instanceName}` in resource.metadata.annotations) +// } + +// export async function constructedServiceFromResource (resource,annotationBase){ + +// const ANNOTATION_WIDGET_BASE = `${annotationBase}/widget.`; + +// let constructedService = { +// app: resource.metadata.annotations[`${annotationBase}/app`] || resource.metadata.name, +// namespace: resource.metadata.namespace, +// href: resource.metadata.annotations[`${annotationBase}/href`] || (await getUrlSchema(resource)), +// name: resource.metadata.annotations[`${annotationBase}/name`] || resource.metadata.name, +// group: resource.metadata.annotations[`${annotationBase}/group`] || "Kubernetes", +// weight: resource.metadata.annotations[`${annotationBase}/weight`] || "0", +// icon: resource.metadata.annotations[`${annotationBase}/icon`] || "", +// description: resource.metadata.annotations[`${annotationBase}/description`] || "", +// external: false, +// type: "service", +// }; +// if (resource.metadata.annotations[`${annotationBase}/external`]) { +// constructedService.external = +// String(resource.metadata.annotations[`${annotationBase}/external`]).toLowerCase() === "true"; +// } +// if (resource.metadata.annotations[`${annotationBase}/pod-selector`] !== undefined) { +// constructedService.podSelector = resource.metadata.annotations[`${annotationBase}/pod-selector`]; +// } +// if (resource.metadata.annotations[`${annotationBase}/ping`]) { +// constructedService.ping = resource.metadata.annotations[`${annotationBase}/ping`]; +// } +// if (resource.metadata.annotations[`${annotationBase}/siteMonitor`]) { +// constructedService.siteMonitor = resource.metadata.annotations[`${annotationBase}/siteMonitor`]; +// } +// if (resource.metadata.annotations[`${annotationBase}/statusStyle`]) { +// constructedService.statusStyle = resource.metadata.annotations[`${annotationBase}/statusStyle`]; +// } + +// Object +// .keys(resource.metadata.annotations) +// .forEach((annotation) => { +// if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) { +// shvl.set( +// constructedService, +// annotation.replace(`${annotationBase}/`, ""), +// resource.metadata.annotations[annotation], +// ); +// } +// }); + +// try { +// constructedService = JSON.parse(substituteEnvironmentVars(JSON.stringify(constructedService))); +// } catch (e) { +// logger.error("Error attempting k8s environment variable substitution."); +// logger.debug(e); +// } + +// return constructedService; +// } \ No newline at end of file