kubeview-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierrc.json +11 -0
- package/CHANGELOG.md +55 -0
- package/LICENSE +21 -0
- package/README.md +251 -0
- package/RELEASE.md +154 -0
- package/TODO.md +0 -0
- package/bin/kubeview-mcp.js +274 -0
- package/bin/setup.js +368 -0
- package/dist/src/cli/cli.d.ts +3 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +23 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +45 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/kubernetes/BaseResourceOperations.d.ts +155 -0
- package/dist/src/kubernetes/BaseResourceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/BaseResourceOperations.js +136 -0
- package/dist/src/kubernetes/BaseResourceOperations.js.map +1 -0
- package/dist/src/kubernetes/CircuitBreaker.d.ts +182 -0
- package/dist/src/kubernetes/CircuitBreaker.d.ts.map +1 -0
- package/dist/src/kubernetes/CircuitBreaker.js +369 -0
- package/dist/src/kubernetes/CircuitBreaker.js.map +1 -0
- package/dist/src/kubernetes/ConnectionManager.d.ts +60 -0
- package/dist/src/kubernetes/ConnectionManager.d.ts.map +1 -0
- package/dist/src/kubernetes/ConnectionManager.js +77 -0
- package/dist/src/kubernetes/ConnectionManager.js.map +1 -0
- package/dist/src/kubernetes/ConnectionPool.d.ts +183 -0
- package/dist/src/kubernetes/ConnectionPool.d.ts.map +1 -0
- package/dist/src/kubernetes/ConnectionPool.js +437 -0
- package/dist/src/kubernetes/ConnectionPool.js.map +1 -0
- package/dist/src/kubernetes/ErrorHandler.d.ts +172 -0
- package/dist/src/kubernetes/ErrorHandler.d.ts.map +1 -0
- package/dist/src/kubernetes/ErrorHandler.js +328 -0
- package/dist/src/kubernetes/ErrorHandler.js.map +1 -0
- package/dist/src/kubernetes/ErrorHandling.d.ts +148 -0
- package/dist/src/kubernetes/ErrorHandling.d.ts.map +1 -0
- package/dist/src/kubernetes/ErrorHandling.js +304 -0
- package/dist/src/kubernetes/ErrorHandling.js.map +1 -0
- package/dist/src/kubernetes/KubernetesClient.d.ts +162 -0
- package/dist/src/kubernetes/KubernetesClient.d.ts.map +1 -0
- package/dist/src/kubernetes/KubernetesClient.js +382 -0
- package/dist/src/kubernetes/KubernetesClient.js.map +1 -0
- package/dist/src/kubernetes/ResourceOperations.d.ts +69 -0
- package/dist/src/kubernetes/ResourceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/ResourceOperations.js +99 -0
- package/dist/src/kubernetes/ResourceOperations.js.map +1 -0
- package/dist/src/kubernetes/RetryStrategy.d.ts +137 -0
- package/dist/src/kubernetes/RetryStrategy.d.ts.map +1 -0
- package/dist/src/kubernetes/RetryStrategy.js +277 -0
- package/dist/src/kubernetes/RetryStrategy.js.map +1 -0
- package/dist/src/kubernetes/RetryableOperation.d.ts +118 -0
- package/dist/src/kubernetes/RetryableOperation.d.ts.map +1 -0
- package/dist/src/kubernetes/RetryableOperation.js +233 -0
- package/dist/src/kubernetes/RetryableOperation.js.map +1 -0
- package/dist/src/kubernetes/index.d.ts +18 -0
- package/dist/src/kubernetes/index.d.ts.map +1 -0
- package/dist/src/kubernetes/index.js +28 -0
- package/dist/src/kubernetes/index.js.map +1 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts +60 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.js +306 -0
- package/dist/src/kubernetes/resources/ConfigMapOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts +55 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.js +363 -0
- package/dist/src/kubernetes/resources/CustomResourceOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.d.ts +66 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.js +234 -0
- package/dist/src/kubernetes/resources/DeploymentOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/IngressOperations.d.ts +60 -0
- package/dist/src/kubernetes/resources/IngressOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/IngressOperations.js +224 -0
- package/dist/src/kubernetes/resources/IngressOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/MetricOperations.d.ts +218 -0
- package/dist/src/kubernetes/resources/MetricOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/MetricOperations.js +893 -0
- package/dist/src/kubernetes/resources/MetricOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.d.ts +38 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.js +101 -0
- package/dist/src/kubernetes/resources/NamespaceOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts +109 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js +383 -0
- package/dist/src/kubernetes/resources/PersistentVolumeClaimOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts +97 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.js +321 -0
- package/dist/src/kubernetes/resources/PersistentVolumeOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/PodOperations.d.ts +99 -0
- package/dist/src/kubernetes/resources/PodOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/PodOperations.js +333 -0
- package/dist/src/kubernetes/resources/PodOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/SecretOperations.d.ts +71 -0
- package/dist/src/kubernetes/resources/SecretOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/SecretOperations.js +254 -0
- package/dist/src/kubernetes/resources/SecretOperations.js.map +1 -0
- package/dist/src/kubernetes/resources/ServiceOperations.d.ts +64 -0
- package/dist/src/kubernetes/resources/ServiceOperations.d.ts.map +1 -0
- package/dist/src/kubernetes/resources/ServiceOperations.js +232 -0
- package/dist/src/kubernetes/resources/ServiceOperations.js.map +1 -0
- package/dist/src/kubernetes/utils/ResourceUtils.d.ts +238 -0
- package/dist/src/kubernetes/utils/ResourceUtils.d.ts.map +1 -0
- package/dist/src/kubernetes/utils/ResourceUtils.js +439 -0
- package/dist/src/kubernetes/utils/ResourceUtils.js.map +1 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.d.ts +45 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.js +155 -0
- package/dist/src/plugins/ArgoCDToolsPlugin.js.map +1 -0
- package/dist/src/plugins/ArgoToolsPlugin.d.ts +45 -0
- package/dist/src/plugins/ArgoToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/ArgoToolsPlugin.js +149 -0
- package/dist/src/plugins/ArgoToolsPlugin.js.map +1 -0
- package/dist/src/plugins/HelmToolsPlugin.d.ts +41 -0
- package/dist/src/plugins/HelmToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/HelmToolsPlugin.js +146 -0
- package/dist/src/plugins/HelmToolsPlugin.js.map +1 -0
- package/dist/src/plugins/KubernetesToolsPlugin.d.ts +44 -0
- package/dist/src/plugins/KubernetesToolsPlugin.d.ts.map +1 -0
- package/dist/src/plugins/KubernetesToolsPlugin.js +159 -0
- package/dist/src/plugins/KubernetesToolsPlugin.js.map +1 -0
- package/dist/src/plugins/SamplePlugin.d.ts +12 -0
- package/dist/src/plugins/SamplePlugin.d.ts.map +1 -0
- package/dist/src/plugins/SamplePlugin.js +51 -0
- package/dist/src/plugins/SamplePlugin.js.map +1 -0
- package/dist/src/plugins/index.d.ts +5 -0
- package/dist/src/plugins/index.d.ts.map +1 -0
- package/dist/src/plugins/index.js +5 -0
- package/dist/src/plugins/index.js.map +1 -0
- package/dist/src/server/MCPServer.d.ts +93 -0
- package/dist/src/server/MCPServer.d.ts.map +1 -0
- package/dist/src/server/MCPServer.js +398 -0
- package/dist/src/server/MCPServer.js.map +1 -0
- package/dist/src/tools/argo/ArgoCronListTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoCronListTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoCronListTool.js +70 -0
- package/dist/src/tools/argo/ArgoCronListTool.js.map +1 -0
- package/dist/src/tools/argo/ArgoGetTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoGetTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoGetTool.js +80 -0
- package/dist/src/tools/argo/ArgoGetTool.js.map +1 -0
- package/dist/src/tools/argo/ArgoListTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoListTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoListTool.js +133 -0
- package/dist/src/tools/argo/ArgoListTool.js.map +1 -0
- package/dist/src/tools/argo/ArgoLogsTool.d.ts +10 -0
- package/dist/src/tools/argo/ArgoLogsTool.d.ts.map +1 -0
- package/dist/src/tools/argo/ArgoLogsTool.js +117 -0
- package/dist/src/tools/argo/ArgoLogsTool.js.map +1 -0
- package/dist/src/tools/argo/BaseTool.d.ts +60 -0
- package/dist/src/tools/argo/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/argo/BaseTool.js +51 -0
- package/dist/src/tools/argo/BaseTool.js.map +1 -0
- package/dist/src/tools/argo/index.d.ts +7 -0
- package/dist/src/tools/argo/index.d.ts.map +1 -0
- package/dist/src/tools/argo/index.js +6 -0
- package/dist/src/tools/argo/index.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.js +97 -0
- package/dist/src/tools/argocd/ArgoCDAppGetTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js +80 -0
- package/dist/src/tools/argocd/ArgoCDAppHistoryTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.js +128 -0
- package/dist/src/tools/argocd/ArgoCDAppListTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.js +143 -0
- package/dist/src/tools/argocd/ArgoCDAppLogsTool.js.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts +10 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js +123 -0
- package/dist/src/tools/argocd/ArgoCDAppResourcesTool.js.map +1 -0
- package/dist/src/tools/argocd/BaseTool.d.ts +71 -0
- package/dist/src/tools/argocd/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/argocd/BaseTool.js +62 -0
- package/dist/src/tools/argocd/BaseTool.js.map +1 -0
- package/dist/src/tools/argocd/index.d.ts +8 -0
- package/dist/src/tools/argocd/index.d.ts.map +1 -0
- package/dist/src/tools/argocd/index.js +7 -0
- package/dist/src/tools/argocd/index.js.map +1 -0
- package/dist/src/tools/helm/BaseTool.d.ts +51 -0
- package/dist/src/tools/helm/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/helm/BaseTool.js +42 -0
- package/dist/src/tools/helm/BaseTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetHooksTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetHooksTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetHooksTool.js +38 -0
- package/dist/src/tools/helm/HelmGetHooksTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetManifestTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetManifestTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetManifestTool.js +38 -0
- package/dist/src/tools/helm/HelmGetManifestTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetNotesTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetNotesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetNotesTool.js +38 -0
- package/dist/src/tools/helm/HelmGetNotesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.d.ts +13 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.js +124 -0
- package/dist/src/tools/helm/HelmGetResourcesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmGetValuesTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmGetValuesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmGetValuesTool.js +54 -0
- package/dist/src/tools/helm/HelmGetValuesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmHistoryTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmHistoryTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmHistoryTool.js +49 -0
- package/dist/src/tools/helm/HelmHistoryTool.js.map +1 -0
- package/dist/src/tools/helm/HelmListTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmListTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmListTool.js +107 -0
- package/dist/src/tools/helm/HelmListTool.js.map +1 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts +14 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.js +175 -0
- package/dist/src/tools/helm/HelmListWithResourcesTool.js.map +1 -0
- package/dist/src/tools/helm/HelmStatusTool.d.ts +10 -0
- package/dist/src/tools/helm/HelmStatusTool.d.ts.map +1 -0
- package/dist/src/tools/helm/HelmStatusTool.js +54 -0
- package/dist/src/tools/helm/HelmStatusTool.js.map +1 -0
- package/dist/src/tools/helm/index.d.ts +12 -0
- package/dist/src/tools/helm/index.d.ts.map +1 -0
- package/dist/src/tools/helm/index.js +11 -0
- package/dist/src/tools/helm/index.js.map +1 -0
- package/dist/src/tools/kubernetes/BaseTool.d.ts +48 -0
- package/dist/src/tools/kubernetes/BaseTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/BaseTool.js +55 -0
- package/dist/src/tools/kubernetes/BaseTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.js +28 -0
- package/dist/src/tools/kubernetes/GetConfigMapTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts +15 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.js +119 -0
- package/dist/src/tools/kubernetes/GetContainerLogsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.js +30 -0
- package/dist/src/tools/kubernetes/GetDeploymentsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetEventsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetEventsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetEventsTool.js +123 -0
- package/dist/src/tools/kubernetes/GetEventsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetIngressTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetIngressTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetIngressTool.js +35 -0
- package/dist/src/tools/kubernetes/GetIngressTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.js +40 -0
- package/dist/src/tools/kubernetes/GetMetricsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.js +33 -0
- package/dist/src/tools/kubernetes/GetNamespacesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js +92 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumeClaimsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js +88 -0
- package/dist/src/tools/kubernetes/GetPersistentVolumesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.js +100 -0
- package/dist/src/tools/kubernetes/GetPodMetricsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetPodsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetPodsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetPodsTool.js +35 -0
- package/dist/src/tools/kubernetes/GetPodsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetResourceTool.d.ts +12 -0
- package/dist/src/tools/kubernetes/GetResourceTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetResourceTool.js +79 -0
- package/dist/src/tools/kubernetes/GetResourceTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.js +49 -0
- package/dist/src/tools/kubernetes/GetSecretsTool.js.map +1 -0
- package/dist/src/tools/kubernetes/GetServicesTool.d.ts +11 -0
- package/dist/src/tools/kubernetes/GetServicesTool.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/GetServicesTool.js +35 -0
- package/dist/src/tools/kubernetes/GetServicesTool.js.map +1 -0
- package/dist/src/tools/kubernetes/index.d.ts +17 -0
- package/dist/src/tools/kubernetes/index.d.ts.map +1 -0
- package/dist/src/tools/kubernetes/index.js +16 -0
- package/dist/src/tools/kubernetes/index.js.map +1 -0
- package/dist/src/utils/CliUtils.d.ts +24 -0
- package/dist/src/utils/CliUtils.d.ts.map +1 -0
- package/dist/src/utils/CliUtils.js +159 -0
- package/dist/src/utils/CliUtils.js.map +1 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.d.ts +34 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.d.ts.map +1 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.js +20 -0
- package/dist/tests/__mocks__/@kubernetes/client-node.js.map +1 -0
- package/dist/tests/argo/ArgoGetTool.test.d.ts +2 -0
- package/dist/tests/argo/ArgoGetTool.test.d.ts.map +1 -0
- package/dist/tests/argo/ArgoGetTool.test.js +141 -0
- package/dist/tests/argo/ArgoGetTool.test.js.map +1 -0
- package/dist/tests/helm/BaseTool.test.d.ts +2 -0
- package/dist/tests/helm/BaseTool.test.d.ts.map +1 -0
- package/dist/tests/helm/BaseTool.test.js +241 -0
- package/dist/tests/helm/BaseTool.test.js.map +1 -0
- package/dist/tests/index.test.d.ts +2 -0
- package/dist/tests/index.test.d.ts.map +1 -0
- package/dist/tests/index.test.js +7 -0
- package/dist/tests/index.test.js.map +1 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.js +460 -0
- package/dist/tests/kubernetes/ConfigMapOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/ConnectionManager.test.d.ts +2 -0
- package/dist/tests/kubernetes/ConnectionManager.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ConnectionManager.test.js +97 -0
- package/dist/tests/kubernetes/ConnectionManager.test.js.map +1 -0
- package/dist/tests/kubernetes/ConnectionPool.test.d.ts +2 -0
- package/dist/tests/kubernetes/ConnectionPool.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ConnectionPool.test.js +328 -0
- package/dist/tests/kubernetes/ConnectionPool.test.js.map +1 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.js +196 -0
- package/dist/tests/kubernetes/DeploymentOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/ErrorHandling.test.d.ts +2 -0
- package/dist/tests/kubernetes/ErrorHandling.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ErrorHandling.test.js +329 -0
- package/dist/tests/kubernetes/ErrorHandling.test.js.map +1 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts +2 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.js +150 -0
- package/dist/tests/kubernetes/GetPodMetricsTool.test.js.map +1 -0
- package/dist/tests/kubernetes/KubernetesClient.test.d.ts +2 -0
- package/dist/tests/kubernetes/KubernetesClient.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/KubernetesClient.test.js +371 -0
- package/dist/tests/kubernetes/KubernetesClient.test.js.map +1 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts +2 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.js +49 -0
- package/dist/tests/kubernetes/MetricOperations.parsing.test.js.map +1 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.js +115 -0
- package/dist/tests/kubernetes/NamespaceOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/PodOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/PodOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/PodOperations.test.js +209 -0
- package/dist/tests/kubernetes/PodOperations.test.js.map +1 -0
- package/dist/tests/kubernetes/RetryStrategy.test.d.ts +2 -0
- package/dist/tests/kubernetes/RetryStrategy.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/RetryStrategy.test.js +419 -0
- package/dist/tests/kubernetes/RetryStrategy.test.js.map +1 -0
- package/dist/tests/kubernetes/ServiceOperations.test.d.ts +2 -0
- package/dist/tests/kubernetes/ServiceOperations.test.d.ts.map +1 -0
- package/dist/tests/kubernetes/ServiceOperations.test.js +159 -0
- package/dist/tests/kubernetes/ServiceOperations.test.js.map +1 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts +2 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.d.ts.map +1 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.js +153 -0
- package/dist/tests/plugins/KubernetesToolsPlugin.test.js.map +1 -0
- package/dist/tests/server/MCPServer.integration.test.d.ts +2 -0
- package/dist/tests/server/MCPServer.integration.test.d.ts.map +1 -0
- package/dist/tests/server/MCPServer.integration.test.js +244 -0
- package/dist/tests/server/MCPServer.integration.test.js.map +1 -0
- package/dist/tests/server/MCPServer.test.d.ts +2 -0
- package/dist/tests/server/MCPServer.test.d.ts.map +1 -0
- package/dist/tests/server/MCPServer.test.js +257 -0
- package/dist/tests/server/MCPServer.test.js.map +1 -0
- package/package.json +85 -0
- package/src/cli/cli.ts +25 -0
- package/src/cli/run-command.js +391 -0
- package/src/index.ts +46 -0
- package/src/kubernetes/BaseResourceOperations.ts +286 -0
- package/src/kubernetes/CircuitBreaker.ts +485 -0
- package/src/kubernetes/ConnectionManager.ts +114 -0
- package/src/kubernetes/ConnectionPool.ts +551 -0
- package/src/kubernetes/ErrorHandler.ts +436 -0
- package/src/kubernetes/ErrorHandling.ts +401 -0
- package/src/kubernetes/KubernetesClient.ts +500 -0
- package/src/kubernetes/README.md +349 -0
- package/src/kubernetes/ResourceOperations.ts +116 -0
- package/src/kubernetes/RetryStrategy.ts +365 -0
- package/src/kubernetes/RetryableOperation.ts +313 -0
- package/src/kubernetes/docs/ResourceOperations.md +606 -0
- package/src/kubernetes/index.ts +116 -0
- package/src/kubernetes/resources/ConfigMapOperations.ts +367 -0
- package/src/kubernetes/resources/CustomResourceOperations.ts +392 -0
- package/src/kubernetes/resources/DeploymentOperations.ts +294 -0
- package/src/kubernetes/resources/IngressOperations.ts +277 -0
- package/src/kubernetes/resources/MetricOperations.ts +1159 -0
- package/src/kubernetes/resources/NamespaceOperations.ts +129 -0
- package/src/kubernetes/resources/PersistentVolumeClaimOperations.ts +516 -0
- package/src/kubernetes/resources/PersistentVolumeOperations.ts +438 -0
- package/src/kubernetes/resources/PodOperations.ts +417 -0
- package/src/kubernetes/resources/SecretOperations.ts +304 -0
- package/src/kubernetes/resources/ServiceOperations.ts +283 -0
- package/src/kubernetes/utils/ResourceUtils.ts +553 -0
- package/src/plugins/ArgoCDToolsPlugin.ts +189 -0
- package/src/plugins/ArgoToolsPlugin.ts +180 -0
- package/src/plugins/HelmToolsPlugin.ts +180 -0
- package/src/plugins/KubernetesToolsPlugin.ts +198 -0
- package/src/plugins/SamplePlugin.ts +60 -0
- package/src/plugins/index.ts +4 -0
- package/src/server/MCPServer.ts +500 -0
- package/src/tools/argo/ArgoCronListTool.ts +78 -0
- package/src/tools/argo/ArgoGetTool.ts +91 -0
- package/src/tools/argo/ArgoListTool.ts +143 -0
- package/src/tools/argo/ArgoLogsTool.ts +131 -0
- package/src/tools/argo/BaseTool.ts +69 -0
- package/src/tools/argo/index.ts +6 -0
- package/src/tools/argocd/ArgoCDAppGetTool.ts +109 -0
- package/src/tools/argocd/ArgoCDAppHistoryTool.ts +91 -0
- package/src/tools/argocd/ArgoCDAppListTool.ts +144 -0
- package/src/tools/argocd/ArgoCDAppLogsTool.ts +162 -0
- package/src/tools/argocd/ArgoCDAppResourcesTool.ts +139 -0
- package/src/tools/argocd/BaseTool.ts +83 -0
- package/src/tools/argocd/index.ts +7 -0
- package/src/tools/helm/BaseTool.ts +60 -0
- package/src/tools/helm/HelmGetHooksTool.ts +44 -0
- package/src/tools/helm/HelmGetManifestTool.ts +44 -0
- package/src/tools/helm/HelmGetNotesTool.ts +44 -0
- package/src/tools/helm/HelmGetResourcesTool.ts +140 -0
- package/src/tools/helm/HelmGetValuesTool.ts +62 -0
- package/src/tools/helm/HelmHistoryTool.ts +56 -0
- package/src/tools/helm/HelmListTool.ts +107 -0
- package/src/tools/helm/HelmListWithResourcesTool.ts +194 -0
- package/src/tools/helm/HelmStatusTool.ts +62 -0
- package/src/tools/helm/index.ts +11 -0
- package/src/tools/kubernetes/BaseTool.ts +76 -0
- package/src/tools/kubernetes/GetConfigMapTool.ts +33 -0
- package/src/tools/kubernetes/GetContainerLogsTool.ts +140 -0
- package/src/tools/kubernetes/GetDeploymentsTool.ts +33 -0
- package/src/tools/kubernetes/GetEventsTool.ts +133 -0
- package/src/tools/kubernetes/GetIngressTool.ts +39 -0
- package/src/tools/kubernetes/GetMetricsTool.ts +53 -0
- package/src/tools/kubernetes/GetNamespacesTool.ts +36 -0
- package/src/tools/kubernetes/GetPersistentVolumeClaimsTool.ts +113 -0
- package/src/tools/kubernetes/GetPersistentVolumesTool.ts +107 -0
- package/src/tools/kubernetes/GetPodMetricsTool.ts +113 -0
- package/src/tools/kubernetes/GetPodsTool.ts +39 -0
- package/src/tools/kubernetes/GetResourceTool.ts +90 -0
- package/src/tools/kubernetes/GetSecretsTool.ts +55 -0
- package/src/tools/kubernetes/GetServicesTool.ts +39 -0
- package/src/tools/kubernetes/index.ts +16 -0
- package/src/utils/CliUtils.ts +207 -0
- package/tsconfig.json +36 -0
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
import * as k8s from '@kubernetes/client-node';
|
|
2
|
+
import { Logger } from 'winston';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { homedir } from 'os';
|
|
5
|
+
import { existsSync } from 'fs';
|
|
6
|
+
import { ResourceOperations } from './ResourceOperations.js';
|
|
7
|
+
import type { ApiType, Configuration } from '@kubernetes/client-node';
|
|
8
|
+
// import { URL } from 'url';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Configuration options for KubernetesClient
|
|
12
|
+
*/
|
|
13
|
+
export interface KubernetesClientConfig {
|
|
14
|
+
/**
|
|
15
|
+
* Path to kubeconfig file. If not specified, will try default locations
|
|
16
|
+
*/
|
|
17
|
+
kubeConfigPath?: string;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Specific context to use from kubeconfig. If not specified, uses current context
|
|
21
|
+
*/
|
|
22
|
+
context?: string;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Whether to use in-cluster configuration (for pods running inside k8s)
|
|
26
|
+
*/
|
|
27
|
+
inCluster?: boolean;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Bearer token for authentication
|
|
31
|
+
*/
|
|
32
|
+
bearerToken?: string;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Kubernetes API server URL (used with bearerToken)
|
|
36
|
+
*/
|
|
37
|
+
apiServerUrl?: string;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Skip TLS verification (not recommended for production)
|
|
41
|
+
*/
|
|
42
|
+
skipTlsVerify?: boolean;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Logger instance for debug output
|
|
46
|
+
*/
|
|
47
|
+
logger?: Logger;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Authentication method types
|
|
52
|
+
*/
|
|
53
|
+
export enum AuthMethod {
|
|
54
|
+
KUBECONFIG = 'kubeconfig',
|
|
55
|
+
IN_CLUSTER = 'in-cluster',
|
|
56
|
+
TOKEN = 'token',
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* KubernetesClient provides a high-level interface for interacting with Kubernetes clusters
|
|
61
|
+
*/
|
|
62
|
+
export class KubernetesClient {
|
|
63
|
+
private kc: k8s.KubeConfig;
|
|
64
|
+
private coreV1Api!: k8s.CoreV1Api;
|
|
65
|
+
private appsV1Api!: k8s.AppsV1Api;
|
|
66
|
+
private batchV1Api!: k8s.BatchV1Api;
|
|
67
|
+
private networkingV1Api!: k8s.NetworkingV1Api;
|
|
68
|
+
private authMethod: AuthMethod;
|
|
69
|
+
private logger?: Logger;
|
|
70
|
+
private _resources: ResourceOperations;
|
|
71
|
+
private _customObjectsApi?: k8s.CustomObjectsApi;
|
|
72
|
+
|
|
73
|
+
constructor(private config: KubernetesClientConfig = {}) {
|
|
74
|
+
this.logger = config.logger;
|
|
75
|
+
this.kc = new k8s.KubeConfig();
|
|
76
|
+
this.authMethod = this.detectAuthMethod();
|
|
77
|
+
this.initializeClient();
|
|
78
|
+
|
|
79
|
+
this.config.skipTlsVerify = true;
|
|
80
|
+
|
|
81
|
+
this.initializeApiClients();
|
|
82
|
+
|
|
83
|
+
this._resources = new ResourceOperations(this);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Detect which authentication method to use based on configuration
|
|
88
|
+
*/
|
|
89
|
+
private detectAuthMethod(): AuthMethod {
|
|
90
|
+
if (this.config.inCluster) {
|
|
91
|
+
return AuthMethod.IN_CLUSTER;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (this.config.bearerToken && this.config.apiServerUrl) {
|
|
95
|
+
return AuthMethod.TOKEN;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return AuthMethod.KUBECONFIG;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Initialize the Kubernetes client based on the detected auth method
|
|
103
|
+
*/
|
|
104
|
+
private initializeClient(): void {
|
|
105
|
+
try {
|
|
106
|
+
switch (this.authMethod) {
|
|
107
|
+
case AuthMethod.IN_CLUSTER:
|
|
108
|
+
this.initializeInClusterConfig();
|
|
109
|
+
break;
|
|
110
|
+
|
|
111
|
+
case AuthMethod.TOKEN:
|
|
112
|
+
this.initializeTokenConfig();
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case AuthMethod.KUBECONFIG:
|
|
116
|
+
default:
|
|
117
|
+
this.initializeKubeConfig();
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
this.logger?.info(`Kubernetes client initialized using ${this.authMethod} authentication`);
|
|
122
|
+
} catch (error) {
|
|
123
|
+
const message = `Failed to initialize Kubernetes client: ${error instanceof Error ? error.message : String(error)}`;
|
|
124
|
+
this.logger?.error(message);
|
|
125
|
+
throw new Error(message);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Initialize using kubeconfig file
|
|
131
|
+
*/
|
|
132
|
+
private initializeKubeConfig(): void {
|
|
133
|
+
const kubeConfigPath = this.getKubeConfigPath();
|
|
134
|
+
|
|
135
|
+
if (!existsSync(kubeConfigPath)) {
|
|
136
|
+
throw new Error(`Kubeconfig file not found at: ${kubeConfigPath}`);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
this.kc.loadFromFile(kubeConfigPath);
|
|
140
|
+
|
|
141
|
+
if (this.config.context) {
|
|
142
|
+
this.kc.setCurrentContext(this.config.context);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
this.logger?.debug(`Loaded kubeconfig from: ${kubeConfigPath}`);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Initialize using in-cluster configuration
|
|
150
|
+
*/
|
|
151
|
+
private initializeInClusterConfig(): void {
|
|
152
|
+
this.kc.loadFromCluster();
|
|
153
|
+
this.logger?.debug('Loaded in-cluster configuration');
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Initialize using bearer token
|
|
158
|
+
*/
|
|
159
|
+
private initializeTokenConfig(): void {
|
|
160
|
+
if (!this.config.bearerToken || !this.config.apiServerUrl) {
|
|
161
|
+
throw new Error('Bearer token and API server URL are required for token authentication');
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const cluster: k8s.Cluster = {
|
|
165
|
+
name: 'default',
|
|
166
|
+
server: this.config.apiServerUrl,
|
|
167
|
+
skipTLSVerify: this.config.skipTlsVerify || false,
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
const user: k8s.User = {
|
|
171
|
+
name: 'default',
|
|
172
|
+
token: this.config.bearerToken,
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
const context: k8s.Context = {
|
|
176
|
+
name: 'default',
|
|
177
|
+
cluster: cluster.name,
|
|
178
|
+
user: user.name,
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
this.kc.loadFromOptions({
|
|
182
|
+
clusters: [cluster],
|
|
183
|
+
users: [user],
|
|
184
|
+
contexts: [context],
|
|
185
|
+
currentContext: context.name,
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
this.logger?.debug(`Configured token authentication for: ${this.config.apiServerUrl}`);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Get the path to the kubeconfig file
|
|
193
|
+
*/
|
|
194
|
+
private getKubeConfigPath(): string {
|
|
195
|
+
if (this.config.kubeConfigPath) {
|
|
196
|
+
return this.config.kubeConfigPath;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Check KUBECONFIG environment variable
|
|
200
|
+
const kubeConfigEnv = process.env.KUBECONFIG;
|
|
201
|
+
if (kubeConfigEnv) {
|
|
202
|
+
// KUBECONFIG can contain multiple paths separated by :
|
|
203
|
+
const paths = kubeConfigEnv.split(':');
|
|
204
|
+
for (const path of paths) {
|
|
205
|
+
if (existsSync(path)) {
|
|
206
|
+
return path;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Default location
|
|
212
|
+
return join(homedir(), '.kube', 'config');
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Initialize API clients for different Kubernetes resources
|
|
217
|
+
*/
|
|
218
|
+
private initializeApiClients(): void {
|
|
219
|
+
this.coreV1Api = this.kc.makeApiClient(k8s.CoreV1Api);
|
|
220
|
+
this.appsV1Api = this.kc.makeApiClient(k8s.AppsV1Api);
|
|
221
|
+
this.batchV1Api = this.kc.makeApiClient(k8s.BatchV1Api);
|
|
222
|
+
this.networkingV1Api = this.kc.makeApiClient(k8s.NetworkingV1Api);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Get the current cluster information
|
|
227
|
+
*/
|
|
228
|
+
public getCurrentCluster(): k8s.Cluster | null {
|
|
229
|
+
const currentContext = this.kc.getCurrentContext();
|
|
230
|
+
const contexts = this.kc.getContexts();
|
|
231
|
+
const context = contexts.find((c) => c.name === currentContext);
|
|
232
|
+
|
|
233
|
+
if (!context) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const clusters = this.kc.getClusters();
|
|
238
|
+
return clusters.find((c) => c.name === context.cluster) || null;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Get the current context name
|
|
243
|
+
*/
|
|
244
|
+
public getCurrentContext(): string {
|
|
245
|
+
return this.kc.getCurrentContext();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Get all available contexts
|
|
250
|
+
*/
|
|
251
|
+
public getContexts(): string[] {
|
|
252
|
+
return this.kc.getContexts().map((ctx) => ctx.name);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Refresh the current context by reloading the kubeconfig file
|
|
257
|
+
* This ensures we always use the latest context when executing operations
|
|
258
|
+
*/
|
|
259
|
+
public async refreshCurrentContext(): Promise<void> {
|
|
260
|
+
// Only refresh for kubeconfig-based authentication
|
|
261
|
+
if (this.authMethod !== AuthMethod.KUBECONFIG) {
|
|
262
|
+
this.logger?.debug('Skipping context refresh for non-kubeconfig authentication');
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
try {
|
|
267
|
+
const kubeConfigPath = this.getKubeConfigPath();
|
|
268
|
+
|
|
269
|
+
if (!existsSync(kubeConfigPath)) {
|
|
270
|
+
this.logger?.warn(`Kubeconfig file not found at: ${kubeConfigPath} during refresh`);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// Store the old context to detect changes
|
|
275
|
+
const oldContext = this.kc.getCurrentContext();
|
|
276
|
+
|
|
277
|
+
// Reload the kubeconfig file to get the latest context
|
|
278
|
+
this.kc.loadFromFile(kubeConfigPath);
|
|
279
|
+
|
|
280
|
+
const newContext = this.kc.getCurrentContext();
|
|
281
|
+
|
|
282
|
+
// If context changed, reinitialize API clients
|
|
283
|
+
if (oldContext !== newContext) {
|
|
284
|
+
this.initializeApiClients();
|
|
285
|
+
this.logger?.info(
|
|
286
|
+
`Context changed from '${oldContext}' to '${newContext}' - API clients reinitialized`,
|
|
287
|
+
);
|
|
288
|
+
} else {
|
|
289
|
+
this.logger?.debug(`Context unchanged: '${newContext}'`);
|
|
290
|
+
}
|
|
291
|
+
} catch (error) {
|
|
292
|
+
this.logger?.error(
|
|
293
|
+
`Failed to refresh current context: ${error instanceof Error ? error.message : String(error)}`,
|
|
294
|
+
);
|
|
295
|
+
// Don't throw - we'll continue with the existing context
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Switch to a different context
|
|
301
|
+
*/
|
|
302
|
+
public async switchContext(contextName: string): Promise<void> {
|
|
303
|
+
const contexts = this.kc.getContexts();
|
|
304
|
+
const context = contexts.find((c) => c.name === contextName);
|
|
305
|
+
|
|
306
|
+
if (!context) {
|
|
307
|
+
throw new Error(`Context not found: ${contextName}`);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
this.kc.setCurrentContext(contextName);
|
|
311
|
+
this.initializeApiClients();
|
|
312
|
+
|
|
313
|
+
this.logger?.info(`Switched to context: ${contextName}`);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Get the authentication method being used
|
|
318
|
+
*/
|
|
319
|
+
public getAuthMethod(): AuthMethod {
|
|
320
|
+
return this.authMethod;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Test the connection to the Kubernetes API server
|
|
325
|
+
*/
|
|
326
|
+
public async testConnection(): Promise<boolean> {
|
|
327
|
+
try {
|
|
328
|
+
await this.coreV1Api.listNamespace();
|
|
329
|
+
this.logger?.debug('Successfully connected to Kubernetes API server');
|
|
330
|
+
return true;
|
|
331
|
+
} catch (error) {
|
|
332
|
+
this.logger?.error(`Failed to connect to Kubernetes API server: ${error}`);
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Factory method to create a KubernetesClient from a kubeconfig file
|
|
339
|
+
*/
|
|
340
|
+
public static fromKubeConfig(
|
|
341
|
+
kubeConfigPath?: string,
|
|
342
|
+
context?: string,
|
|
343
|
+
logger?: Logger,
|
|
344
|
+
): KubernetesClient {
|
|
345
|
+
return new KubernetesClient({
|
|
346
|
+
kubeConfigPath,
|
|
347
|
+
context,
|
|
348
|
+
logger,
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Factory method to create a KubernetesClient for in-cluster use
|
|
354
|
+
*/
|
|
355
|
+
public static fromInCluster(logger?: Logger): KubernetesClient {
|
|
356
|
+
return new KubernetesClient({
|
|
357
|
+
inCluster: true,
|
|
358
|
+
logger,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Factory method to create a KubernetesClient using a bearer token
|
|
364
|
+
*/
|
|
365
|
+
public static fromToken(
|
|
366
|
+
apiServerUrl: string,
|
|
367
|
+
bearerToken: string,
|
|
368
|
+
skipTlsVerify = false,
|
|
369
|
+
logger?: Logger,
|
|
370
|
+
): KubernetesClient {
|
|
371
|
+
return new KubernetesClient({
|
|
372
|
+
apiServerUrl,
|
|
373
|
+
bearerToken,
|
|
374
|
+
skipTlsVerify,
|
|
375
|
+
logger,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Getters for API clients
|
|
380
|
+
public get core(): k8s.CoreV1Api {
|
|
381
|
+
return this.coreV1Api;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
public get apps(): k8s.AppsV1Api {
|
|
385
|
+
return this.appsV1Api;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
public get batch(): k8s.BatchV1Api {
|
|
389
|
+
return this.batchV1Api;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
public get networking(): k8s.NetworkingV1Api {
|
|
393
|
+
return this.networkingV1Api;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
public get kubeConfig(): k8s.KubeConfig {
|
|
397
|
+
return this.kc;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Get resource operations for working with Kubernetes resources
|
|
402
|
+
*/
|
|
403
|
+
public get resources(): ResourceOperations {
|
|
404
|
+
return this._resources;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Returns a Kubernetes API client for the specified API constructor.
|
|
409
|
+
* This allows for accessing various Kubernetes APIs in a type-safe manner.
|
|
410
|
+
* @param apiClientConstructor The constructor of the API client to instantiate (e.g., k8s.CoreV1Api).
|
|
411
|
+
* It should conform to `new (config: Configuration) => T`.
|
|
412
|
+
* @returns An instance of the requested API client.
|
|
413
|
+
*/
|
|
414
|
+
public getGenericApiClient<T extends ApiType>(
|
|
415
|
+
apiClientConstructor: new (config: Configuration) => T,
|
|
416
|
+
): T {
|
|
417
|
+
return this.kc.makeApiClient(apiClientConstructor);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Makes a generic GET request to the Kubernetes API server.
|
|
422
|
+
* This is useful for accessing API endpoints not covered by specific client APIs (e.g., custom resources or aggregated APIs like metrics.k8s.io).
|
|
423
|
+
* @param path The API path to request (e.g., '/apis/metrics.k8s.io/v1beta1/nodes').
|
|
424
|
+
* @returns A promise that resolves with the API response.
|
|
425
|
+
* @throws Will throw an error if the request fails.
|
|
426
|
+
*/
|
|
427
|
+
public async getRaw<T = any>(path: string): Promise<T> {
|
|
428
|
+
this.logger?.debug(`Making authenticated raw request to: ${path}`);
|
|
429
|
+
|
|
430
|
+
try {
|
|
431
|
+
// Use the customObjects API as a workaround for raw requests
|
|
432
|
+
// Since metrics are served by the metrics-server through custom resources
|
|
433
|
+
if (path.includes('metrics.k8s.io')) {
|
|
434
|
+
const group = 'metrics.k8s.io';
|
|
435
|
+
const version = 'v1beta1';
|
|
436
|
+
|
|
437
|
+
if (path.includes('/nodes')) {
|
|
438
|
+
return (await this.customObjects.listClusterCustomObject({
|
|
439
|
+
group: group,
|
|
440
|
+
version: version,
|
|
441
|
+
plural: 'nodes',
|
|
442
|
+
})) as T;
|
|
443
|
+
} else if (path.includes('/pods')) {
|
|
444
|
+
// Handle namespaced vs cluster-wide pod metrics
|
|
445
|
+
const namespacedMatch = path.match(/\/namespaces\/([\w-]+)\/pods/);
|
|
446
|
+
if (namespacedMatch) {
|
|
447
|
+
const namespace = namespacedMatch[1];
|
|
448
|
+
return (await this.customObjects.listNamespacedCustomObject({
|
|
449
|
+
group: group,
|
|
450
|
+
version: version,
|
|
451
|
+
namespace: namespace,
|
|
452
|
+
plural: 'pods',
|
|
453
|
+
})) as T;
|
|
454
|
+
} else {
|
|
455
|
+
return (await this.customObjects.listClusterCustomObject({
|
|
456
|
+
group: group,
|
|
457
|
+
version: version,
|
|
458
|
+
plural: 'pods',
|
|
459
|
+
})) as T;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// For non-metrics paths, throw an error explaining the limitation
|
|
465
|
+
throw new Error(
|
|
466
|
+
`Raw requests are only supported for metrics.k8s.io API paths. Attempted path: ${path}`,
|
|
467
|
+
);
|
|
468
|
+
} catch (error: any) {
|
|
469
|
+
this.logger?.error(`Error making raw request to ${path}: ${error.message}`);
|
|
470
|
+
|
|
471
|
+
// If it's a 403 error, provide more helpful debugging information
|
|
472
|
+
if (error.statusCode === 403 || (error.response && error.response.statusCode === 403)) {
|
|
473
|
+
this.logger?.error(
|
|
474
|
+
'Authentication failed - check that your kubeconfig is valid and you have the necessary permissions',
|
|
475
|
+
);
|
|
476
|
+
this.logger?.error(
|
|
477
|
+
'If using exec-based auth, ensure the authentication plugin is properly configured',
|
|
478
|
+
);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
throw error;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
public get customObjects(): k8s.CustomObjectsApi {
|
|
486
|
+
if (!this._customObjectsApi) {
|
|
487
|
+
this._customObjectsApi = this.kc.makeApiClient(k8s.CustomObjectsApi);
|
|
488
|
+
}
|
|
489
|
+
return this._customObjectsApi;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Sets whether to skip TLS verification for API requests
|
|
494
|
+
* @param skip True to skip TLS verification, false otherwise
|
|
495
|
+
*/
|
|
496
|
+
public setSkipTlsVerify(skip: boolean): void {
|
|
497
|
+
this.config.skipTlsVerify = skip;
|
|
498
|
+
this.logger?.debug(`TLS verification set to: ${!skip}`);
|
|
499
|
+
}
|
|
500
|
+
}
|