package entity import ( "encoding/json" "time" ) // StorageType 存储类型 type StorageType string const ( StorageTypeNFS StorageType = "nfs" StorageTypePV StorageType = "pv" StorageTypeHostPath StorageType = "hostPath" ) // StorageConfig 存储配置 type StorageConfig struct { NFS *NFSConfig `json:"nfs,omitempty"` PV *PVConfig `json:"pv,omitempty"` HostPath *HostPathConfig `json:"hostPath,omitempty"` } // NFSConfig NFS 配置 type NFSConfig struct { Server string `json:"server"` Path string `json:"path"` } // PVConfig PV 配置 type PVConfig struct { StorageClassName string `json:"storageClassName"` Capacity string `json:"capacity"` AccessModes []string `json:"accessModes"` } // HostPathConfig HostPath 配置 type HostPathConfig struct { Path string `json:"path"` } // StorageBackend 存储后端实体 type StorageBackend struct { ID string WorkspaceID string ClusterID string // 关联的 cluster,NULL 表示 workspace/shared 级别 OwnerID string Name string Type StorageType Config StorageConfig Description string IsDefault bool IsShared bool CreatedAt time.Time UpdatedAt time.Time } // NewStorageBackend 创建新存储后端 func NewStorageBackend(workspaceID, ownerID, name string, storageType StorageType, config StorageConfig) *StorageBackend { now := time.Now() return &StorageBackend{ WorkspaceID: workspaceID, OwnerID: ownerID, Name: name, Type: storageType, Config: config, IsDefault: false, IsShared: false, CreatedAt: now, UpdatedAt: now, } } // NewClusterStorageBackend 创建 cluster 级别的存储后端 func NewClusterStorageBackend(workspaceID, clusterID, ownerID, name string, storageType StorageType, config StorageConfig) *StorageBackend { storage := NewStorageBackend(workspaceID, ownerID, name, storageType, config) storage.ClusterID = clusterID return storage } // Validate 验证存储后端数据 func (s *StorageBackend) Validate() error { if s.Name == "" { return ErrInvalidStorageName } if s.Type == "" { return ErrInvalidStorageName } return nil } // ConfigJSON 将配置转为 JSON 字符串 func (s *StorageBackend) ConfigJSON() (string, error) { data, err := json.Marshal(s.Config) if err != nil { return "", err } return string(data), nil } // ParseConfigJSON 从 JSON 解析配置 func ParseConfigJSON(jsonStr string) (*StorageConfig, error) { var config StorageConfig err := json.Unmarshal([]byte(jsonStr), &config) return &config, err }