fixed getKubeArguments. Bad if statement.

This commit is contained in:
djeinstine
2025-02-10 10:41:40 +00:00
parent 75a2342848
commit 8e44424ffc
8 changed files with 192 additions and 173 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}
// return httpRouteList;
// }

View File

@@ -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;
}
// return ingressList;
// }

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}
// return traefikList;
// }

View File

@@ -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;
// }