UNPKG

@chimoney.io/iaas-k8s-deployment

Version:

Kubernetes Infrastructure as a Service deployment package for streamlined multi-cloud environments

303 lines (274 loc) 8.25 kB
// ============================================================================= // Shared Type Definitions // ============================================================================= export type LogLevel = "debug" | "info" | "warn" | "error" | "silent"; export type DeploymentAction = | "up" | "preview" | "destroy" | "outputs" | "refresh" | "rollback"; export type DeploymentStatus = | "initializing" | "configuring" | "deploying" | "completed" | "failed" | "rolling-back"; export interface Logger { debug(message: string, ...args: any[]): void; info(message: string, ...args: any[]): void; warn(message: string, ...args: any[]): void; error(message: string, ...args: any[]): void; } export interface DeploymentProgress { status: DeploymentStatus; message: string; timestamp: Date; metadata?: Record<string, any>; } export interface DeploymentOptions { action: DeploymentAction; stackName: string; secretsJson: string; companyName: string; workDir?: string; helmChartPath?: string; logLevel?: LogLevel; onProgress?: (progress: DeploymentProgress) => void; validateConfig?: boolean; enableRollback?: boolean; timeout?: number; // in seconds // Enhanced cloud configuration cloudProvider?: "aws" | "gcp"; cloudConfig?: AwsCloudConfig | GcpCloudConfig; autoSetupConfig?: boolean; // Automatically setup Pulumi config // Namespace-based deployment support namespace?: string; // Kubernetes namespace for the deployment deploymentType: "shared" | "dedicated"; // Deployment strategy // Tier-based resource allocation support planTier?: import("./plans.js").PlanTier; // Plan tier for shared deployments billingAccountId?: string; // Billing account for cost attribution // Dynamic Helm values configuration defaultDomain?: string; // Default domain for constructing hostnames (e.g., "example.com") authDomain?: string; // Domain for authentication service (e.g., "auth-ilp.example.com") openPaymentsDomain?: string; // Domain for open payments service (e.g., "ilp.example.com") connectorDomain?: string; // Domain for connector service (e.g., "ilp-connector.example.com") // Service enablement flags enableRafikiAuth?: boolean; // Enable rafiki-auth service enableRafikiBackend?: boolean; // Enable rafiki-backend service enableNginx?: boolean; // Enable nginx service enableRedis?: boolean; // Enable redis service graphqlAllowedIps?: string[]; // Allowed IPs for GraphQL API access // Image configuration rafikiAuthImage?: { repository?: string; tag?: string; pullPolicy?: string; }; rafikiBackendImage?: { repository?: string; tag?: string; pullPolicy?: string; }; nginxImage?: { repository?: string; tag?: string; pullPolicy?: string; }; redisImage?: { repository?: string; tag?: string; pullPolicy?: string; }; // Ingress configuration ingressClassName?: string; // Ingress class name for the Ingress resource // HPA configuration for dedicated deployments dedicatedDeploymentHpaEnabledByDefault?: boolean; // Control default HPA enablement for dedicated deployments // Network policy configuration for shared deployments sharedDeploymentNetworkPolicyEnabled?: boolean; // Enable network policies for shared deployments ingressControllerNamespace?: string; // Namespace of the ingress controller ingressControllerPodSelectorLabels?: Record<string, string>; // Pod selector labels for ingress controller allowedExternalEgressRules?: Array<{ cidr: string; ports?: Array<{ port: number; protocol: "TCP" | "UDP"; }>; }>; // External egress rules for network policies // Additional monitoring and cloud configuration properties prometheusFqdn?: string; // FQDN for Prometheus monitoring clusterName?: string; // Kubernetes cluster name environment?: string; // Deployment environment (dev, staging, prod) managedCertificateEnabled?: boolean; // Enable managed certificates (GCP/AWS) createKubernetesSecrets?: boolean; // Enable Kubernetes secrets creation } export interface AwsCloudConfig { region: string; profile?: string; accessKeyId?: string; secretAccessKey?: string; } export interface GcpCloudConfig { project: string; region: string; zone?: string; credentials?: string; // Path to service account JSON } export type CloudConfig = AwsCloudConfig | GcpCloudConfig; export interface DeploymentResult { success: boolean; outputs?: any; summary?: any; error?: string; kubeconfig?: string; rollbackPerformed?: boolean; duration?: number; // in milliseconds costMonitoring?: { enabled: boolean; namespace?: string; tier?: string; budget?: number; currency?: string; dashboardUrl?: string; reason?: string; error?: string; }; } export interface FieldValidationError { field: string; message: string; value?: any; } export interface DeploymentConfig { stackName: string; secretsJson: string; companyName: string; cloudProvider?: "aws" | "gcp"; helmChartPath?: string; cloudConfig?: CloudConfig; namespace?: string; deploymentType?: "shared" | "dedicated"; // Tier-based configuration planTier?: import("./plans.js").PlanTier; kubecostEnabled?: boolean; // Dynamic Helm values configuration defaultDomain?: string; enableRafikiAuth?: boolean; enableRafikiBackend?: boolean; enableNginx?: boolean; enableRedis?: boolean; rafikiAuthImage?: { repository?: string; tag?: string; pullPolicy?: string; }; rafikiBackendImage?: { repository?: string; tag?: string; pullPolicy?: string; }; nginxImage?: { repository?: string; tag?: string; pullPolicy?: string; }; redisImage?: { repository?: string; tag?: string; pullPolicy?: string; }; ingressClassName?: string; dedicatedDeploymentHpaEnabledByDefault?: boolean; sharedDeploymentNetworkPolicyEnabled?: boolean; ingressControllerNamespace?: string; ingressControllerPodSelectorLabels?: Record<string, string>; allowedExternalEgressRules?: Array<{ cidr: string; ports?: Array<{ port: number; protocol: "TCP" | "UDP"; }>; }>; } // Namespace-specific configuration export interface NamespaceConfig { name: string; labels?: Record<string, string>; annotations?: Record<string, string>; resourceQuota?: { requests?: { cpu?: string; memory?: string; storage?: string; }; limits?: { cpu?: string; memory?: string; storage?: string; }; persistentvolumeclaims?: string; }; } // Shared cluster configuration export interface SharedClusterConfig { clusterName: string; kubeconfig?: string; namespaces?: NamespaceConfig[]; staticIpName?: string; // For GCP shared deployments region?: string; zone?: string; project?: string; // For GCP vpcId?: string; // For AWS kubecostEnabled?: boolean; // Whether Kubecost is installed tierCapacity?: { maxBasicTenants: number; maxStandardTenants: number; maxPremiumTenants: number; maxEnterpriseTenants: number; }; } // Tier-based deployment result export interface TierDeploymentResult extends DeploymentResult { tierInfo?: { planTier: import("./plans.js").PlanTier; resourceAllocation: import("./plans.js").TierResourceAllocation; costEstimate?: { monthly: number; currency: string; }; costMonitoring?: { enabled: boolean; dashboardUrl?: string; budgetAllocated?: number; budgetThresholds?: number[]; alertsEnabled?: boolean; }; }; } // Infrastructure lookup results export interface ClusterLookupResult { exists: boolean; kubeconfig?: string; clusterName?: string; staticIpName?: string; // GCP specific vpcId?: string; // AWS specific region?: string; zone?: string; project?: string; } // Kubernetes-specific types export interface K8sLoadBalancerIngress { hostname?: string; ip?: string; } export interface K8sLoadBalancerStatus { ingress?: K8sLoadBalancerIngress[]; } export interface IngressStatus { loadBalancer?: K8sLoadBalancerStatus; } export interface ServiceStatus { loadBalancer?: K8sLoadBalancerStatus; }