Merge pull request #5443 from swordqiu/hotfix/qj-fix-region-list-filters2

fix region list filters round 2
This commit is contained in:
Zexi Li
2020-03-11 14:37:03 +08:00
committed by GitHub
26 changed files with 576 additions and 54 deletions
+47 -1
View File
@@ -16,6 +16,8 @@ package models
import (
"context"
"yunion.io/x/pkg/errors"
"yunion.io/x/sqlchemy"
"yunion.io/x/jsonutils"
@@ -27,9 +29,10 @@ import (
type SHostJointsManager struct {
db.SJointResourceBaseManager
SHostResourceBaseManager
}
func NewHostJointsManager(dt interface{}, tableName string, keyword string, keywordPlural string, slave db.IStandaloneModelManager) SHostJointsManager {
func NewHostJointsManager(hostIdFieldName string, dt interface{}, tableName string, keyword string, keywordPlural string, slave db.IStandaloneModelManager) SHostJointsManager {
return SHostJointsManager{
SJointResourceBaseManager: db.NewJointResourceBaseManager(
dt,
@@ -39,6 +42,9 @@ func NewHostJointsManager(dt interface{}, tableName string, keyword string, keyw
HostManager,
slave,
),
SHostResourceBaseManager: SHostResourceBaseManager{
hostIdFieldName:hostIdFieldName,
},
}
}
@@ -103,3 +109,43 @@ func (manager *SHostJointsManager) FetchCustomizeColumns(
return rows
}
func (manager *SHostJointsManager) ListItemFilter(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostJointsListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SJointResourceBaseManager.ListItemFilter(ctx, q, userCred, query.JointResourceBaseListInput)
if err != nil {
return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemFilter")
}
q, err = manager.SHostResourceBaseManager.ListItemFilter(ctx, q, userCred, query.HostFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
}
return q, nil
}
func (manager *SHostJointsManager) OrderByExtraFields(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostJointsListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SJointResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.JointResourceBaseListInput)
if err != nil {
return nil, errors.Wrap(err, "SJointResourceBaseManager.OrderByExtraFields")
}
q, err = manager.SHostResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.HostFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
}
return q, nil
}
+59 -5
View File
@@ -16,6 +16,7 @@ package models
import (
"context"
"yunion.io/x/pkg/errors"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
@@ -29,6 +30,7 @@ import (
type SHostnetworkManager struct {
SHostJointsManager
SNetworkResourceBaseManager
}
var HostnetworkManager *SHostnetworkManager
@@ -37,6 +39,7 @@ func init() {
db.InitManager(func() {
HostnetworkManager = &SHostnetworkManager{
SHostJointsManager: NewHostJointsManager(
"baremetal_id",
SHostnetwork{},
"baremetalnetworks_tbl",
"baremetalnetwork",
@@ -51,14 +54,18 @@ func init() {
type SHostnetwork struct {
SHostJointsBase
BaremetalId string `width:"36" charset:"ascii" nullable:"false" list:"admin"` // Column(VARCHAR(36, charset='ascii'), nullable=False)
NetworkId string `width:"36" charset:"ascii" nullable:"false" list:"admin"` // Column(VARCHAR(36, charset='ascii'), nullable=False)
IpAddr string `width:"16" charset:"ascii" list:"admin"` // Column(VARCHAR(16, charset='ascii'))
MacAddr string `width:"18" charset:"ascii" list:"admin"` // Column(VARCHAR(18, charset='ascii'))
// 宿主机ID
BaremetalId string `width:"36" charset:"ascii" nullable:"false" list:"admin"`
// 网络ID
NetworkId string `width:"36" charset:"ascii" nullable:"false" list:"admin"`
// IP地址
IpAddr string `width:"16" charset:"ascii" list:"admin"`
// MAC地址
MacAddr string `width:"18" charset:"ascii" list:"admin"`
}
func (manager *SHostnetworkManager) GetMasterFieldName() string {
return "baremetal_id"
return manager.getHostIdFieldName()
}
func (manager *SHostnetworkManager) GetSlaveFieldName() string {
@@ -207,3 +214,50 @@ func (man *SHostnetworkManager) GetHostByAddress(addr string) *SHost {
}
return nil
}
func (manager *SHostnetworkManager) ListItemFilter(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostnetworkListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SHostJointsManager.ListItemFilter(ctx, q, userCred, query.HostJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
}
q, err = manager.SNetworkResourceBaseManager.ListItemFilter(ctx, q, userCred, query.NetworkFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SNetworkResourceBaseManager.ListItemFilter")
}
if len(query.IpAddr) > 0 {
q = q.In("ip_addr", query.IpAddr)
}
if len(query.MacAddr) > 0 {
q = q.In("mac_addr", query.MacAddr)
}
return q, nil
}
func (manager *SHostnetworkManager) OrderByExtraFields(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostnetworkListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SHostJointsManager.OrderByExtraFields(ctx, q, userCred, query.HostJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
}
q, err = manager.SNetworkResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.NetworkFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SNetworkResourceBaseManager.OrderByExtraFields")
}
return q, nil
}
+16 -8
View File
@@ -38,6 +38,14 @@ type SHostResourceBase struct {
type SHostResourceBaseManager struct {
SZoneResourceBaseManager
SManagedResourceBaseManager
hostIdFieldName string
}
func (manager *SHostResourceBaseManager) getHostIdFieldName() string {
if len(manager.hostIdFieldName) > 0 {
return manager.hostIdFieldName
}
return "host_id"
}
func (self *SHostResourceBase) GetExtraDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) api.HostResourceInfo {
@@ -113,11 +121,11 @@ func (manager *SHostResourceBaseManager) ListItemFilter(
return nil, errors.Wrap(err, "HostManager.FetchByIdOrName")
}
}
q = q.Equals("host_id", hostObj.GetId())
q = q.Equals(manager.getHostIdFieldName(), hostObj.GetId())
}
if len(query.HostSN) > 0 {
sq := HostManager.Query("id").Equals("sn", query.HostSN).SubQuery()
q = q.In("host_id", sq)
q = q.In(manager.getHostIdFieldName(), sq)
}
subq := HostManager.Query("id").Snapshot()
subq, err := manager.SZoneResourceBaseManager.ListItemFilter(ctx, subq, userCred, query.ZonalFilterListInput)
@@ -129,7 +137,7 @@ func (manager *SHostResourceBaseManager) ListItemFilter(
return nil, errors.Wrap(err, "SManagedResourceBaseManager.ListItemFilter")
}
if subq.IsAltered() {
q = q.Filter(sqlchemy.In(q.Field("host_id"), subq.SubQuery()))
q = q.Filter(sqlchemy.In(q.Field(manager.getHostIdFieldName()), subq.SubQuery()))
}
return q, nil
}
@@ -139,22 +147,22 @@ func (manager *SHostResourceBaseManager) QueryDistinctExtraField(q *sqlchemy.SQu
case "host":
hostQuery := HostManager.Query("name", "id").Distinct().SubQuery()
q.AppendField(hostQuery.Field("name", field))
q = q.Join(hostQuery, sqlchemy.Equals(q.Field("host_id"), hostQuery.Field("id")))
q = q.Join(hostQuery, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hostQuery.Field("id")))
q.GroupBy(hostQuery.Field("name"))
return q, nil
case "host_type":
hostQuery := HostManager.Query(field, "id").Distinct().SubQuery()
q.AppendField(hostQuery.Field(field))
q = q.Join(hostQuery, sqlchemy.Equals(q.Field("host_id"), hostQuery.Field("id")))
q = q.Join(hostQuery, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hostQuery.Field("id")))
q.GroupBy(hostQuery.Field(field))
return q, nil
case "manager", "account", "provider", "brand":
hosts := HostManager.Query("id", "manager_id").SubQuery()
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field("host_id"), hosts.Field("id")))
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hosts.Field("id")))
return manager.SManagedResourceBaseManager.QueryDistinctExtraField(q, field)
default:
hosts := HostManager.Query("id", "zone_id").SubQuery()
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field("host_id"), hosts.Field("id")))
q = q.LeftJoin(hosts, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), hosts.Field("id")))
q, err := manager.SZoneResourceBaseManager.QueryDistinctExtraField(q, field)
if err == nil {
return q, nil
@@ -205,7 +213,7 @@ func (manager *SHostResourceBaseManager) GetOrderBySubQuery(
}
if db.NeedOrderQuery(manager.GetOrderByFields(query)) {
subq := hostQ.SubQuery()
q = q.LeftJoin(subq, sqlchemy.Equals(q.Field("host_id"), subq.Field("id")))
q = q.LeftJoin(subq, sqlchemy.Equals(q.Field(manager.getHostIdFieldName()), subq.Field("id")))
if db.NeedOrderQuery([]string{query.OrderByHost, query.OrderByHostSN}) {
orders = append(orders, query.OrderByHost, query.OrderByHostSN)
fields = append(fields, subq.Field("name"), subq.Field("sn"))
+82 -6
View File
@@ -86,12 +86,14 @@ type SHost struct {
SBillingResourceBase
// 机架
Rack string `width:"16" charset:"ascii" nullable:"true" get:"admin" update:"admin" create:"admin_optional"`
Rack string `width:"16" charset:"ascii" nullable:"true" get:"admin" update:"admin" create:"admin_optional"`
// 机位
Slots string `width:"16" charset:"ascii" nullable:"true" get:"admin" update:"admin" create:"admin_optional"`
// 管理口MAC
AccessMac string `width:"32" charset:"ascii" nullable:"false" index:"true" list:"admin" update:"admin"`
// Ip地址
// 管理口Ip地址
AccessIp string `width:"16" charset:"ascii" nullable:"true" list:"admin"`
// 管理地址
@@ -99,7 +101,7 @@ type SHost struct {
// 系统信息
SysInfo jsonutils.JSONObject `nullable:"true" search:"admin" list:"admin" update:"admin" create:"admin_optional"`
// SN信息
// 物理机序列号信息
SN string `width:"128" charset:"ascii" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
// CPU大小
@@ -154,7 +156,9 @@ type SHost struct {
// 宿主机类型
HostType string `width:"36" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"admin_required"`
Version string `width:"64" charset:"ascii" list:"admin" update:"admin" create:"admin_optional"`
// host服务软件版本
Version string `width:"64" charset:"ascii" list:"admin" update:"admin" create:"admin_optional"`
// OVN软件版本
OvnVersion string `width:"64" charset:"ascii" list:"admin" update:"admin" create:"admin_optional"`
IsBaremetal bool `nullable:"true" default:"false" list:"admin" update:"admin" create:"admin_optional"`
@@ -164,15 +168,20 @@ type SHost struct {
LastPingAt time.Time ``
ResourceType string `width:"36" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"admin_optional" default:"shared"` // Column(VARCHAR(36, charset='ascii'), nullable=False)
ResourceType string `width:"36" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"admin_optional" default:"shared"`
RealExternalId string `width:"256" charset:"utf8" get:"admin"`
// 是否为导入的宿主机
IsImport bool `nullable:"true" default:"false" list:"admin" create:"admin_optional"`
// 是否允许PXE启动
EnablePxeBoot tristate.TriState `nullable:"false" default:"true" list:"admin" create:"admin_optional" update:"admin"`
Uuid string `width:"64" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
// 主机UUID
Uuid string `width:"64" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
// 主机启动模式, 可能值位PXE和ISO
BootMode string `width:"8" nullable:"true" list:"admin" update:"admin" create:"admin_optional"`
}
@@ -348,6 +357,73 @@ func (manager *SHostManager) ListItemFilter(
}
}
if len(query.Rack) > 0 {
q = q.In("rack", query.Rack)
}
if len(query.Slots) > 0 {
q = q.In("slots", query.Slots)
}
if len(query.AccessMac) > 0 {
q = q.In("access_mac", query.AccessMac)
}
if len(query.AccessIp) > 0 {
q = q.In("access_ip", query.AccessIp)
}
if len(query.SN) > 0 {
q = q.In("sn", query.SN)
}
if len(query.CpuCount) > 0 {
q = q.In("cpu_count", query.CpuCount)
}
if len(query.MemSize) > 0 {
q = q.In("mem_size", query.MemSize)
}
if len(query.StorageType) > 0 {
q = q.In("storage_type", query.StorageType)
}
if len(query.IpmiIp) > 0 {
q = q.In("ipmi_ip", query.IpmiIp)
}
if len(query.HostStatus) > 0 {
q = q.In("host_status", query.HostStatus)
}
if len(query.HostType) > 0 {
q = q.In("host_type", query.HostType)
}
if len(query.Version) > 0 {
q = q.In("version", query.Version)
}
if len(query.OvnVersion) > 0 {
q = q.In("ovn_version", query.OvnVersion)
}
if query.IsMaintenance != nil {
if *query.IsMaintenance {
q = q.IsTrue("is_maintenance")
} else {
q = q.IsFalse("is_maintenance")
}
}
if query.IsImport != nil {
if *query.IsImport {
q = q.IsTrue("is_import")
} else {
q = q.IsFalse("is_import")
}
}
if query.EnablePxeBoot != nil {
if *query.EnablePxeBoot {
q = q.IsTrue("enable_pxe_boot")
} else {
q = q.IsFalse("enable_pxe_boot")
}
}
if len(query.Uuid) > 0 {
q = q.In("uuid", query.Uuid)
}
if len(query.BootMode) > 0 {
q = q.In("boot_mode", query.BootMode)
}
return q, nil
}
+43
View File
@@ -16,6 +16,8 @@ package models
import (
"context"
"yunion.io/x/pkg/errors"
"yunion.io/x/sqlchemy"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
@@ -28,6 +30,7 @@ import (
type SHostschedtagManager struct {
*SSchedtagJointsManager
SHostResourceBaseManager
}
var HostschedtagManager *SHostschedtagManager
@@ -123,3 +126,43 @@ func (self *SHostschedtag) Delete(ctx context.Context, userCred mcclient.TokenCr
func (self *SHostschedtag) Detach(ctx context.Context, userCred mcclient.TokenCredential) error {
return self.SSchedtagJointsBase.detach(self, ctx, userCred)
}
func (manager *SHostschedtagManager) ListItemFilter(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostschedtagListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SSchedtagJointsManager.ListItemFilter(ctx, q, userCred, query.SchedtagJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SSchedtagJointsManager.ListItemFilter")
}
q, err = manager.SHostResourceBaseManager.ListItemFilter(ctx, q, userCred, query.HostFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
}
return q, nil
}
func (manager *SHostschedtagManager) OrderByExtraFields(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostschedtagListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SSchedtagJointsManager.OrderByExtraFields(ctx, q, userCred, query.SchedtagJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SSchedtagJointsManager.OrderByExtraFields")
}
q, err = manager.SHostResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.HostFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
}
return q, nil
}
+45 -3
View File
@@ -37,6 +37,7 @@ const ErrStorageInUse = errors.Error("StorageInUse")
type SHoststorageManager struct {
SHostJointsManager
SStorageResourceBaseManager
}
var HoststorageManager *SHoststorageManager
@@ -45,6 +46,7 @@ func init() {
db.InitManager(func() {
HoststorageManager = &SHoststorageManager{
SHostJointsManager: NewHostJointsManager(
"host_id",
SHoststorage{},
"hoststorages_tbl",
"hoststorage",
@@ -59,14 +61,14 @@ func init() {
type SHoststorage struct {
SHostJointsBase
// 挂载点
MountPoint string `width:"256" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"required" json:"mount_point"`
// 宿主机Id
HostId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"required" json:"host_id"`
// 存储Id
StorageId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"required" json:"storage_id"`
// 挂载点
MountPoint string `width:"256" charset:"ascii" nullable:"false" list:"admin" update:"admin" create:"required" json:"mount_point"`
// 配置信息
Config *jsonutils.JSONArray `nullable:"true" get:"admin" json:"config"`
// 真实容量大小
@@ -327,3 +329,43 @@ func (self *SHoststorage) syncWithCloudHostStorage(userCred mcclient.TokenCreden
db.OpsLog.LogSyncUpdate(self, diff, userCred)
return nil
}
func (manager *SHoststorageManager) ListItemFilter(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HoststorageListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SHostJointsManager.ListItemFilter(ctx, q, userCred, query.HostJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
}
q, err = manager.SStorageResourceBaseManager.ListItemFilter(ctx, q, userCred, query.StorageFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SStorageResourceBaseManager.ListItemFilter")
}
return q, nil
}
func (manager *SHoststorageManager) OrderByExtraFields(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HoststorageListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SHostJointsManager.OrderByExtraFields(ctx, q, userCred, query.HostJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
}
q, err = manager.SStorageResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.StorageFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SStorageResourceBaseManager.OrderByExtraFields")
}
return q, nil
}
+60
View File
@@ -16,6 +16,7 @@ package models
import (
"context"
"yunion.io/x/pkg/errors"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
@@ -30,6 +31,7 @@ import (
type SHostwireManager struct {
SHostJointsManager
SWireResourceBaseManager
}
var HostwireManager *SHostwireManager
@@ -38,6 +40,7 @@ func init() {
db.InitManager(func() {
HostwireManager = &SHostwireManager{
SHostJointsManager: NewHostJointsManager(
"host_id",
SHostwire{},
"hostwires_tbl",
"hostwire",
@@ -194,3 +197,60 @@ func (manager *SHostwireManager) FetchByHostIdAndMac(hostId string, mac string)
}
return hw.(*SHostwire), nil
}
func (manager *SHostwireManager) ListItemFilter(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostwireListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SHostJointsManager.ListItemFilter(ctx, q, userCred, query.HostJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.ListItemFilter")
}
q, err = manager.SWireResourceBaseManager.ListItemFilter(ctx, q, userCred, query.WireFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SWireResourceBaseManager.ListItemFilter")
}
if len(query.Bridge) > 0 {
q = q.In("bridge", query.Bridge)
}
if len(query.Interface) > 0 {
q = q.In("interface", query.Interface)
}
if query.IsMaster != nil {
if *query.IsMaster {
q = q.IsTrue("is_master")
} else {
q = q.IsFalse("is_master")
}
}
if len(query.MacAddr) > 0 {
q = q.In("mac_addr", query.MacAddr)
}
return q, nil
}
func (manager *SHostwireManager) OrderByExtraFields(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.HostwireListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SHostJointsManager.OrderByExtraFields(ctx, q, userCred, query.HostJointsListInput)
if err != nil {
return nil, errors.Wrap(err, "SHostResourceBaseManager.OrderByExtraFields")
}
q, err = manager.SWireResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.WireFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SWireResourceBaseManager.OrderByExtraFields")
}
return q, nil
}
+4
View File
@@ -105,6 +105,10 @@ func (manager *SInstanceSnapshotManager) ListItemFilter(
q = q.Equals("guest_id", guestObj.GetId())
}
if len(query.OsType) > 0 {
q = q.In("os_type", query.OsType)
}
return q, nil
}
+13
View File
@@ -166,6 +166,19 @@ func (manager *SIsolatedDeviceManager) ListItemFilter(
q = q.IsEmpty("guest_id")
}
if len(query.DevType) > 0 {
q = q.In("dev_type", query.DevType)
}
if len(query.Model) > 0 {
q = q.In("model", query.Model)
}
if len(query.Addr) > 0 {
q = q.In("addr", query.Addr)
}
if len(query.VendorDeviceId) > 0 {
q = q.In("vendor_device_id", query.VendorDeviceId)
}
return q, nil
}
+43
View File
@@ -17,6 +17,8 @@ package models
import (
"context"
"fmt"
"yunion.io/x/pkg/errors"
"yunion.io/x/sqlchemy"
"yunion.io/x/jsonutils"
"yunion.io/x/log"
@@ -33,6 +35,7 @@ import (
type SSchedtagJointsManager struct {
db.SJointResourceBaseManager
SSchedtagResourceBaseManager
}
func NewSchedtagJointsManager(
@@ -217,3 +220,43 @@ func (joint *SSchedtagJointsBase) Detach(ctx context.Context, userCred mcclient.
func (joint *SSchedtagJointsBase) detach(obj db.IJointModel, ctx context.Context, userCred mcclient.TokenCredential) error {
return db.DetachJoint(ctx, userCred, obj)
}
func (manager *SSchedtagJointsManager) ListItemFilter(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.SchedtagJointsListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SJointResourceBaseManager.ListItemFilter(ctx, q, userCred, query.JointResourceBaseListInput)
if err != nil {
return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemFilter")
}
q, err = manager.SSchedtagResourceBaseManager.ListItemFilter(ctx, q, userCred, query.SchedtagFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SSchedtagResourceBaseManager.ListItemFilter")
}
return q, nil
}
func (manager *SSchedtagJointsManager) OrderByExtraFields(
ctx context.Context,
q *sqlchemy.SQuery,
userCred mcclient.TokenCredential,
query api.SchedtagJointsListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SJointResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.JointResourceBaseListInput)
if err != nil {
return nil, errors.Wrap(err, "SJointResourceBaseManager.OrderByExtraFields")
}
q, err = manager.SSchedtagResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.SchedtagFilterListInput)
if err != nil {
return nil, errors.Wrap(err, "SSchedtagResourceBaseManager.OrderByExtraFields")
}
return q, nil
}
+10
View File
@@ -40,6 +40,7 @@ import (
type SStoragecacheManager struct {
db.SStandaloneResourceBaseManager
db.SExternalizedResourceBaseManager
SManagedResourceBaseManager
}
@@ -418,11 +419,20 @@ func (manager *SStoragecacheManager) ListItemFilter(
return nil, errors.Wrap(err, "SStandaloneResourceBaseManager.ListItemFilter")
}
q, err = manager.SExternalizedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ExternalizedResourceBaseListInput)
if err != nil {
return nil, errors.Wrap(err, "SExternalizedResourceBaseManager.ListItemFilter")
}
q, err = manager.SManagedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ManagedResourceListInput)
if err != nil {
return nil, errors.Wrap(err, "SManagedResourceBaseManager.ListItemFilter")
}
if len(query.Path) > 0 {
q = q.In("path", query.Path)
}
return q, nil
}