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:
wanyaoqi
2020-04-26 18:35:33 +08:00
parent 82f4f070ab
commit 127ce54503
7 changed files with 45 additions and 31 deletions
+4 -1
View File
@@ -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"`
+2 -2
View File
@@ -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
+11 -8
View File
@@ -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")
+1 -1
View File
@@ -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")
+19 -19
View File
@@ -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
}
+4
View File
@@ -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
+4
View File
@@ -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" {