ocdp v1
This commit is contained in:
185
backend/internal/domain/entity/instance.go
Normal file
185
backend/internal/domain/entity/instance.go
Normal file
@ -0,0 +1,185 @@
|
||||
package entity
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// InstanceStatus 实例状态
|
||||
type InstanceStatus string
|
||||
|
||||
const (
|
||||
StatusDeployed InstanceStatus = "deployed"
|
||||
StatusUninstalled InstanceStatus = "uninstalled"
|
||||
StatusSuperseded InstanceStatus = "superseded"
|
||||
StatusFailed InstanceStatus = "failed"
|
||||
StatusPending InstanceStatus = "pending-install"
|
||||
StatusUpgrading InstanceStatus = "pending-upgrade"
|
||||
StatusRollingBack InstanceStatus = "pending-rollback"
|
||||
StatusTerminating InstanceStatus = "pending-delete"
|
||||
StatusUnknown InstanceStatus = "unknown"
|
||||
)
|
||||
|
||||
// InstanceOperation 实例操作类型
|
||||
type InstanceOperation string
|
||||
|
||||
const (
|
||||
OperationNone InstanceOperation = ""
|
||||
OperationInstall InstanceOperation = "install"
|
||||
OperationUpgrade InstanceOperation = "upgrade"
|
||||
OperationRollback InstanceOperation = "rollback"
|
||||
OperationDelete InstanceOperation = "delete"
|
||||
OperationSync InstanceOperation = "sync"
|
||||
)
|
||||
|
||||
// Instance Helm 应用实例领域实体
|
||||
type Instance struct {
|
||||
ID string
|
||||
ClusterID string
|
||||
Name string // Helm Release Name
|
||||
Namespace string
|
||||
RegistryID string
|
||||
Repository string // OCI Repository (e.g., charts/app)
|
||||
Chart string // Chart Name
|
||||
Version string // Chart Version
|
||||
Description string
|
||||
Values map[string]interface{} // Helm Values (JSON)
|
||||
ValuesYAML string // Helm Values (YAML format)
|
||||
Status InstanceStatus
|
||||
StatusReason string
|
||||
LastOperation InstanceOperation
|
||||
LastError string
|
||||
Revision int // Helm Release Revision
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
|
||||
// NewInstance 创建新实例
|
||||
func NewInstance(clusterID, name, namespace, registryID, repository, chart, version string) *Instance {
|
||||
now := time.Now()
|
||||
return &Instance{
|
||||
ClusterID: clusterID,
|
||||
Name: name,
|
||||
Namespace: namespace,
|
||||
RegistryID: registryID,
|
||||
Repository: repository,
|
||||
Chart: chart,
|
||||
Version: version,
|
||||
Status: StatusPending,
|
||||
StatusReason: "Pending install",
|
||||
LastOperation: OperationInstall,
|
||||
Revision: 1,
|
||||
CreatedAt: now,
|
||||
UpdatedAt: now,
|
||||
}
|
||||
}
|
||||
|
||||
// SetValues 设置 Helm Values
|
||||
func (i *Instance) SetValues(values map[string]interface{}) {
|
||||
i.Values = values
|
||||
i.UpdatedAt = time.Now()
|
||||
}
|
||||
|
||||
// SetValuesYAML 设置 YAML 格式的 Values
|
||||
func (i *Instance) SetValuesYAML(yaml string) {
|
||||
i.ValuesYAML = yaml
|
||||
i.UpdatedAt = time.Now()
|
||||
}
|
||||
|
||||
// UpdateStatus 更新实例状态
|
||||
func (i *Instance) UpdateStatus(status InstanceStatus, revision int) {
|
||||
i.Status = status
|
||||
i.Revision = revision
|
||||
i.UpdatedAt = time.Now()
|
||||
}
|
||||
|
||||
// BeginOperation 标记开始执行某个操作
|
||||
func (i *Instance) BeginOperation(op InstanceOperation, reason string) {
|
||||
i.LastOperation = op
|
||||
if pendingStatus := pendingStatusForOperation(op); pendingStatus != "" {
|
||||
i.Status = pendingStatus
|
||||
}
|
||||
if reason != "" {
|
||||
i.StatusReason = reason
|
||||
}
|
||||
i.LastError = ""
|
||||
i.UpdatedAt = time.Now()
|
||||
}
|
||||
|
||||
// MarkSuccess 标记操作成功
|
||||
func (i *Instance) MarkSuccess(status InstanceStatus, revision int, reason string) {
|
||||
if status != "" {
|
||||
i.Status = status
|
||||
}
|
||||
if revision > 0 {
|
||||
i.Revision = revision
|
||||
}
|
||||
i.StatusReason = reason
|
||||
i.LastError = ""
|
||||
i.UpdatedAt = time.Now()
|
||||
}
|
||||
|
||||
// MarkFailure 标记操作失败
|
||||
func (i *Instance) MarkFailure(reason string, err error) {
|
||||
i.Status = StatusFailed
|
||||
if reason != "" {
|
||||
i.StatusReason = reason
|
||||
}
|
||||
if err != nil {
|
||||
i.LastError = err.Error()
|
||||
}
|
||||
i.UpdatedAt = time.Now()
|
||||
}
|
||||
|
||||
func pendingStatusForOperation(op InstanceOperation) InstanceStatus {
|
||||
switch op {
|
||||
case OperationInstall:
|
||||
return StatusPending
|
||||
case OperationUpgrade:
|
||||
return StatusUpgrading
|
||||
case OperationRollback:
|
||||
return StatusRollingBack
|
||||
case OperationDelete:
|
||||
return StatusTerminating
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
// Upgrade 升级实例
|
||||
func (i *Instance) Upgrade(version string, values map[string]interface{}) {
|
||||
i.Version = version
|
||||
if values != nil {
|
||||
i.Values = values
|
||||
}
|
||||
i.BeginOperation(OperationUpgrade, "Pending upgrade")
|
||||
}
|
||||
|
||||
// Validate 验证实例配置
|
||||
func (i *Instance) Validate() error {
|
||||
if i.ClusterID == "" {
|
||||
return ErrInvalidClusterID
|
||||
}
|
||||
if i.Name == "" {
|
||||
return ErrInvalidInstanceName
|
||||
}
|
||||
if i.Namespace == "" {
|
||||
return ErrInvalidNamespace
|
||||
}
|
||||
if i.Chart == "" {
|
||||
return ErrInvalidChart
|
||||
}
|
||||
if i.Version == "" {
|
||||
return ErrInvalidVersion
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ReleaseHistory Helm Release 历史记录
|
||||
type ReleaseHistory struct {
|
||||
Revision int
|
||||
Updated time.Time
|
||||
Status InstanceStatus
|
||||
Chart string
|
||||
AppVersion string
|
||||
Description string
|
||||
}
|
||||
Reference in New Issue
Block a user