mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix: fix issues preventing clean_provider.sh from clean cloud provider
records
This commit is contained in:
@@ -330,7 +330,8 @@ func (self *SManagedVirtualizationHostDriver) RequestRebuildDiskOnStorage(ctx co
|
||||
}
|
||||
|
||||
func (driver *SManagedVirtualizationHostDriver) IsReachStoragecacheCapacityLimit(host *models.SHost, cachedImages []models.SCachedimage) bool {
|
||||
if len(cachedImages) >= host.GetHostDriver().GetStoragecacheQuota(host) {
|
||||
quota := host.GetHostDriver().GetStoragecacheQuota(host)
|
||||
if quota > 0 && len(cachedImages) >= quota {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
||||
@@ -423,7 +423,7 @@ func (manager *SCachedimageManager) newFromCloudImage(ctx context.Context, userC
|
||||
|
||||
func (image *SCachedimage) requestRefreshExternalImage(ctx context.Context, userCred mcclient.TokenCredential) (*cloudprovider.SImage, error) {
|
||||
caches := image.getValidStoragecache()
|
||||
if caches == nil {
|
||||
if caches == nil || len(caches) == 0 {
|
||||
return nil, fmt.Errorf("no valid storage cache")
|
||||
}
|
||||
iCache, err := caches[0].GetIStorageCache()
|
||||
|
||||
@@ -813,3 +813,39 @@ func (self *SCloudaccount) PerformChangeProject(ctx context.Context, userCred mc
|
||||
}
|
||||
return providers[0].PerformChangeProject(ctx, userCred, query, data)
|
||||
}
|
||||
|
||||
func (manager *SCloudaccountManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error) {
|
||||
accountStr, _ := query.GetString("account")
|
||||
if len(accountStr) > 0 {
|
||||
queryDict := query.(*jsonutils.JSONDict)
|
||||
queryDict.Remove("account")
|
||||
accountObj, err := manager.FetchByIdOrName(userCred, accountStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), accountStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
q = q.Equals("id", accountObj.GetId())
|
||||
}
|
||||
|
||||
q, err := manager.SEnabledStatusStandaloneResourceBaseManager.ListItemFilter(ctx, q, userCred, query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
managerStr, _ := query.GetString("manager")
|
||||
if len(managerStr) > 0 {
|
||||
providerObj, err := CloudproviderManager.FetchByIdOrName(userCred, managerStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
provider := providerObj.(*SCloudprovider)
|
||||
q = q.Equals("id", provider.CloudaccountId)
|
||||
}
|
||||
return q, nil
|
||||
}
|
||||
|
||||
@@ -711,3 +711,37 @@ func (self *SCloudprovider) GetDetailsBalance(ctx context.Context, userCred mccl
|
||||
ret.Add(jsonutils.NewFloat(balance), "balance")
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (manager *SCloudproviderManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error) {
|
||||
accountStr, _ := query.GetString("account")
|
||||
if len(accountStr) > 0 {
|
||||
queryDict := query.(*jsonutils.JSONDict)
|
||||
queryDict.Remove("account")
|
||||
accountObj, err := CloudaccountManager.FetchByIdOrName(userCred, accountStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), accountStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
q = q.Equals("cloudaccount_id", accountObj.GetId())
|
||||
}
|
||||
q, err := manager.SEnabledStatusStandaloneResourceBaseManager.ListItemFilter(ctx, q, userCred, query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
managerStr, _ := query.GetString("manager")
|
||||
if len(managerStr) > 0 {
|
||||
providerObj, err := manager.FetchByIdOrName(userCred, managerStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
q = q.Equals("id", providerObj.GetId())
|
||||
}
|
||||
return q, nil
|
||||
}
|
||||
|
||||
@@ -359,12 +359,30 @@ func (manager *SCloudregionManager) ListItemFilter(ctx context.Context, q *sqlch
|
||||
}
|
||||
managerStr, _ := query.GetString("manager")
|
||||
if len(managerStr) > 0 {
|
||||
manager := CloudproviderManager.FetchCloudproviderByIdOrName(managerStr)
|
||||
if manager == nil {
|
||||
return nil, httperrors.NewResourceNotFoundError("Cloud provider/manager %s not found", managerStr)
|
||||
managerObj, err := CloudproviderManager.FetchByIdOrName(userCred, managerStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
manager := managerObj.(*SCloudprovider)
|
||||
q = q.Equals("provider", manager.Provider)
|
||||
}
|
||||
accountStr, _ := query.GetString("account")
|
||||
if len(accountStr) > 0 {
|
||||
accountObj, err := CloudaccountManager.FetchByIdOrName(userCred, accountStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(CloudaccountManager.Keyword(), accountStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
account := accountObj.(*SCloudaccount)
|
||||
q = q.In("provider", account.Provider)
|
||||
}
|
||||
|
||||
if jsonutils.QueryBoolean(query, "usable", false) || jsonutils.QueryBoolean(query, "usable_vpc", false) {
|
||||
providers := CloudproviderManager.Query().SubQuery()
|
||||
|
||||
@@ -234,6 +234,10 @@ func (self *SStoragecachedimage) ValidateDeleteCondition(ctx context.Context) er
|
||||
if self.getReferenceCount() > 0 {
|
||||
return httperrors.NewNotEmptyError("Image is in use")
|
||||
}
|
||||
return self.SJointResourceBase.ValidateDeleteCondition(ctx)
|
||||
}
|
||||
|
||||
func (self *SStoragecachedimage) isCachedImageInUse() error {
|
||||
if !self.isDownloadSessionExpire() {
|
||||
return httperrors.NewResourceBusyError("Active download session not expired")
|
||||
}
|
||||
@@ -241,7 +245,7 @@ func (self *SStoragecachedimage) ValidateDeleteCondition(ctx context.Context) er
|
||||
if image != nil && !image.canDeleteLastCache() {
|
||||
return httperrors.NewResourceBusyError("Cannot delete the last cache")
|
||||
}
|
||||
return self.SJointResourceBase.ValidateDeleteCondition(ctx)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SStoragecachedimage) isDownloadSessionExpire() bool {
|
||||
@@ -257,6 +261,12 @@ func (self *SStoragecachedimage) markDeleting(ctx context.Context, userCred mccl
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !isForce {
|
||||
err = self.isCachedImageInUse()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
cache := self.GetStoragecache()
|
||||
image := self.GetCachedimage()
|
||||
|
||||
@@ -630,13 +630,32 @@ func (manager *SZoneManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQu
|
||||
}
|
||||
managerStr, _ := query.GetString("manager")
|
||||
if len(managerStr) > 0 {
|
||||
provider := CloudproviderManager.FetchCloudproviderByIdOrName(managerStr)
|
||||
if provider == nil {
|
||||
return nil, httperrors.NewResourceNotFoundError("Cloud provider/manager %s not found", managerStr)
|
||||
providerObj, err := CloudproviderManager.FetchByIdOrName(userCred, managerStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(CloudproviderManager.Keyword(), managerStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
provider := providerObj.(*SCloudprovider)
|
||||
subq := CloudregionManager.Query("id").Equals("provider", provider.Provider).SubQuery()
|
||||
q = q.In("cloudregion_id", subq)
|
||||
}
|
||||
accountStr, _ := query.GetString("account")
|
||||
if len(accountStr) > 0 {
|
||||
accountObj, err := CloudaccountManager.FetchByIdOrName(userCred, accountStr)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
return nil, httperrors.NewResourceNotFoundError2(CloudaccountManager.Keyword(), accountStr)
|
||||
} else {
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
}
|
||||
account := accountObj.(*SCloudaccount)
|
||||
subq := CloudregionManager.Query("id").Equals("provider", account.Provider).SubQuery()
|
||||
q = q.In("cloudregion_id", subq)
|
||||
}
|
||||
providerStr, _ := query.GetString("provider")
|
||||
if len(providerStr) > 0 {
|
||||
subq := CloudregionManager.Query("id").Equals("provider", providerStr).SubQuery()
|
||||
|
||||
Reference in New Issue
Block a user