You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
325 lines
8.7 KiB
325 lines
8.7 KiB
package model |
|
|
|
import ( |
|
"encoding/json" |
|
"net/http" |
|
|
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
) |
|
|
|
// PaasConf conf of paas. |
|
type PaasConf struct { |
|
Host string |
|
Token string |
|
MachineTimeout string |
|
MachineLimitRatio float32 |
|
} |
|
|
|
// PaasMachine machine in paas. |
|
type PaasMachine struct { |
|
PaasMachineSystem |
|
Name string `json:"name"` |
|
Image string `json:"image"` |
|
CPURequest float32 `json:"cpu_request"` |
|
MemoryRequest float32 `json:"memory_request"` |
|
|
|
CPULimit float32 `json:"cpu_limit"` |
|
MemoryLimit float32 `json:"memory_limit"` |
|
|
|
DiskRequest int `json:"disk_request"` |
|
VolumnMount string `json:"volumn_mount"` |
|
Snapshot bool `json:"snapshot"` |
|
ForcePullImage bool `json:"force_pull_image"` |
|
} |
|
|
|
// ToMachine convert PaasMachine to Machine. |
|
func (pm *PaasMachine) ToMachine(u string, gmr *GenMachinesRequest) (m *Machine) { |
|
m = &Machine{ |
|
Username: u, |
|
Name: pm.Name, |
|
PodName: pm.Name + MachinePodNameSuffix, |
|
Status: CreatingMachineInMerlin, |
|
} |
|
gmr.Mutator(m) |
|
return |
|
} |
|
|
|
// PaasGenMachineRequest create machine request in paas. |
|
type PaasGenMachineRequest struct { |
|
Env |
|
BusinessUnit string `json:"business_unit"` |
|
Project string `json:"project"` |
|
App string `json:"app"` |
|
TreeIDs []int64 `json:"tree_id"` |
|
Machines []PaasMachine `json:"machines"` |
|
} |
|
|
|
// ExcludeDataResponse no data field response. |
|
type ExcludeDataResponse struct { |
|
Status int `json:"status"` |
|
Message string `json:"message"` |
|
} |
|
|
|
// CheckStatus check status. |
|
func (e *ExcludeDataResponse) CheckStatus() (err error) { |
|
if e.Status >= http.StatusMultipleChoices || e.Status < http.StatusOK { |
|
log.Error("The status(%d) of paas may represent a request error(%s)", e.Status, e.Message) |
|
err = ecode.MerlinPaasRequestErr |
|
} |
|
return |
|
} |
|
|
|
// Instance instance. |
|
type Instance struct { |
|
InstanceName string `json:"instance_name"` |
|
} |
|
|
|
// CreateInstance create instance. |
|
type CreateInstance struct { |
|
Instance |
|
InstanceCreateStatus int `json:"instance_create_status"` |
|
} |
|
|
|
// ReleaseInstance release instance. |
|
type ReleaseInstance struct { |
|
Instance |
|
InstanceReleaseStatus int `json:"instance_release_status"` |
|
} |
|
|
|
// PaasGenMachineResponse create machine response in paas. |
|
type PaasGenMachineResponse struct { |
|
ExcludeDataResponse |
|
Data []*CreateInstance `json:"data"` |
|
} |
|
|
|
// PaasDelMachineResponse delete machine response in paas. |
|
type PaasDelMachineResponse struct { |
|
ExcludeDataResponse |
|
Data ReleaseInstance `json:"data"` |
|
} |
|
|
|
// PaasSnapshotMachineResponse Paas Snapshot Machine Response. |
|
type PaasSnapshotMachineResponse struct { |
|
ExcludeDataResponse |
|
Data string `json:"data"` |
|
} |
|
|
|
// DetailCondition detail condition. |
|
type DetailCondition struct { |
|
Initialized string `json:"Initialized"` |
|
PodScheduled string `json:"PodScheduled"` |
|
Ready string `json:"Ready"` |
|
} |
|
|
|
// MachineStatus machine status. |
|
type MachineStatus struct { |
|
Condition string `json:"condition"` |
|
Message string `json:"message"` |
|
DetailCondition DetailCondition `json:"detail_conditions"` |
|
InstanceIP string `json:"instance_ip"` |
|
RestartCount int `json:"restart_count"` |
|
Log string `json:"log"` |
|
MachineEvent MachineEvent `json:"events"` |
|
} |
|
|
|
// MachineEvent MachineEvent. |
|
type MachineEvent struct { |
|
MachinesItems []*MachinesItem `json:"Items"` |
|
} |
|
|
|
// MachinesItem MachinesItem. |
|
type MachinesItem struct { |
|
Kind string `json:"Kind"` |
|
Name string `json:"Name"` |
|
Namespace string `json:"Namespace"` |
|
Reason string `json:"Reason"` |
|
Message string `json:"Message"` |
|
Count int `json:"Count"` |
|
LastTime string `json:"LastTime"` |
|
} |
|
|
|
// ToMachineStatusResponse convert MachineStatus to MachineStatusResponse. |
|
func (ms *MachineStatus) ToMachineStatusResponse() (msr *MachineStatusResponse) { |
|
var events []string |
|
for _, item := range ms.MachineEvent.MachinesItems { |
|
mJSON, _ := json.Marshal(item) |
|
events = append(events, string(mJSON)) |
|
} |
|
|
|
return &MachineStatusResponse{ |
|
Initialized: ms.DetailCondition.Initialized, |
|
PodScheduled: ms.DetailCondition.PodScheduled, |
|
Ready: ms.DetailCondition.Ready, |
|
Log: ms.Log, |
|
MachineEvent: events, |
|
} |
|
} |
|
|
|
// PaasQueryMachineStatusResponse query machine status response. |
|
type PaasQueryMachineStatusResponse struct { |
|
ExcludeDataResponse |
|
Data MachineStatus `json:"data"` |
|
} |
|
|
|
// PaasQueryClustersResponse query cluster response. |
|
type PaasQueryClustersResponse struct { |
|
ExcludeDataResponse |
|
Data Clusters `json:"data"` |
|
} |
|
|
|
// PaasQueryClusterResponse query cluster response. |
|
type PaasQueryClusterResponse struct { |
|
ExcludeDataResponse |
|
Data *Cluster `json:"data"` |
|
} |
|
|
|
// PaasMachineDetail machine detail. |
|
type PaasMachineDetail struct { |
|
Condition string `json:"condition"` |
|
Name string `json:"name"` |
|
Image string `json:"image"` |
|
|
|
CPURequest float32 `json:"cpu_request"` |
|
MemoryRequest float32 `json:"memory_request"` |
|
|
|
CPULimit float32 `json:"cpu_limit"` |
|
MemoryLimit float32 `json:"memory_limit"` |
|
|
|
DiskRequest int `json:"disk_request"` |
|
VolumnMount string `json:"volumn_mount"` |
|
ClusterName string `json:"cluster_name"` |
|
Env string `json:"env"` |
|
IP string `json:"ip"` |
|
PaasMachineSystem |
|
} |
|
|
|
// ConvertUnits convert units of cpu and memory. |
|
func (p PaasMachineDetail) ConvertUnits() PaasMachineDetail { |
|
p.CPURequest = p.CPURequest / CPURatio |
|
p.MemoryRequest = p.MemoryRequest / MemoryRatio |
|
p.CPULimit = p.CPULimit / CPURatio |
|
p.MemoryLimit = p.MemoryLimit / MemoryRatio |
|
return p |
|
} |
|
|
|
// PaasQueryMachineResponse query machine response. |
|
type PaasQueryMachineResponse struct { |
|
ExcludeDataResponse |
|
Data PaasMachineDetail `json:"data"` |
|
} |
|
|
|
// Clusters clusters. |
|
type Clusters struct { |
|
Items []*Cluster `json:"items"` |
|
} |
|
|
|
// Network network. |
|
type Network struct { |
|
ID int64 `json:"id"` |
|
Name string `json:"name"` |
|
Subnet string `json:"subnet"` |
|
Capacity float64 `json:"capacity"` |
|
} |
|
|
|
// Resource resource. |
|
type Resource struct { |
|
CPUUsage float64 `json:"cpu_usage"` //集群总体CPU使用率 |
|
MemUsage float64 `json:"mem_usage"` //集群总体内存使用率 |
|
PodTotal int `json:"pod_total"` //集群实例总数 |
|
PodCapacity int `json:"pod_capacity"` //集群实例容量 |
|
NodesNum int `json:"nodes_num"` //集群节点数量 |
|
} |
|
|
|
// Cluster cluster. |
|
type Cluster struct { |
|
ID int64 `json:"id"` |
|
Name string `json:"name"` |
|
IsSupportSnapShot bool `json:"is_support_snapshot"` |
|
Desc string `json:"desc"` |
|
IDc string `json:"idc"` |
|
Networks []Network `json:"networks"` |
|
Resources Resource `json:"resources"` |
|
} |
|
|
|
// Verify verify cluster |
|
func (c *Cluster) Verify() error { |
|
if c.Name == "" || len(c.Networks) < 1 || c.Networks[0].Name == "" { |
|
return ecode.MerlinInvalidClusterErr |
|
} |
|
return nil |
|
} |
|
|
|
// ToMachine convert CreateInstance to Machine. |
|
func (i *CreateInstance) ToMachine(u string, gmr *GenMachinesRequest) (m *Machine) { |
|
var status int |
|
switch i.InstanceCreateStatus { |
|
case CreateFailedMachineInPaas: |
|
status = ImmediatelyFailedMachineInMerlin |
|
case CreatingMachineInPass: |
|
status = CreatingMachineInMerlin |
|
} |
|
m = &Machine{ |
|
Username: u, |
|
Name: i.InstanceName, |
|
PodName: i.InstanceName + MachinePodNameSuffix, |
|
Status: status, |
|
} |
|
gmr.Mutator(m) |
|
return |
|
} |
|
|
|
// PaasQueryAndDelMachineRequest query and del machines request. |
|
type PaasQueryAndDelMachineRequest struct { |
|
BusinessUnit string `json:"business_unit"` |
|
Project string `json:"project"` |
|
App string `json:"app"` |
|
ClusterID int64 `json:"cluster_id"` |
|
Name string `json:"name"` |
|
} |
|
|
|
// PaasAuthRequest auth request. |
|
type PaasAuthRequest struct { |
|
APIToken string `json:"api_token"` |
|
PlatformID string `json:"platform_id"` |
|
} |
|
|
|
// PaasAuthResponse auth response. |
|
type PaasAuthResponse struct { |
|
ExcludeDataResponse |
|
Data PaasAuthInfo `json:"data"` |
|
} |
|
|
|
// PaasAuthInfo auth information. |
|
type PaasAuthInfo struct { |
|
Token string `json:"token"` |
|
PlatformID string `json:"platform_id"` |
|
Username string `json:"user_name"` |
|
Secret string `json:"secret"` |
|
Expired int64 `json:"expired"` |
|
Admin bool `json:"admin"` |
|
} |
|
|
|
// PaasUpdateMachineNodeRequest update machine request. |
|
type PaasUpdateMachineNodeRequest struct { |
|
PaasQueryAndDelMachineRequest |
|
TreeID []int64 `json:"tree_id"` |
|
} |
|
|
|
// NewPaasUpdateMachineNodeRequest new PaasUpdateMachineNodeRequest |
|
func NewPaasUpdateMachineNodeRequest(p *PaasQueryAndDelMachineRequest, ns []*MachineNode) *PaasUpdateMachineNodeRequest { |
|
var treeIDs []int64 |
|
for _, n := range ns { |
|
treeIDs = append(treeIDs, n.TreeID) |
|
} |
|
return &PaasUpdateMachineNodeRequest{ |
|
TreeID: treeIDs, |
|
PaasQueryAndDelMachineRequest: *p, |
|
} |
|
} |
|
|
|
// PaasUpdateMachineNodeResponse update machine response. |
|
type PaasUpdateMachineNodeResponse struct { |
|
ExcludeDataResponse |
|
Data string `json:"data"` |
|
}
|
|
|