mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(region): server usb filter
This commit is contained in:
@@ -46,12 +46,14 @@ type ServerListInput struct {
|
||||
|
||||
// 只列出裸金属主机
|
||||
Baremetal *bool `json:"baremetal"`
|
||||
// 只列出GPU主机
|
||||
// 只列出透传了 GPU 的主机
|
||||
Gpu *bool `json:"gpu"`
|
||||
// 只列出透传了 USB 的主机
|
||||
Usb *bool `json:"usb"`
|
||||
// 只列出还有备份机的主机
|
||||
Backup *bool `json:"bakcup"`
|
||||
// 列出指定类型的主机
|
||||
// enum: normal,gpu,backup
|
||||
// enum: normal,gpu,usb,backup
|
||||
ServerType string `json:"server_type"`
|
||||
// 列出管理安全组为指定安全组的主机
|
||||
AdminSecgroup string `json:"admin_security"`
|
||||
|
||||
@@ -463,6 +463,9 @@ func (manager *SGuestManager) ListItemFilter(
|
||||
case "backup":
|
||||
query.Gpu = &falseVal
|
||||
query.Backup = &trueVal
|
||||
case "usb":
|
||||
query.Usb = &trueVal
|
||||
query.Backup = &falseVal
|
||||
default:
|
||||
return nil, httperrors.NewInputParameterError("unknown server type %s", query.ServerType)
|
||||
}
|
||||
@@ -476,19 +479,25 @@ func (manager *SGuestManager) ListItemFilter(
|
||||
}
|
||||
}
|
||||
|
||||
if query.Gpu != nil {
|
||||
isodev := IsolatedDeviceManager.Query().SubQuery()
|
||||
sgq := isodev.Query(isodev.Field("guest_id")).
|
||||
Filter(sqlchemy.AND(
|
||||
sqlchemy.IsNotNull(isodev.Field("guest_id")),
|
||||
sqlchemy.Startswith(isodev.Field("dev_type"), "GPU")))
|
||||
cond := sqlchemy.NotIn
|
||||
if *query.Gpu {
|
||||
cond = sqlchemy.In
|
||||
devTypeQ := func(q *sqlchemy.SQuery, checkType *bool, dType string) *sqlchemy.SQuery {
|
||||
if checkType != nil {
|
||||
isodev := IsolatedDeviceManager.Query().SubQuery()
|
||||
sgq := isodev.Query(isodev.Field("guest_id")).
|
||||
Filter(sqlchemy.AND(
|
||||
sqlchemy.IsNotNull(isodev.Field("guest_id")),
|
||||
sqlchemy.Startswith(isodev.Field("dev_type"), dType)))
|
||||
cond := sqlchemy.NotIn
|
||||
if *checkType {
|
||||
cond = sqlchemy.In
|
||||
}
|
||||
return q.Filter(cond(q.Field("id"), sgq))
|
||||
}
|
||||
q = q.Filter(cond(q.Field("id"), sgq))
|
||||
return q
|
||||
}
|
||||
|
||||
q = devTypeQ(q, query.Gpu, "GPU")
|
||||
q = devTypeQ(q, query.Usb, api.USB_TYPE)
|
||||
|
||||
groupFilter := query.GroupId
|
||||
if len(groupFilter) != 0 {
|
||||
groupObj, err := GroupManager.FetchByIdOrName(userCred, groupFilter)
|
||||
|
||||
Reference in New Issue
Block a user