fix: server-disk-list failed on wrong field name

This commit is contained in:
Qiu Jian
2019-06-03 17:18:31 +08:00
parent 51ae2b3a0c
commit cd809f1a24
22 changed files with 103 additions and 7 deletions
+2 -2
View File
@@ -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")
}
+2
View File
@@ -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
+2
View File
@@ -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
+2 -2
View File
@@ -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)
@@ -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)
}
+4
View File
@@ -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)
}
+6 -2
View File
@@ -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)
}
+4
View File
@@ -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)
}
+4
View File
@@ -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
}
+4
View File
@@ -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"
}
+4
View File
@@ -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)
}
+1 -1
View File
@@ -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
+4
View File
@@ -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 {
+8
View File
@@ -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)
}
+4
View File
@@ -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)
}
+8
View File
@@ -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)
}
+8
View File
@@ -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)
}
@@ -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 {
+4
View File
@@ -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)
}
+4
View File
@@ -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)
}
@@ -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)
}
+4
View File
@@ -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)
}