@vfarcic/dot-ai
Version:
Universal Kubernetes application deployment agent with CLI and MCP interfaces
162 lines • 4.36 kB
TypeScript
/**
* Kubernetes Discovery Module
*
* Handles cluster connection, resource discovery, and capability detection
*/
import { KubectlConfig } from './kubernetes-utils';
export interface ClusterInfo {
type: string;
version: string;
capabilities: string[];
}
export interface ResourceMap {
resources: EnhancedResource[];
custom: EnhancedCRD[];
}
export interface CRD {
name: string;
group: string;
version: string;
schema: any;
}
export interface EnhancedCRD {
name: string;
group: string;
version: string;
kind: string;
scope: 'Namespaced' | 'Cluster';
versions: Array<{
name: string;
served: boolean;
storage: boolean;
schema?: any;
}>;
schema?: any;
}
export interface EnhancedResource {
name: string;
namespaced: boolean;
kind: string;
shortNames: string[];
apiVersion: string;
group: string;
}
export interface ResourceExplanation {
kind: string;
version: string;
group: string;
description: string;
fields: Array<{
name: string;
type: string;
description: string;
required: boolean;
}>;
}
export interface ClusterFingerprint {
version: string;
platform: string;
nodeCount: number;
namespaceCount: number;
crdCount: number;
capabilities: string[];
features: {
deployments: number;
services: number;
pods: number;
configMaps: number;
secrets: number;
};
networking: {
cni: string;
serviceSubnet: string;
podSubnet: string;
dnsProvider: string;
};
security: {
rbacEnabled: boolean;
podSecurityPolicy: boolean;
networkPolicies: boolean;
admissionControllers: string[];
};
storage: {
storageClasses: string[];
persistentVolumes: number;
csiDrivers: string[];
};
}
export interface KubernetesDiscoveryConfig {
kubeconfigPath?: string;
}
export declare class KubernetesDiscovery {
private kc;
private k8sApi;
private connected;
private kubeconfigPath;
constructor(config?: KubernetesDiscoveryConfig);
/**
* Resolves kubeconfig path following priority order:
* 1. Custom path provided in constructor
* 2. KUBECONFIG environment variable (first path if multiple)
* 3. Default ~/.kube/config
*/
private resolveKubeconfigPath;
/**
* Get the current kubeconfig path being used
*/
getKubeconfigPath(): string;
/**
* Set a new kubeconfig path (will require reconnection)
*/
setKubeconfigPath(newPath: string): void;
connect(): Promise<void>;
isConnected(): boolean;
getClusterInfo(): Promise<ClusterInfo>;
private detectClusterType;
private detectCapabilities;
discoverResources(): Promise<ResourceMap>;
/**
* Execute kubectl command with proper configuration
*/
/**
* Execute kubectl command with proper configuration
* Delegates to shared utility function
*/
executeKubectl(args: string[], config?: KubectlConfig): Promise<string>;
discoverCRDs(options?: {
group?: string;
}): Promise<EnhancedCRD[]>;
discoverCRDDetails(): Promise<CRD[]>;
getAPIResources(options?: {
group?: string;
}): Promise<EnhancedResource[]>;
explainResource(resource: string, options?: {
field?: string;
}): Promise<string>;
fingerprintCluster(): Promise<ClusterFingerprint>;
private getResourceCounts;
private getNetworkingInfo;
private getSecurityInfo;
private getStorageInfo;
private extractSubnet;
getResourceSchema(_kind: string, _apiVersion: string): Promise<any>;
getNamespaces(): Promise<string[]>;
namespaceExists(namespace: string): Promise<boolean>;
/**
* Discover what capabilities a CRD provides by analyzing related resources
*/
private discoverCRDCapabilities;
/**
* Find Compositions associated with this CRD
*/
private discoverAssociatedCompositions;
/**
* Analyze what resources a Composition creates
*/
private analyzeCompositionCapabilities;
/**
* Build an enhanced description that includes discovered capabilities
*/
private buildEnhancedDescription;
}
//# sourceMappingURL=discovery.d.ts.map