72a1519ea0
Co-authored-by: Cursor <cursoragent@cursor.com>
78 lines
1.6 KiB
TypeScript
78 lines
1.6 KiB
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
CreateDateColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
import { ClusterStatus } from '../../common/enums';
|
|
|
|
export type ClusterHealthStatus = 'unknown' | 'healthy' | 'degraded' | 'unhealthy';
|
|
|
|
@Entity('clusters')
|
|
export class Cluster {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column()
|
|
name: string;
|
|
|
|
@Column({ nullable: true })
|
|
description: string;
|
|
|
|
@Column({ type: 'enum', enum: ClusterStatus, default: ClusterStatus.ACTIVE })
|
|
status: ClusterStatus;
|
|
|
|
@Column({ type: 'text' })
|
|
kubeconfig: string; // Encrypted kubeconfig content
|
|
|
|
@Column()
|
|
apiServer: string;
|
|
|
|
@Column({ nullable: true })
|
|
region: string;
|
|
|
|
@Column({ default: 1 })
|
|
weight: number;
|
|
|
|
@Column({ type: 'jsonb', default: [] })
|
|
tags: string[];
|
|
|
|
@Column({ default: 'unknown' })
|
|
healthStatus: ClusterHealthStatus;
|
|
|
|
@Column({ type: 'timestamptz', nullable: true })
|
|
lastHealthCheckedAt: Date;
|
|
|
|
@Column({ nullable: true })
|
|
healthMessage: string;
|
|
|
|
@Column({ type: 'jsonb', nullable: true })
|
|
availableResources: Record<string, any>;
|
|
|
|
@Column({ nullable: true })
|
|
provider: string; // e.g., 'aws', 'gcp', 'azure', 'bare-metal'
|
|
|
|
@Column({ default: false })
|
|
isDefault: boolean;
|
|
|
|
// Resource quotas (cluster-level defaults for new namespaces)
|
|
@Column({ default: '4' })
|
|
defaultCpuLimit: string;
|
|
|
|
@Column({ default: '8Gi' })
|
|
defaultMemoryLimit: string;
|
|
|
|
@Column({ default: 10 })
|
|
maxAppsPerUser: number;
|
|
|
|
@Column({ type: 'jsonb', nullable: true })
|
|
metadata: Record<string, any>;
|
|
|
|
@CreateDateColumn()
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn()
|
|
updatedAt: Date;
|
|
}
|