mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Cleanup 'Cluster' to remove environment specific details (#6951)
- requestNamespaceListPermissions is infallable so no need to have the extra try/catch - Refactor isMetricHidden method away from Cluster - Refactor shouldShowResource out of Cluster - Refactor isInLocalKubeconfig out of Cluster - Remove depecrated and unused workspace from Cluster - Refactor out kubectl as a dependency of Cluster - Remove from cluster getter used only once - Split out ClusterConnection from Cluster - Also split out KubeAuthProxyServer from ContextHandler - Rename ContextHandler to PrometheusHandler - Cleanup onNetworkOffline/Online impls within ClusterManager - Remove annotations from ClusterConnection - Remove mobx annotations from Cluster - Rename loadConfigFromFileInjectable - Remove all uses of dead createClusterInjectionToken - Fix type errors related to broadcastConnectionUpdate Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
1 parent
e6d6d1d8f7
commit
ad9bafe2a5
133 files changed
+2544
-1961
No files matched your search
+10
-7
@@ -10,15 +10,18 @@ import type { V1Secret } from "@kubernetes/client-node";
|
||||
import { CoreV1Api } from "@kubernetes/client-node";
|
||||
import { clusterRoute } from "../../router/route";
|
||||
import { dump } from "js-yaml";
|
||||
import loadProxyKubeconfigInjectable from "../../cluster/load-proxy-kubeconfig.injectable";
|
||||
|
||||
const getServiceAccountRouteInjectable = getRouteInjectable({
|
||||
id: "get-service-account-route",
|
||||
|
||||
instantiate: () => clusterRoute({
|
||||
instantiate: (di) => clusterRoute({
|
||||
method: "get",
|
||||
path: `${apiPrefix}/kubeconfig/service-account/{namespace}/{account}`,
|
||||
})(async ({ params, cluster }) => {
|
||||
const client = (await cluster.getProxyKubeconfig()).makeApiClient(CoreV1Api);
|
||||
const loadProxyKubeconfig = di.inject(loadProxyKubeconfigInjectable, cluster);
|
||||
const proxyKubeconfig = await loadProxyKubeconfig();
|
||||
const client = proxyKubeconfig.makeApiClient(CoreV1Api);
|
||||
const secretList = await client.listNamespacedSecret(params.namespace);
|
||||
|
||||
const secret = secretList.body.items.find(secret => {
|
||||
@@ -64,9 +67,9 @@ function generateKubeConfig(username: string, secret: V1Secret, cluster: Cluster
|
||||
"kind": "Config",
|
||||
"clusters": [
|
||||
{
|
||||
"name": cluster.contextName,
|
||||
"name": cluster.contextName.get(),
|
||||
"cluster": {
|
||||
"server": cluster.apiUrl,
|
||||
"server": cluster.apiUrl.get(),
|
||||
"certificate-authority-data": caCrt,
|
||||
},
|
||||
},
|
||||
@@ -81,14 +84,14 @@ function generateKubeConfig(username: string, secret: V1Secret, cluster: Cluster
|
||||
],
|
||||
"contexts": [
|
||||
{
|
||||
"name": cluster.contextName,
|
||||
"name": cluster.contextName.get(),
|
||||
"context": {
|
||||
"user": username,
|
||||
"cluster": cluster.contextName,
|
||||
"cluster": cluster.contextName.get(),
|
||||
"namespace": secret.metadata.namespace,
|
||||
},
|
||||
},
|
||||
],
|
||||
"current-context": cluster.contextName,
|
||||
"current-context": cluster.contextName.get(),
|
||||
});
|
||||
}
|
||||
@@ -14,6 +14,8 @@ import { isRequestError, object } from "../../../common/utils";
|
||||
import type { GetMetrics } from "../../get-metrics.injectable";
|
||||
import getMetricsInjectable from "../../get-metrics.injectable";
|
||||
import loggerInjectable from "../../../common/logger.injectable";
|
||||
import prometheusHandlerInjectable from "../../cluster/prometheus-handler/prometheus-handler.injectable";
|
||||
import { runInAction } from "mobx";
|
||||
|
||||
// This is used for backoff retry tracking.
|
||||
const ATTEMPTS = [false, false, false, false, true];
|
||||
@@ -66,9 +68,10 @@ const addMetricsRouteInjectable = getRouteInjectable({
|
||||
})(async ({ cluster, payload, query }) => {
|
||||
const queryParams: Partial<Record<string, string>> = Object.fromEntries(query.entries());
|
||||
const prometheusMetadata: ClusterPrometheusMetadata = {};
|
||||
const prometheusHandler = di.inject(prometheusHandlerInjectable, cluster);
|
||||
|
||||
try {
|
||||
const { prometheusPath, provider } = await cluster.contextHandler.getPrometheusDetails();
|
||||
const { prometheusPath, provider } = await prometheusHandler.getPrometheusDetails();
|
||||
|
||||
prometheusMetadata.provider = provider?.kind;
|
||||
prometheusMetadata.autoDetected = !cluster.preferences.prometheusProvider?.type;
|
||||
@@ -115,7 +118,9 @@ const addMetricsRouteInjectable = getRouteInjectable({
|
||||
|
||||
return { response: {}};
|
||||
} finally {
|
||||
cluster.metadata[ClusterMetadataKey.PROMETHEUS] = prometheusMetadata;
|
||||
runInAction(() => {
|
||||
cluster.metadata[ClusterMetadataKey.PROMETHEUS] = prometheusMetadata;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@@ -8,6 +8,7 @@ import { PortForward } from "./functionality/port-forward";
|
||||
import createPortForwardInjectable from "./functionality/create-port-forward.injectable";
|
||||
import { clusterRoute } from "../../router/route";
|
||||
import loggerInjectable from "../../../common/logger.injectable";
|
||||
import kubeconfigManagerInjectable from "../../kubeconfig-manager/kubeconfig-manager.injectable";
|
||||
|
||||
const startPortForwardRouteInjectable = getRouteInjectable({
|
||||
id: "start-current-port-forward-route",
|
||||
@@ -24,6 +25,8 @@ const startPortForwardRouteInjectable = getRouteInjectable({
|
||||
const port = Number(query.get("port"));
|
||||
const forwardPort = Number(query.get("forwardPort"));
|
||||
|
||||
const proxyKubeconfigManager = di.inject(kubeconfigManagerInjectable, cluster);
|
||||
|
||||
try {
|
||||
let portForward = PortForward.getPortforward({
|
||||
clusterId: cluster.id,
|
||||
@@ -42,8 +45,9 @@ const startPortForwardRouteInjectable = getRouteInjectable({
|
||||
const thePort = 0 < forwardPort && forwardPort < 65536
|
||||
? forwardPort
|
||||
: 0;
|
||||
const proxyKubeconfigPath = await proxyKubeconfigManager.ensurePath();
|
||||
|
||||
portForward = createPortForward(await cluster.getProxyKubeconfigPath(), {
|
||||
portForward = createPortForward(proxyKubeconfigPath, {
|
||||
clusterId: cluster.id,
|
||||
kind: resourceType,
|
||||
namespace,
|
||||
|
||||
+11
-11
@@ -6,22 +6,22 @@ import { getRouteInjectable } from "../../router/router.injectable";
|
||||
import { apiPrefix } from "../../../common/vars";
|
||||
import { payloadValidatedClusterRoute } from "../../router/route";
|
||||
import Joi from "joi";
|
||||
import createResourceApplierInjectable from "../../resource-applier/create-resource-applier.injectable";
|
||||
import resourceApplierInjectable from "../../resource-applier/create-resource-applier.injectable";
|
||||
|
||||
const createResourceRouteInjectable = getRouteInjectable({
|
||||
id: "create-resource-route",
|
||||
|
||||
instantiate: (di) => {
|
||||
const createResourceApplier = di.inject(createResourceApplierInjectable);
|
||||
instantiate: (di) => payloadValidatedClusterRoute({
|
||||
method: "post",
|
||||
path: `${apiPrefix}/stack`,
|
||||
payloadValidator: Joi.string(),
|
||||
})(async ({ cluster, payload }) => {
|
||||
const resourceApplier = di.inject(resourceApplierInjectable, cluster);
|
||||
|
||||
return payloadValidatedClusterRoute({
|
||||
method: "post",
|
||||
path: `${apiPrefix}/stack`,
|
||||
payloadValidator: Joi.string(),
|
||||
})(async ({ cluster, payload }) => ({
|
||||
response: await createResourceApplier(cluster).create(payload),
|
||||
}));
|
||||
},
|
||||
return ({
|
||||
response: await resourceApplier.create(payload),
|
||||
});
|
||||
}),
|
||||
});
|
||||
|
||||
export default createResourceRouteInjectable;
|
||||
@@ -7,7 +7,7 @@ import { apiPrefix } from "../../../common/vars";
|
||||
import { payloadValidatedClusterRoute } from "../../router/route";
|
||||
import Joi from "joi";
|
||||
import type { Patch } from "rfc6902";
|
||||
import createResourceApplierInjectable from "../../resource-applier/create-resource-applier.injectable";
|
||||
import resourceApplierInjectable from "../../resource-applier/create-resource-applier.injectable";
|
||||
|
||||
interface PatchResourcePayload {
|
||||
name: string;
|
||||
@@ -40,22 +40,22 @@ const patchResourcePayloadValidator = Joi.object<PatchResourcePayload, true, Pat
|
||||
const patchResourceRouteInjectable = getRouteInjectable({
|
||||
id: "patch-resource-route",
|
||||
|
||||
instantiate: (di) => {
|
||||
const createResourceApplier = di.inject(createResourceApplierInjectable);
|
||||
instantiate: (di) => payloadValidatedClusterRoute({
|
||||
method: "patch",
|
||||
path: `${apiPrefix}/stack`,
|
||||
payloadValidator: patchResourcePayloadValidator,
|
||||
})(async ({ cluster, payload }) => {
|
||||
const resourceApplier = di.inject(resourceApplierInjectable, cluster);
|
||||
|
||||
return payloadValidatedClusterRoute({
|
||||
method: "patch",
|
||||
path: `${apiPrefix}/stack`,
|
||||
payloadValidator: patchResourcePayloadValidator,
|
||||
})(async ({ cluster, payload }) => ({
|
||||
response: await createResourceApplier(cluster).patch(
|
||||
return ({
|
||||
response: await resourceApplier.patch(
|
||||
payload.name,
|
||||
payload.kind,
|
||||
payload.patch,
|
||||
payload.ns,
|
||||
),
|
||||
}));
|
||||
},
|
||||
});
|
||||
}),
|
||||
});
|
||||
|
||||
export default patchResourceRouteInjectable;
|
||||
Reference in new issue
Block a user