fix(region): remove useless server sku

This commit is contained in:
ioito
2023-04-10 10:50:56 +08:00
parent 8ea8eb2646
commit 7e8ba1f75d
2 changed files with 37 additions and 13 deletions
+8 -7
View File
@@ -2898,15 +2898,16 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token
self.InstanceType = instanceType
}
if extVM.GetHypervisor() == api.HYPERVISOR_AWS {
sku, err := ServerSkuManager.FetchSkuByNameAndProvider(instanceType, api.CLOUD_PROVIDER_AWS, false)
if err == nil {
self.VmemSize = sku.MemorySizeMB
memSizeMb := extVM.GetVmemSizeMB()
if self.VmemSize == 0 || self.VmemSize != memSizeMb {
if memSizeMb > 0 {
self.VmemSize = memSizeMb
} else {
self.VmemSize = extVM.GetVmemSizeMB()
sku, _ := ServerSkuManager.FetchSkuByNameAndProvider(instanceType, provider.GetFactory().GetName(), false)
if sku != nil && sku.MemorySizeMB > 0 {
self.VmemSize = sku.MemorySizeMB
}
}
} else {
self.VmemSize = extVM.GetVmemSizeMB()
}
self.Hypervisor = extVM.GetHypervisor()
+29 -6
View File
@@ -639,18 +639,36 @@ func (self *SServerSku) StartServerSkuDeleteTask(ctx context.Context, userCred m
return nil
}
func (self *SServerSku) GetGuestCount() (int, error) {
guestsQ := GuestManager.Query().SubQuery()
hostsQ := HostManager.Query().SubQuery()
zonesQ := ZoneManager.Query().SubQuery()
q := guestsQ.Query().
Join(hostsQ, sqlchemy.Equals(guestsQ.Field("host_id"), hostsQ.Field("id"))).
Join(zonesQ, sqlchemy.Equals(hostsQ.Field("zone_id"), zonesQ.Field("id"))).
Filter(sqlchemy.Equals(guestsQ.Field("instance_type"), self.Name))
if len(self.ZoneId) > 0 {
q = q.Filter(sqlchemy.Equals(hostsQ.Field("zone_id"), self.ZoneId))
} else {
q = q.Filter(sqlchemy.Equals(zonesQ.Field("cloudregion_id"), self.CloudregionId))
}
return q.CountWithError()
}
func (self *SServerSku) ValidateDeleteCondition(ctx context.Context, info *api.ServerSkuDetails) error {
if info.TotalGuestCount > 0 {
totalGuestCnt := 0
if info != nil {
totalGuestCnt = info.TotalGuestCount
} else {
totalGuestCnt, _ = self.GetGuestCount()
}
if totalGuestCnt > 0 {
return httperrors.NewNotEmptyError("now allow to delete inuse instance_type.please remove related servers first: %s", self.Name)
}
if !inWhiteList(self.Provider) {
return httperrors.NewForbiddenError("not allow to delete public cloud instance_type: %s", self.Name)
}
/*count := GuestManager.Query().Equals("instance_type", self.Id).Count()
if count > 0 {
return httperrors.NewNotEmptyError("instance_type used by servers")
}*/
return nil
}
@@ -1214,7 +1232,12 @@ func (manager *SServerSkuManager) SyncServerSkus(ctx context.Context, userCred m
}
for i := 0; i < len(removed); i += 1 {
err = removed[i].MarkAsSoldout(ctx)
cnt, err := removed[i].GetGuestCount()
if err != nil || cnt > 0 {
err = removed[i].MarkAsSoldout(ctx)
} else {
err = removed[i].RealDelete(ctx, userCred)
}
if err != nil {
syncResult.DeleteError(err)
} else {