diff --git a/pkg/cloudcommon/db/fetch.go b/pkg/cloudcommon/db/fetch.go index 1984341b7b..65f49d6bfc 100644 --- a/pkg/cloudcommon/db/fetch.go +++ b/pkg/cloudcommon/db/fetch.go @@ -41,11 +41,11 @@ func FetchJointByIds(manager IJointModelManager, masterId, slaveId string, query return nil, fmt.Errorf("FetchByIds not a IJointModel") } q := manager.Query() - masterField := queryField(q, manager.GetMasterManager()) + masterField := q.Field(manager.GetIJointModelManager().GetMasterFieldName()) // queryField(q, manager.GetMasterManager()) if masterField == nil { return nil, fmt.Errorf("cannot find master id") } - slaveField := queryField(q, manager.GetSlaveManager()) + slaveField := q.Field(manager.GetIJointModelManager().GetSlaveFieldName()) // queryField(q, manager.GetSlaveManager()) if slaveField == nil { return nil, fmt.Errorf("cannot find slave id") } diff --git a/pkg/cloudcommon/db/interface.go b/pkg/cloudcommon/db/interface.go index 10c9fdb21c..c4d5a45cd1 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -183,6 +183,8 @@ type IJointModelManager interface { GetMasterManager() IStandaloneModelManager GetSlaveManager() IStandaloneModelManager + GetMasterFieldName() string + GetSlaveFieldName() string // FetchByIds(masterId string, slaveId string, query jsonutils.JSONObject) (IJointModel, error) FilterByParams(q *sqlchemy.SQuery, params jsonutils.JSONObject) *sqlchemy.SQuery diff --git a/pkg/cloudcommon/db/jointbase.go b/pkg/cloudcommon/db/jointbase.go index 67e6f44a25..5441d6d4d0 100644 --- a/pkg/cloudcommon/db/jointbase.go +++ b/pkg/cloudcommon/db/jointbase.go @@ -72,6 +72,7 @@ func (manager *SJointResourceBaseManager) GetSlaveManager() IStandaloneModelMana return manager._slave } +/* func queryField(q *sqlchemy.SQuery, manager IModelManager) sqlchemy.IQueryField { field := q.Field(fmt.Sprintf("%s_id", manager.Keyword())) if field == nil && len(manager.Alias()) > 0 { @@ -87,6 +88,7 @@ func (manager *SJointResourceBaseManager) MasterField(q *sqlchemy.SQuery) sqlche func (manager *SJointResourceBaseManager) SlaveField(q *sqlchemy.SQuery) sqlchemy.IQueryField { return queryField(q, manager.GetSlaveManager()) } +*/ func (manager *SJointResourceBaseManager) FilterByParams(q *sqlchemy.SQuery, params jsonutils.JSONObject) *sqlchemy.SQuery { return q diff --git a/pkg/cloudcommon/db/virtualjointbase.go b/pkg/cloudcommon/db/virtualjointbase.go index dad402055c..7c45f995d0 100644 --- a/pkg/cloudcommon/db/virtualjointbase.go +++ b/pkg/cloudcommon/db/virtualjointbase.go @@ -90,8 +90,8 @@ func (manager *SVirtualJointResourceBaseManager) ListItemFilter(ctx context.Cont if err != nil { return nil, err } - masterField := manager.MasterField(q) - slaveField := manager.SlaveField(q) + masterField := q.Field(manager.GetIJointModelManager().GetMasterFieldName()) + slaveField := q.Field(manager.GetIJointModelManager().GetSlaveFieldName()) if masterField == nil || slaveField == nil { msg := "cannot find master or slave fields!!!" log.Errorf(msg) diff --git a/pkg/compute/models/cloudproviderregions.go b/pkg/compute/models/cloudproviderregions.go index cafd8d5d10..50739e99f6 100644 --- a/pkg/compute/models/cloudproviderregions.go +++ b/pkg/compute/models/cloudproviderregions.go @@ -68,6 +68,14 @@ type SCloudproviderregion struct { LastDeepSyncAt time.Time `list:"admin"` } +func (manager *SCloudproviderregionManager) GetMasterFieldName() string { + return "cloudprovider_id" +} + +func (manager *SCloudproviderregionManager) GetSlaveFieldName() string { + return "cloudregion_id" +} + func (joint *SCloudproviderregion) Master() db.IStandaloneModel { return db.JointMaster(joint) } diff --git a/pkg/compute/models/groupguests.go b/pkg/compute/models/groupguests.go index d3b7fa23b1..1db03ef728 100644 --- a/pkg/compute/models/groupguests.go +++ b/pkg/compute/models/groupguests.go @@ -51,6 +51,10 @@ type SGroupguest struct { GuestId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required"` // Column(VARCHAR(36, charset='ascii'), nullable=False) } +func (manager *SGroupguestManager) GetSlaveFieldName() string { + return "guest_id" +} + func (joint *SGroupguest) Master() db.IStandaloneModel { return db.JointMaster(joint) } diff --git a/pkg/compute/models/groupjoints.go b/pkg/compute/models/groupjoints.go index 8b3552ba3e..a617d8bd55 100644 --- a/pkg/compute/models/groupjoints.go +++ b/pkg/compute/models/groupjoints.go @@ -36,10 +36,14 @@ func NewGroupJointsManager(dt interface{}, tableName string, keyword string, key type SGroupJointsBase struct { db.SVirtualJointResourceBase - SrvtagId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required"` // Column(VARCHAR(36, charset='ascii'), nullable=False) + GroupId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required"` // Column(VARCHAR(36, charset='ascii'), nullable=False) +} + +func (manager *SGroupJointsManager) GetMasterFieldName() string { + return "group_id" } func (self *SGroupJointsBase) GetGroup() *SGroup { - guest, _ := GroupManager.FetchById(self.SrvtagId) + guest, _ := GroupManager.FetchById(self.GroupId) return guest.(*SGroup) } diff --git a/pkg/compute/models/groupnetworks.go b/pkg/compute/models/groupnetworks.go index fad449ba38..af4497abac 100644 --- a/pkg/compute/models/groupnetworks.go +++ b/pkg/compute/models/groupnetworks.go @@ -58,6 +58,10 @@ type SGroupnetwork struct { EipId string `width:"36" charset:"ascii" nullable:"true"` // Column(VARCHAR(36, charset='ascii'), nullable=True) } +func (manager *SGroupnetworkManager) GetSlaveFieldName() string { + return "network_id" +} + func (joint *SGroupnetwork) Master() db.IStandaloneModel { return db.JointMaster(joint) } diff --git a/pkg/compute/models/guestdisks.go b/pkg/compute/models/guestdisks.go index bb4adc098f..0350398fe1 100644 --- a/pkg/compute/models/guestdisks.go +++ b/pkg/compute/models/guestdisks.go @@ -67,6 +67,10 @@ type SGuestdisk struct { Index int8 `nullable:"false" default:"0" list:"user" update:"user"` // Column(TINYINT(4), nullable=False, default=0) } +func (manager *SGuestdiskManager) GetSlaveFieldName() string { + return "disk_id" +} + func (manager *SGuestdiskManager) AllowCreateItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { return false } diff --git a/pkg/compute/models/guestjoints.go b/pkg/compute/models/guestjoints.go index be5b07c29d..648f27a0c4 100644 --- a/pkg/compute/models/guestjoints.go +++ b/pkg/compute/models/guestjoints.go @@ -43,3 +43,7 @@ func (self *SGuestJointsBase) getGuest() *SGuest { guest, _ := GuestManager.FetchById(self.GuestId) return guest.(*SGuest) } + +func (manager *SGuestJointsManager) GetMasterFieldName() string { + return "guest_id" +} diff --git a/pkg/compute/models/guestnetworks.go b/pkg/compute/models/guestnetworks.go index fa91ba12e3..11b92e4fb0 100644 --- a/pkg/compute/models/guestnetworks.go +++ b/pkg/compute/models/guestnetworks.go @@ -83,6 +83,10 @@ type SGuestnetwork struct { TeamWith string `width:"32" charset:"ascii" nullable:"false" list:"user"` } +func (manager *SGuestnetworkManager) GetSlaveFieldName() string { + return "network_id" +} + func (joint *SGuestnetwork) Master() db.IStandaloneModel { return db.JointMaster(joint) } diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index b4300b7000..b15e229895 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -2926,7 +2926,7 @@ func (self *SGuest) LeaveAllGroups(ctx context.Context, userCred mcclient.TokenC gg.Delete(context.Background(), userCred) var group SGroup gq := GroupManager.Query() - err := gq.Filter(sqlchemy.Equals(gq.Field("id"), gg.SrvtagId)).First(&group) + err := gq.Filter(sqlchemy.Equals(gq.Field("id"), gg.GroupId)).First(&group) if err != nil { log.Errorln(err.Error()) return diff --git a/pkg/compute/models/guestsecgroups.go b/pkg/compute/models/guestsecgroups.go index d60c5a6714..75f723a618 100644 --- a/pkg/compute/models/guestsecgroups.go +++ b/pkg/compute/models/guestsecgroups.go @@ -52,6 +52,10 @@ type SGuestsecgroup struct { SecgroupId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required"` // Column(VARCHAR(36, charset='ascii'), nullable=False) } +func (manager *SGuestsecgroupManager) GetSlaveFieldName() string { + return "secgroup_id" +} + func (self *SGuestsecgroup) getSecgroup() *SSecurityGroup { secgrp, err := SecurityGroupManager.FetchById(self.SecgroupId) if err != nil { diff --git a/pkg/compute/models/hostnetworks.go b/pkg/compute/models/hostnetworks.go index 4dfea22128..3f52b282a6 100644 --- a/pkg/compute/models/hostnetworks.go +++ b/pkg/compute/models/hostnetworks.go @@ -54,6 +54,14 @@ type SHostnetwork struct { MacAddr string `width:"18" charset:"ascii" list:"admin"` // Column(VARCHAR(18, charset='ascii')) } +func (manager *SHostnetworkManager) GetMasterFieldName() string { + return "baremetal_id" +} + +func (manager *SHostnetworkManager) GetSlaveFieldName() string { + return "network_id" +} + func (bn *SHostnetwork) Master() db.IStandaloneModel { return db.JointMaster(bn) } diff --git a/pkg/compute/models/hostschedtags.go b/pkg/compute/models/hostschedtags.go index 391600d282..ef343a1277 100644 --- a/pkg/compute/models/hostschedtags.go +++ b/pkg/compute/models/hostschedtags.go @@ -51,6 +51,10 @@ type SHostschedtag struct { HostId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"admin_required"` // Column(VARCHAR(36, charset='ascii'), nullable=False) } +func (manager *SHostschedtagManager) GetSlaveFieldName() string { + return "host_id" +} + func (self *SHostschedtag) GetHost() *SHost { return self.Master().(*SHost) } diff --git a/pkg/compute/models/hoststorages.go b/pkg/compute/models/hoststorages.go index fd7e653571..e5a1d417da 100644 --- a/pkg/compute/models/hoststorages.go +++ b/pkg/compute/models/hoststorages.go @@ -63,6 +63,14 @@ type SHoststorage struct { RealCapacity int64 `nullable:"true" list:"admin"` // Column(Integer, nullable=True) } +func (manager *SHoststorageManager) GetMasterFieldName() string { + return "host_id" +} + +func (manager *SHoststorageManager) GetSlaveFieldName() string { + return "storage_id" +} + func (joint *SHoststorage) Master() db.IStandaloneModel { return db.JointMaster(joint) } diff --git a/pkg/compute/models/hostwires.go b/pkg/compute/models/hostwires.go index c046e1f58b..11a393e5f7 100644 --- a/pkg/compute/models/hostwires.go +++ b/pkg/compute/models/hostwires.go @@ -58,6 +58,14 @@ type SHostwire struct { WireId string `width:"128" charset:"ascii" nullable:"false" list:"admin" create:"admin_required"` // Column(VARCHAR(ID_LENGTH, charset='ascii'), nullable=False) } +func (manager *SHostwireManager) GetMasterFieldName() string { + return "host_id" +} + +func (manager *SHostwireManager) GetSlaveFieldName() string { + return "wire_id" +} + func (joint *SHostwire) Master() db.IStandaloneModel { return db.JointMaster(joint) } diff --git a/pkg/compute/models/loadbalancernetworks.go b/pkg/compute/models/loadbalancernetworks.go index 41758fa5d0..683f15020d 100644 --- a/pkg/compute/models/loadbalancernetworks.go +++ b/pkg/compute/models/loadbalancernetworks.go @@ -58,6 +58,14 @@ type SLoadbalancerNetwork struct { IpAddr string `width:"16" charset:"ascii" list:"admin"` } +func (manager *SLoadbalancernetworkManager) GetMasterFieldName() string { + return "loadbalancer_id" +} + +func (manager *SLoadbalancernetworkManager) GetSlaveFieldName() string { + return "network_id" +} + func (ln *SLoadbalancerNetwork) Network() *SNetwork { network, _ := ln.GetModelManager().FetchById(ln.NetworkId) if network != nil { diff --git a/pkg/compute/models/networkschedtags.go b/pkg/compute/models/networkschedtags.go index 3249be0798..729e4eccb9 100644 --- a/pkg/compute/models/networkschedtags.go +++ b/pkg/compute/models/networkschedtags.go @@ -50,6 +50,10 @@ type SNetworkschedtag struct { NetworkId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"admin_required"` // Column(VARCHAR(36, charset='ascii'), nullable=False) } +func (manager *SNetworkschedtagManager) GetSlaveFieldName() string { + return "network_id" +} + func (s *SNetworkschedtag) GetNetwork() *SNetwork { return s.Master().(*SNetwork) } diff --git a/pkg/compute/models/schedtagjoint.go b/pkg/compute/models/schedtagjoint.go index e9727de45f..997652b1f0 100644 --- a/pkg/compute/models/schedtagjoint.go +++ b/pkg/compute/models/schedtagjoint.go @@ -56,6 +56,10 @@ type SSchedtagJointsBase struct { SchedtagId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"admin_required"` // =Column(VARCHAR(36, charset='ascii'), nullable=False) } +func (manager *SSchedtagJointsManager) GetMasterFieldName() string { + return "schedtag_id" +} + func (man *SSchedtagJointsManager) AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { return db.IsAdminAllowList(userCred, man) } diff --git a/pkg/compute/models/storagecachedimages.go b/pkg/compute/models/storagecachedimages.go index 7dccda46fb..da2bcbdd67 100644 --- a/pkg/compute/models/storagecachedimages.go +++ b/pkg/compute/models/storagecachedimages.go @@ -72,6 +72,14 @@ type SStoragecachedimage struct { DownloadRefcnt int `get:"admin"` // = Column(Integer) } +func (manager *SStoragecachedimageManager) GetMasterFieldName() string { + return "storagecache_id" +} + +func (manager *SStoragecachedimageManager) GetSlaveFieldName() string { + return "cachedimage_id" +} + func (joint *SStoragecachedimage) Master() db.IStandaloneModel { return db.JointMaster(joint) } diff --git a/pkg/compute/models/storageschedtags.go b/pkg/compute/models/storageschedtags.go index c06fc7fcb3..d03d74e4b0 100644 --- a/pkg/compute/models/storageschedtags.go +++ b/pkg/compute/models/storageschedtags.go @@ -50,6 +50,10 @@ type SStorageschedtag struct { StorageId string `width:"36" charset:"ascii" nullable:"false" list:"admin" create:"admin_required"` // Column(VARCHAR(36, charset='ascii'), nullable=False) } +func (manager *SStorageschedtagManager) GetSlaveFieldName() string { + return "storage_id" +} + func (s *SStorageschedtag) GetStorage() *SStorage { return s.Master().(*SStorage) }