mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 10:46:58 +08:00
misc bugfix:
- fix get details hosts - save image enable generate_name - network auto set dns - fix servers filter by disk
This commit is contained in:
@@ -36,7 +36,7 @@ type ServerListInput struct {
|
||||
|
||||
GroupFilterListInput
|
||||
SecgroupFilterListInput
|
||||
DiskFilterListInput `"yunion:ambiguous-prefix":"storage_"`
|
||||
//DiskFilterListInput `"yunion:ambiguous-prefix":"storage_"`
|
||||
ScalingGroupFilterListInput
|
||||
|
||||
// 只列出裸金属主机
|
||||
@@ -63,6 +63,9 @@ type ServerListInput struct {
|
||||
// 列出可以挂载指定EIP的主机
|
||||
UsableServerForEip string `json:"usable_server_for_eip"`
|
||||
|
||||
// 列出可以挂载磁盘的主机
|
||||
AttachableServersForDisk string `json:"attachable_servers_for_disk" "yunion:deprecated-by":"disk"`
|
||||
|
||||
// 按主机资源类型进行排序
|
||||
// enum: shared,prepaid,dedicated
|
||||
ResourceType string `json:"resource_type"`
|
||||
|
||||
@@ -291,8 +291,8 @@ func FetchCustomizeColumns(
|
||||
}
|
||||
retVal := make([]*jsonutils.JSONDict, ret[0].Len())
|
||||
for i := 0; i < ret[0].Len(); i += 1 {
|
||||
jsonDict := ValueToJSONDict(ret[0].Index(i))
|
||||
jsonDict.Update(jsonutils.Marshal(objs[i]))
|
||||
jsonDict := jsonutils.Marshal(objs[i]).(*jsonutils.JSONDict)
|
||||
jsonDict.Update(ValueToJSONDict(ret[0].Index(i)))
|
||||
retVal[i] = jsonDict
|
||||
}
|
||||
return retVal, nil
|
||||
|
||||
@@ -973,15 +973,18 @@ func (self *SDisk) PrepareSaveImage(ctx context.Context, userCred mcclient.Token
|
||||
return "", httperrors.NewResourceNotFoundError("No zone for this disk")
|
||||
}
|
||||
data.Add(jsonutils.NewString(self.DiskFormat), "disk_format")
|
||||
name, _ := data.GetString("name")
|
||||
s := auth.GetAdminSession(ctx, options.Options.Region, "")
|
||||
imageList, err := modules.Images.List(s, jsonutils.Marshal(map[string]string{"name": name, "admin": "true"}))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if imageList.Total > 0 {
|
||||
return "", httperrors.NewConflictError("Duplicate image name %s", name)
|
||||
if !data.Contains("generate_name") {
|
||||
name, _ := data.GetString("name")
|
||||
s := auth.GetAdminSession(ctx, options.Options.Region, "")
|
||||
imageList, err := modules.Images.List(s, jsonutils.Marshal(map[string]string{"name": name, "admin": "true"}))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if imageList.Total > 0 {
|
||||
return "", httperrors.NewConflictError("Duplicate image name %s", name)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
no need to check quota anymore
|
||||
session := auth.GetSession(userCred, options.Options.Region, "v2")
|
||||
|
||||
@@ -155,7 +155,7 @@ func (self *SGuest) AllowPerformSaveImage(ctx context.Context, userCred mcclient
|
||||
func (self *SGuest) PerformSaveImage(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) {
|
||||
if !utils.IsInStringArray(self.Status, []string{api.VM_READY}) {
|
||||
return nil, httperrors.NewInputParameterError("Cannot save image in status %s", self.Status)
|
||||
} else if !data.Contains("name") {
|
||||
} else if !data.Contains("name") && !data.Contains("generate_name") {
|
||||
return nil, httperrors.NewInputParameterError("Image name is required")
|
||||
} else if disks := self.CategorizeDisks(); disks.Root == nil {
|
||||
return nil, httperrors.NewInputParameterError("No root image")
|
||||
|
||||
@@ -201,14 +201,14 @@ func (manager *SGuestManager) ListItemFilter(
|
||||
q = q.In("id", netQ.SubQuery())
|
||||
}
|
||||
|
||||
diskQ := GuestdiskManager.Query("guest_id").Snapshot()
|
||||
diskQ, err = manager.SDiskResourceBaseManager.ListItemFilter(ctx, diskQ, userCred, query.DiskFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SDiskResourceBaseManager.ListItemFilter")
|
||||
}
|
||||
if diskQ.IsAltered() {
|
||||
q = q.In("id", diskQ.SubQuery())
|
||||
}
|
||||
//diskQ := GuestdiskManager.Query("guest_id").Snapshot()
|
||||
//diskQ, err = manager.SDiskResourceBaseManager.ListItemFilter(ctx, diskQ, userCred, query.DiskFilterListInput)
|
||||
//if err != nil {
|
||||
// return nil, errors.Wrap(err, "SDiskResourceBaseManager.ListItemFilter")
|
||||
//}
|
||||
//if diskQ.IsAltered() {
|
||||
// q = q.In("id", diskQ.SubQuery())
|
||||
//}
|
||||
|
||||
scalingGroupQ := ScalingGroupGuestManager.Query("guest_id").NotEquals("guest_status", api.SG_GUEST_STATUS_PENDING_REMOVE).Snapshot()
|
||||
scalingGroupQ, err = manager.SScalingGroupResourceBaseManager.ListItemFilter(ctx, scalingGroupQ, userCred, query.ScalingGroupFilterListInput)
|
||||
@@ -337,7 +337,7 @@ func (manager *SGuestManager) ListItemFilter(
|
||||
q = q.In("host_id", sq)
|
||||
}
|
||||
|
||||
/*diskFilter := query.Disk
|
||||
diskFilter := query.AttachableServersForDisk
|
||||
if len(diskFilter) > 0 {
|
||||
diskI, _ := DiskManager.FetchByIdOrName(userCred, diskFilter)
|
||||
if diskI == nil {
|
||||
@@ -362,7 +362,7 @@ func (manager *SGuestManager) ListItemFilter(
|
||||
Filter(sqlchemy.Equals(storages.Field("id"), disk.StorageId)).SubQuery()
|
||||
q = q.In("host_id", sq)
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
withEip := (query.WithEip != nil && *query.WithEip)
|
||||
withoutEip := (query.WithoutEip != nil && *query.WithoutEip)
|
||||
@@ -501,15 +501,15 @@ func (manager *SGuestManager) OrderByExtraFields(ctx context.Context, q *sqlchem
|
||||
return nil, errors.Wrap(err, "SNetworkResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
}
|
||||
fields = manager.SDiskResourceBaseManager.GetOrderByFields(query.DiskFilterListInput)
|
||||
if db.NeedOrderQuery(fields) {
|
||||
diskQ := GuestdiskManager.Query("guest_id", "disk_id").SubQuery()
|
||||
q = q.LeftJoin(diskQ, sqlchemy.Equals(q.Field("id"), diskQ.Field("guest_id"))).Distinct()
|
||||
q, err = manager.SDiskResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.DiskFilterListInput)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "SDiskResourceBaseManager.OrderByExtraFields")
|
||||
}
|
||||
}
|
||||
//fields = manager.SDiskResourceBaseManager.GetOrderByFields(query.DiskFilterListInput)
|
||||
//if db.NeedOrderQuery(fields) {
|
||||
// diskQ := GuestdiskManager.Query("guest_id", "disk_id").SubQuery()
|
||||
// q = q.LeftJoin(diskQ, sqlchemy.Equals(q.Field("id"), diskQ.Field("guest_id"))).Distinct()
|
||||
// q, err = manager.SDiskResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.DiskFilterListInput)
|
||||
// if err != nil {
|
||||
// return nil, errors.Wrap(err, "SDiskResourceBaseManager.OrderByExtraFields")
|
||||
// }
|
||||
//}
|
||||
|
||||
return q, nil
|
||||
}
|
||||
|
||||
@@ -2584,6 +2584,10 @@ func (self *SHost) getMoreDetails(ctx context.Context, out api.HostDetails, show
|
||||
out.StorageCommitRate = capa.GetCommitRate()
|
||||
out.Spec = self.GetHardwareSpecification()
|
||||
|
||||
// custom cpu mem commit bound
|
||||
out.CpuCmtbound = self.GetCPUOvercommitBound()
|
||||
out.MemCmtbound = self.GetMemoryOvercommitBound()
|
||||
|
||||
// extra = self.SManagedResourceBase.getExtraDetails(ctx, extra)
|
||||
|
||||
out.IsPrepaidRecycle = false
|
||||
|
||||
@@ -1311,6 +1311,10 @@ func (manager *SNetworkManager) ValidateCreateData(ctx context.Context, userCred
|
||||
return input, httperrors.NewInputParameterError("Invalid masklen %d", input.GuestIpMask)
|
||||
}
|
||||
|
||||
if len(input.GuestDns) == 0 {
|
||||
input.GuestDns = options.Options.DNSServer
|
||||
}
|
||||
|
||||
for key, ipStr := range map[string]string{"guest_gateway": input.GuestGateway, "guest_dns": input.GuestDns, "guest_dhcp": input.GuestDHCP} {
|
||||
if len(ipStr) > 0 {
|
||||
if key == "guest_dhcp" {
|
||||
|
||||
Reference in New Issue
Block a user