代码拉取完成,页面将自动刷新
package host
import (
"context"
"github.com/go-playground/validator/v10"
"github.com/google/uuid"
)
var validate = validator.New()
type Service interface {
//创建主机
CreateHost(context.Context, *Host) (*Host, error)
//查询主机列表(列表不展示详细信息)
QueryHost(context.Context, *QueryHostRequest) (*Hostset, error)
//查询主机详情
DescribeHost(context.Context, *QueryHostRequest) (*Host, error)
//删除主机,比如前端需要打印删除对象的详细信息
DeleteHost(context.Context, *UpdateHostRequest) (*Host, error)
//更新主机
UpdateHost(context.Context, *DeleteHostRequest) error
}
type Vender int
const (
PrivateIDC Vender = iota
Tencent
AliYun
HuaWei
)
func NewHost() *Host {
return &Host{
Resource: &Resource{},
Describe: &Describe{},
}
}
type Host struct {
*Resource //公共部分
*Describe //独有部分
}
// 校验数据合法性
func (h *Host) Validate() error {
return validate.Struct(h)
}
func (h *Host) InjectDefault() {
if h.Resource.Id == "" {
h.Resource.Id = uuid.New().String()
}
if h.Resource.Region == "" {
h.Resource.Region = "cn-beijing"
}
if h.Resource.Type == "" {
h.Resource.Type = "host"
}
if h.Describe.CPU == 0 {
h.Describe.CPU = 1
}
if h.Describe.Memory == 0 {
h.Describe.Memory = 1
}
}
// 方便扩展,避免修改接口
type Hostset struct {
Items []*Host `json:"items"`
Total int `json:"total"`
}
type Describe struct {
ResourceId string `json:"resource_id" ` //关联的资源ID
CPU int `json:"cpu" validate:"required"` //CPU核数
Memory int `json:"memory" validate:"required"` //内存大小
GPUAmount int `json:"gpu_amount"` //GPU数量
GPUSpec string `json:"gpu_spec"` //GPU规格
OSType string `json:"os_type"` //操作系统类型
OSName string `json:"os_name"`
SerialNumber string `json:"serial_number"` //序列号
}
type Resource struct {
Id string `json:"id" validate:"required"`
Vender Vender `json:"vender" `
Region string `json:"region" validate:"required"`
CreateAt int `json:"create_at"`
ExpireAt int `json:"expire_at"`
Type string `json:"type" validate:"required"`
Name string `json:"name" validate:"required"`
Description string `json:"description"`
Status string `json:"status"`
UpdateAt int `json:"update_at"`
SyncAt int `json:"sync_at"`
Account string `json:"account"`
PublicIP string `json:"public_ip"`
PrivateIP string `json:"private_ip"`
}
type QueryHostRequest struct{}
type UpdateHostRequest struct {
//只允许更新私有部分
*Describe
}
type DeleteHostRequest struct{}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。