mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/yunionio/cloudpods.git
synced 2026-09-21 00:24:07 +08:00
2180 lines
54 KiB
Go
2180 lines
54 KiB
Go
// Copyright 2019 Yunion
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package models
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
"yunion.io/x/log"
|
|
"yunion.io/x/pkg/errors"
|
|
"yunion.io/x/pkg/tristate"
|
|
"yunion.io/x/pkg/utils"
|
|
|
|
"yunion.io/x/onecloud/pkg/apis"
|
|
api "yunion.io/x/onecloud/pkg/apis/compute"
|
|
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
|
"yunion.io/x/onecloud/pkg/cloudcommon/db/lockman"
|
|
"yunion.io/x/onecloud/pkg/mcclient"
|
|
"yunion.io/x/onecloud/pkg/util/rbacutils"
|
|
)
|
|
|
|
var LB_CERTS_TO_BE_PURGE = map[string][]string{}
|
|
|
|
type IPurgeableManager interface {
|
|
Keyword() string
|
|
purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error
|
|
}
|
|
|
|
func (eipManager *SElasticipManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
eips := make([]SElasticip, 0)
|
|
err := fetchByManagerId(eipManager, providerId, &eips)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range eips {
|
|
err := eips[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (eip *SElasticip) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, eip)
|
|
defer lockman.ReleaseObject(ctx, eip)
|
|
|
|
err := eip.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return eip.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (hostManager *SHostManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
hosts := make([]SHost, 0)
|
|
err := fetchByManagerId(hostManager, providerId, &hosts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range hosts {
|
|
err := hosts[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (host *SHost) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, host)
|
|
defer lockman.ReleaseObject(ctx, host)
|
|
|
|
_, err := host.PerformDisable(ctx, userCred, nil, apis.PerformDisableInput{})
|
|
if err != nil {
|
|
return errors.Wrapf(err, "PerformDisable")
|
|
}
|
|
|
|
guests, err := host.GetGuests()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "host.GetGuests")
|
|
}
|
|
for i := range guests {
|
|
err := guests[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purge guest %s", guests[i].Id)
|
|
}
|
|
}
|
|
|
|
// clean all disks on locally attached storages
|
|
storages := host._getAttachedStorages(tristate.None, tristate.None, api.HOST_STORAGE_LOCAL_TYPES)
|
|
for i := range storages {
|
|
err := storages[i].purgeDisks(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeDisks for storage %s", storages[i].Name)
|
|
}
|
|
}
|
|
|
|
err = host.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return host.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (guest *SGuest) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, guest)
|
|
defer lockman.ReleaseObject(ctx, guest)
|
|
|
|
guest.SetDisableDelete(userCred, false)
|
|
|
|
IsolatedDeviceManager.ReleaseDevicesOfGuest(ctx, guest, userCred)
|
|
guest.RevokeAllSecgroups(ctx, userCred)
|
|
guest.LeaveAllGroups(ctx, userCred)
|
|
guest.DetachAllNetworks(ctx, userCred)
|
|
guest.EjectIso(userCred)
|
|
guest.DeleteEip(ctx, userCred)
|
|
guest.purgeInstanceSnapshots(ctx, userCred)
|
|
guest.DeleteAllDisksInDB(ctx, userCred)
|
|
if !utils.IsInStringArray(guest.Hypervisor, HypervisorIndependentInstanceSnapshot) {
|
|
guest.DeleteAllInstanceSnapshotInDB(ctx, userCred)
|
|
}
|
|
|
|
err := guest.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return guest.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (guest *SGuest) purgeInstanceSnapshots(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, guest)
|
|
defer lockman.ReleaseObject(ctx, guest)
|
|
|
|
iss, err := guest.GetInstanceSnapshots()
|
|
if err != nil {
|
|
return errors.Wrap(err, "unable to GetInstanceSnapshots")
|
|
}
|
|
for i := range iss {
|
|
err := iss[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "unable to purge InstanceSnapshot %s", iss[i].Id)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (is *SInstanceSnapshot) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, is)
|
|
defer lockman.ReleaseObject(ctx, is)
|
|
|
|
return is.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (storage *SStorage) purgeDisks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, storage)
|
|
defer lockman.ReleaseObject(ctx, storage)
|
|
|
|
disks := storage.GetDisks()
|
|
for i := range disks {
|
|
err := disks[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purge disk %s", disks[i].Id)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (disk *SDisk) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, disk)
|
|
defer lockman.ReleaseObject(ctx, disk)
|
|
|
|
err := disk.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return disk.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SCachedLoadbalancerCertificateManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
lbcs := make([]SCachedLoadbalancerCertificate, 0)
|
|
err := fetchByManagerId(manager, providerId, &lbcs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
lbcertIds := []string{}
|
|
if certs, ok := LB_CERTS_TO_BE_PURGE[providerId]; ok {
|
|
lbcertIds = certs
|
|
}
|
|
|
|
for i := range lbcs {
|
|
err := lbcs[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(lbcs[i].CertificateId) > 0 && !utils.IsInStringArray(lbcs[i].CertificateId, lbcertIds) {
|
|
lbcertIds = append(lbcertIds, lbcs[i].CertificateId)
|
|
}
|
|
}
|
|
LB_CERTS_TO_BE_PURGE[providerId] = lbcertIds
|
|
return nil
|
|
}
|
|
|
|
func (lbcert *SCachedLoadbalancerCertificate) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbcert)
|
|
defer lockman.ReleaseObject(ctx, lbcert)
|
|
|
|
err := lbcert.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lbcert.DoPendingDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SLoadbalancerCertificateManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
if certs, ok := LB_CERTS_TO_BE_PURGE[providerId]; ok {
|
|
lbcs := make([]SLoadbalancerCertificate, 0)
|
|
err := db.FetchModelObjects(manager, manager.Query().In("id", certs), &lbcs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range lbcs {
|
|
err := lbcs[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
delete(LB_CERTS_TO_BE_PURGE, providerId)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lbcert *SLoadbalancerCertificate) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbcert)
|
|
defer lockman.ReleaseObject(ctx, lbcert)
|
|
|
|
if !lbcert.PendingDeleted {
|
|
// 内容完整的证书不需要删除
|
|
if lbcert.IsComplete() {
|
|
return nil
|
|
}
|
|
|
|
caches, err := lbcert.GetCachedCerts()
|
|
if err != nil {
|
|
return errors.Wrap(err, "GetCachedCerts")
|
|
}
|
|
|
|
if len(caches) > 0 {
|
|
log.Debugf("the lb cert %s (%s) is in use.can not purge.", lbcert.Name, lbcert.Id)
|
|
return nil
|
|
}
|
|
return lbcert.DoPendingDelete(ctx, userCred)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (manager *SCachedLoadbalancerAclManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
lbacls := make([]SCachedLoadbalancerAcl, 0)
|
|
err := fetchByManagerId(manager, providerId, &lbacls)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range lbacls {
|
|
err := lbacls[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lbacl *SCachedLoadbalancerAcl) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbacl)
|
|
defer lockman.ReleaseObject(ctx, lbacl)
|
|
|
|
err := lbacl.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lbacl.DoPendingDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SLoadbalancerBackendGroupManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
lbbgs := make([]SLoadbalancerBackendGroup, 0)
|
|
err := fetchByLbVpcManagerId(manager, providerId, &lbbgs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range lbbgs {
|
|
err := lbbgs[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SLoadbalancerManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
lbs := make([]SLoadbalancer, 0)
|
|
err := fetchByManagerId(manager, providerId, &lbs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range lbs {
|
|
err := lbs[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SLoadbalancernetworkManager) getAllLoadbalancerNetworks(lbId string) ([]SLoadbalancerNetwork, error) {
|
|
lbnets := make([]SLoadbalancerNetwork, 0)
|
|
q := manager.Query().Equals("loadbalancer_id", lbId)
|
|
err := db.FetchModelObjects(manager, q, &lbnets)
|
|
if err != nil {
|
|
log.Errorf("getAllLoadbalancerNetworks fail %s", err)
|
|
return nil, err
|
|
}
|
|
return lbnets, nil
|
|
}
|
|
|
|
func (lb *SLoadbalancer) detachAllNetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lbnets, err := LoadbalancernetworkManager.getAllLoadbalancerNetworks(lb.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range lbnets {
|
|
err = lbnets[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lb *SLoadbalancer) purgeBackendGroups(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
backendGroups, err := lb.GetLoadbalancerBackendgroups()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range backendGroups {
|
|
err = backendGroups[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lb *SLoadbalancer) purgeListeners(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
listeners, err := lb.GetLoadbalancerListeners()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range listeners {
|
|
err = listeners[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lb *SLoadbalancer) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lb)
|
|
defer lockman.ReleaseObject(ctx, lb)
|
|
|
|
lb.DeletePreventionOff(lb, userCred)
|
|
|
|
var err error
|
|
|
|
if lb.BackendGroupId != "" {
|
|
_, err = db.UpdateWithLock(ctx, lb, func() error {
|
|
//避免 purge backendgroups 时循环依赖
|
|
lb.BackendGroupId = ""
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
return fmt.Errorf("loadbalancer %s(%s): clear up backend group error: %v", lb.Name, lb.Id, err)
|
|
}
|
|
}
|
|
|
|
err = lb.detachAllNetworks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lb.DeleteEip(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lb.purgeBackendGroups(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lb.purgeListeners(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lb.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
lb.LBPendingDelete(ctx, userCred)
|
|
return nil
|
|
}
|
|
|
|
func (lbl *SLoadbalancerListener) purgeListenerRules(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
listenerRules, err := lbl.GetLoadbalancerListenerRules()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range listenerRules {
|
|
err = listenerRules[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lbl *SLoadbalancerListener) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbl)
|
|
defer lockman.ReleaseObject(ctx, lbl)
|
|
|
|
err := lbl.purgeListenerRules(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lbl.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
lbl.LBPendingDelete(ctx, userCred)
|
|
return nil
|
|
}
|
|
|
|
func (lblr *SLoadbalancerListenerRule) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lblr)
|
|
defer lockman.ReleaseObject(ctx, lblr)
|
|
|
|
err := lblr.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return lblr.DoPendingDelete(ctx, userCred)
|
|
}
|
|
|
|
func (lbbg *SLoadbalancerBackendGroup) purgeBackends(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
backends, err := lbbg.GetBackends()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range backends {
|
|
err = backends[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lbbg *SLoadbalancerBackendGroup) purgeListeners(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
listeners, err := lbbg.GetLoadbalancerListeners()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range listeners {
|
|
err = listeners[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lbbg *SLoadbalancerBackendGroup) purgeListenerrules(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
rules, err := lbbg.GetLoadbalancerListenerRules()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range rules {
|
|
err = rules[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lbbg *SLoadbalancerBackendGroup) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbbg)
|
|
defer lockman.ReleaseObject(ctx, lbbg)
|
|
|
|
err := lbbg.purgeBackends(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lbbg.purgeListeners(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lbbg.purgeListenerrules(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lbbg.purgeCachedlbbg(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lbbg.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
lbbg.LBPendingDelete(ctx, userCred)
|
|
return nil
|
|
}
|
|
|
|
func (lbbg *SLoadbalancerBackendGroup) purgeCachedlbbg(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
switch lbbg.GetProviderName() {
|
|
case api.CLOUD_PROVIDER_AWS:
|
|
return lbbg.purgeAwsCachedlbbg(ctx, userCred)
|
|
case api.CLOUD_PROVIDER_HUAWEI, api.CLOUD_PROVIDER_HCSO:
|
|
return lbbg.purgeHuaweiCachedlbbg(ctx, userCred)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (lbbg *SLoadbalancerBackendGroup) purgeAwsCachedlbbg(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
caches, err := lbbg.GetAwsCachedlbbg()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range caches {
|
|
if err := caches[i].purge(ctx, userCred); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (lbbg *SAwsCachedLbbg) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbbg)
|
|
defer lockman.ReleaseObject(ctx, lbbg)
|
|
|
|
err := lbbg.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lbbg.SVirtualResourceBase.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (lbbg *SLoadbalancerBackendGroup) purgeHuaweiCachedlbbg(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
caches, err := lbbg.GetHuaweiCachedlbbg()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range caches {
|
|
if err := caches[i].purge(ctx, userCred); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (lbbg *SHuaweiCachedLbbg) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbbg)
|
|
defer lockman.ReleaseObject(ctx, lbbg)
|
|
|
|
err := lbbg.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lbbg.SVirtualResourceBase.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (lbb *SLoadbalancerBackend) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbb)
|
|
defer lockman.ReleaseObject(ctx, lbb)
|
|
|
|
err := lbb.purgeCachedlbb(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = lbb.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return lbb.DoPendingDelete(ctx, userCred)
|
|
}
|
|
|
|
func (lbb *SLoadbalancerBackend) purgeCachedlbb(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
switch lbb.GetProviderName() {
|
|
case api.CLOUD_PROVIDER_AWS:
|
|
return lbb.purgeAwsCachedlbb(ctx, userCred)
|
|
case api.CLOUD_PROVIDER_HUAWEI, api.CLOUD_PROVIDER_HCSO:
|
|
return lbb.purgeHuaweiCachedlbb(ctx, userCred)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (lbb *SLoadbalancerBackend) purgeAwsCachedlbb(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
caches, err := lbb.GetAwsCachedlbb()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range caches {
|
|
if err := caches[i].purge(ctx, userCred); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (lbb *SAwsCachedLb) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbb)
|
|
defer lockman.ReleaseObject(ctx, lbb)
|
|
|
|
err := lbb.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lbb.SVirtualResourceBase.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (lbb *SLoadbalancerBackend) purgeHuaweiCachedlbb(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
caches, err := lbb.GetHuaweiCachedlbb()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range caches {
|
|
if err := caches[i].purge(ctx, userCred); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (lbb *SHuaweiCachedLb) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbb)
|
|
defer lockman.ReleaseObject(ctx, lbb)
|
|
|
|
err := lbb.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lbb.SVirtualResourceBase.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SSnapshotManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
snapshots := make([]SSnapshot, 0)
|
|
err := fetchByManagerId(manager, providerId, &snapshots)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range snapshots {
|
|
err := snapshots[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (snapshot *SSnapshot) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, snapshot)
|
|
defer lockman.ReleaseObject(ctx, snapshot)
|
|
|
|
err := snapshot.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "ValidatePurgeCondition for snapshot %s(%s)", snapshot.Name, snapshot.Id)
|
|
}
|
|
return snapshot.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SSnapshotPolicyCacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential,
|
|
providerId string) error {
|
|
// delete snapshot policy cache belong to manager
|
|
spCaches := make([]SSnapshotPolicyCache, 0)
|
|
err := fetchByManagerId(SnapshotPolicyCacheManager, providerId, &spCaches)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range spCaches {
|
|
err := spCaches[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (spc *SSnapshotPolicyCache) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, spc)
|
|
defer lockman.ReleaseObject(ctx, spc)
|
|
err := spc.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return spc.RealDetele(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SSnapshotPolicyManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
// delete snapshot policy cache belong to manager
|
|
return SnapshotPolicyCacheManager.purgeAll(ctx, userCred, providerId)
|
|
}
|
|
|
|
func (manager *SStoragecacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
scs := make([]SStoragecache, 0)
|
|
err := fetchByManagerId(manager, providerId, &scs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range scs {
|
|
err := scs[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (sc *SStoragecache) purgeAllCachedimages(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
cachedimages, err := sc.getCachedImages()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "getCachedImages for storagecache %s(%s)", sc.Name, sc.Id)
|
|
}
|
|
for i := range cachedimages {
|
|
err := cachedimages[i].syncRemoveCloudImage(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (sc *SStoragecache) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, sc)
|
|
defer lockman.ReleaseObject(ctx, sc)
|
|
|
|
err := sc.purgeAllCachedimages(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = sc.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return sc.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SStorageManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
storages := make([]SStorage, 0)
|
|
err := fetchByManagerId(manager, providerId, &storages)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range storages {
|
|
err := storages[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (storage *SStorage) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, storage)
|
|
defer lockman.ReleaseObject(ctx, storage)
|
|
|
|
err := storage.purgeDisks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = storage.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return storage.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SVpcManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
vpcs := make([]SVpc, 0)
|
|
err := fetchByManagerId(manager, providerId, &vpcs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range vpcs {
|
|
err := vpcs[i].Purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SGlobalVpcManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
gvpcs := make([]SGlobalVpc, 0)
|
|
err := fetchByManagerId(manager, providerId, &gvpcs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range gvpcs {
|
|
err := gvpcs[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purgeGuestnetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
q := GuestnetworkManager.Query().Equals("network_id", net.Id)
|
|
gns := make([]SGuestnetwork, 0)
|
|
err := db.FetchModelObjects(GuestnetworkManager, q, &gns)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range gns {
|
|
err = gns[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purgeHostnetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
q := HostnetworkManager.Query().Equals("network_id", net.Id)
|
|
hns := make([]SHostnetwork, 0)
|
|
err := db.FetchModelObjects(HostnetworkManager, q, &hns)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range hns {
|
|
err = hns[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purgeGroupnetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
q := GroupnetworkManager.Query().Equals("network_id", net.Id)
|
|
grns := make([]SGroupnetwork, 0)
|
|
err := db.FetchModelObjects(GroupnetworkManager, q, &grns)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range grns {
|
|
err = grns[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purgeLoadbalancernetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
q := LoadbalancernetworkManager.Query().Equals("network_id", net.Id)
|
|
lbns := make([]SLoadbalancerNetwork, 0)
|
|
err := db.FetchModelObjects(LoadbalancernetworkManager, q, &lbns)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range lbns {
|
|
err = lbns[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purgeEipnetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
q := ElasticipManager.Query().Equals("network_id", net.Id)
|
|
eips := make([]SElasticip, 0)
|
|
err := db.FetchModelObjects(ElasticipManager, q, &eips)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range eips {
|
|
err = eips[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purgeReservedIps(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
q := ReservedipManager.Query().Equals("network_id", net.Id)
|
|
rips := make([]SReservedip, 0)
|
|
err := db.FetchModelObjects(ReservedipManager, q, &rips)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range rips {
|
|
err = rips[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (nic *SNetworkInterface) purgeNetworkAddres(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
networks, err := nic.GetNetworks()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range networks {
|
|
err := networks[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (nic *SNetworkInterface) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, nic)
|
|
defer lockman.ReleaseObject(ctx, nic)
|
|
|
|
err := nic.purgeNetworkAddres(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = nic.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nic.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (net *SNetwork) purgeDBInstanceNetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
dbNets, err := net.GetDBInstanceNetworks()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "GetDBInstanceNetworks")
|
|
}
|
|
for i := range dbNets {
|
|
err = dbNets[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "Delete %d", dbNets[i].RowId)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purgeNetworkInterfaces(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
networkinterfaceIds := NetworkinterfacenetworkManager.Query("networkinterface_id").Equals("network_id", net.Id).Distinct().SubQuery()
|
|
q := NetworkInterfaceManager.Query().In("id", networkinterfaceIds)
|
|
interfaces := make([]SNetworkInterface, 0)
|
|
err := db.FetchModelObjects(NetworkInterfaceManager, q, &interfaces)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range interfaces {
|
|
err = interfaces[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (net *SNetwork) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, net)
|
|
defer lockman.ReleaseObject(ctx, net)
|
|
|
|
err := net.purgeGuestnetworks(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeGuestnetworks")
|
|
}
|
|
err = net.purgeHostnetworks(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeHostnetworks")
|
|
}
|
|
err = net.purgeGroupnetworks(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeGroupnetworks")
|
|
}
|
|
err = net.purgeLoadbalancernetworks(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeLoadbalancernetworks")
|
|
}
|
|
err = net.purgeEipnetworks(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeEipnetworks")
|
|
}
|
|
err = net.purgeReservedIps(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeReservedIps")
|
|
}
|
|
|
|
err = net.purgeNetworkInterfaces(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeNetworkInterfaces")
|
|
}
|
|
|
|
err = net.purgeDBInstanceNetworks(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeDBInstanceNetworks")
|
|
}
|
|
|
|
err = net.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "ValidateDeleteCondition")
|
|
}
|
|
return net.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (wire *SWire) purgeNetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
nets, err := wire.getNetworks(nil, rbacutils.ScopeNone)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range nets {
|
|
err := nets[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (wire *SWire) purgeHostwires(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
hws, _ := wire.GetHostwires()
|
|
for j := range hws {
|
|
err := hws[j].Detach(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (wire *SWire) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, wire)
|
|
defer lockman.ReleaseObject(ctx, wire)
|
|
|
|
err := wire.purgeNetworks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = wire.purgeHostwires(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = wire.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return wire.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (vpc *SVpc) purgeWires(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
wires, err := vpc.GetWires()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "GetWres for vpc %s", vpc.Id)
|
|
}
|
|
for i := range wires {
|
|
err := wires[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (self *SVpc) purgeIPv6Gateways(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
gws, err := self.GetIPv6Gateways()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "GetIPv6Gateways for vpc %s", self.Id)
|
|
}
|
|
for i := range gws {
|
|
err := gws[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (vpc *SVpc) purgeVpcPeeringConnections(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
vpcPCs, err := vpc.GetVpcPeeringConnections()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range vpcPCs {
|
|
err := vpcPCs[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (vpc *SVpc) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, vpc)
|
|
defer lockman.ReleaseObject(ctx, vpc)
|
|
|
|
err := vpc.purgeVpcPeeringConnections(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = vpc.purgeIPv6Gateways(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeIPv6Gateways")
|
|
}
|
|
|
|
err = vpc.purgeWires(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = vpc.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return vpc.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (dn *SNatDEntry) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
err := dn.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return dn.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (sn *SNatSEntry) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
err := sn.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return sn.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SCloudproviderregionManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
cprs, err := CloudproviderRegionManager.fetchRecordsByCloudproviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range cprs {
|
|
err = cprs[i].Detach(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (zone *SZone) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, zone)
|
|
defer lockman.ReleaseObject(ctx, zone)
|
|
|
|
err := zone.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return zone.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (self *SCloudregion) purgeSkus(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
skus, err := self.GetServerSkus()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "GetServerSkus")
|
|
}
|
|
for i := range skus {
|
|
err = skus[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
modelarts_sku, err := self.GetModelartsPoolSkus()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "GetModelartsPoolSkus")
|
|
}
|
|
for i := range modelarts_sku {
|
|
err = modelarts_sku[i].Delete(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (region *SCloudregion) purgeZones(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
zones, err := region.GetZones()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range zones {
|
|
err = zones[i].Purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (region *SCloudregion) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, region)
|
|
defer lockman.ReleaseObject(ctx, region)
|
|
|
|
err := region.purgeSkus(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeSkus")
|
|
}
|
|
|
|
err = region.purgeZones(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = region.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return region.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SCloudregionManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
regions, err := manager.getCloudregionsByProviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range regions {
|
|
c, err := CloudproviderRegionManager.Query().NotEquals("cloudprovider_id", providerId).Equals("cloudregion_id", regions[i].GetId()).CountWithError()
|
|
if err != nil && errors.Cause(err) != sql.ErrNoRows {
|
|
return err
|
|
}
|
|
// 仍然有其他provider在使用该region
|
|
if c > 0 {
|
|
log.Infof("cloud region is using by other providers.skipped purge region %s with id %s", regions[i].GetName(), regions[i].GetId())
|
|
return nil
|
|
}
|
|
|
|
err = regions[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (table *SNatSEntry) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, table)
|
|
defer lockman.ReleaseObject(ctx, table)
|
|
|
|
err := table.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return table.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (nat *SNatGateway) purgeSTables(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
tables, err := nat.GetSTable()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range tables {
|
|
err = tables[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (table *SNatDEntry) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, table)
|
|
defer lockman.ReleaseObject(ctx, table)
|
|
|
|
err := table.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return table.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (nat *SNatGateway) purgeDTables(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
tables, err := nat.GetDTable()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range tables {
|
|
err = tables[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (nat *SNatGateway) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, nat)
|
|
defer lockman.ReleaseObject(ctx, nat)
|
|
|
|
err := nat.purgeDTables(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = nat.purgeSTables(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
nat.DeletePreventionOff(nat, userCred)
|
|
|
|
err = nat.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nat.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SNatGatewayManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
nats, err := manager.getNatgatewaysByProviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range nats {
|
|
err = nats[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SNetworkInterfaceManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
nics, err := manager.getNetworkInterfacesByProviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range nics {
|
|
err = nics[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (bucket *SBucket) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, bucket)
|
|
defer lockman.ReleaseObject(ctx, bucket)
|
|
|
|
err := bucket.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return bucket.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (bucketManager *SBucketManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
buckets := make([]SBucket, 0)
|
|
err := fetchByManagerId(bucketManager, providerId, &buckets)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range buckets {
|
|
err := buckets[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (account *SDBInstanceAccount) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, account)
|
|
defer lockman.ReleaseObject(ctx, account)
|
|
|
|
privileges, err := account.GetDBInstancePrivileges()
|
|
if err != nil {
|
|
return errors.Wrap(err, "account.GetDBInstancePrivileges")
|
|
}
|
|
|
|
for _, privilege := range privileges {
|
|
err = privilege.Delete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "privilege.Delete() %s", privilege.Id)
|
|
}
|
|
}
|
|
|
|
err = account.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return account.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SDBInstance) purgeAccounts(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
accounts, err := instance.GetDBInstanceAccounts()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range accounts {
|
|
err = accounts[i].Purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (database *SDBInstanceDatabase) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, database)
|
|
defer lockman.ReleaseObject(ctx, database)
|
|
|
|
privileges, err := database.GetDBInstancePrivileges()
|
|
if err != nil {
|
|
return errors.Wrap(err, "database.GetDBInstancePrivileges")
|
|
}
|
|
|
|
for _, privilege := range privileges {
|
|
err = privilege.Delete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "privilege.Delete() %s", privilege.Id)
|
|
}
|
|
}
|
|
|
|
err = database.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return database.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SDBInstance) purgeDatabases(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
databases, err := instance.GetDBDatabases()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range databases {
|
|
err = databases[i].Purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (parameter *SDBInstanceParameter) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, parameter)
|
|
defer lockman.ReleaseObject(ctx, parameter)
|
|
|
|
err := parameter.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return parameter.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SDBInstance) purgeParameters(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
parameters, err := instance.GetDBParameters()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range parameters {
|
|
err = parameters[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (network *SDBInstanceNetwork) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, network)
|
|
defer lockman.ReleaseObject(ctx, network)
|
|
|
|
err := network.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "ValidateDeleteCondition")
|
|
}
|
|
return network.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SDBInstance) purgeNetwork(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
networks, err := instance.GetDBNetworks()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "GetDBNetworks")
|
|
}
|
|
for i := range networks {
|
|
err = networks[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "networks.purge %d", networks[i].RowId)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (self *SDBInstanceSecgroup) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, self)
|
|
defer lockman.ReleaseObject(ctx, self)
|
|
|
|
return self.Detach(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SDBInstance) purgeSecgroups(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
secgroups, err := instance.GetDBInstanceSecgroups()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "GetDBInstanceSecgroups")
|
|
}
|
|
for i := range secgroups {
|
|
err = secgroups[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "secgroups.purge %d", secgroups[i].RowId)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (instance *SDBInstance) PurgeBackups(ctx context.Context, userCred mcclient.TokenCredential, mode string) error {
|
|
backups, err := instance.GetDBInstanceBackupByMode(mode)
|
|
if err != nil {
|
|
return errors.Wrap(err, "instance.GetDBInstanceBackups")
|
|
}
|
|
for _, backup := range backups {
|
|
err = backup.purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "backup.purge %s(%s)", backup.Name, backup.Id)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (instance *SDBInstance) Purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, instance)
|
|
defer lockman.ReleaseObject(ctx, instance)
|
|
|
|
instance.DeletePreventionOff(instance, userCred)
|
|
|
|
err := instance.purgeAccounts(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeAccounts")
|
|
}
|
|
|
|
err = instance.purgeDatabases(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeDatabases")
|
|
}
|
|
|
|
err = instance.purgeParameters(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeParameters")
|
|
}
|
|
|
|
err = instance.purgeNetwork(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeNetwork")
|
|
}
|
|
|
|
err = instance.purgeSecgroups(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "purgeSecgroups")
|
|
}
|
|
|
|
err = instance.PurgeBackups(ctx, userCred, api.BACKUP_MODE_AUTOMATED)
|
|
if err != nil {
|
|
return errors.Wrap(err, "instance.purgeBackups")
|
|
}
|
|
|
|
err = instance.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "ValidateDeleteCondition")
|
|
}
|
|
|
|
return instance.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SDBInstanceManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
instances, err := manager.getDBInstancesByProviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range instances {
|
|
err = instances[i].Purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (backup *SDBInstanceBackup) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, backup)
|
|
defer lockman.ReleaseObject(ctx, backup)
|
|
|
|
err := backup.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return backup.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SDBInstanceBackupManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
backups, err := manager.getDBInstanceBackupsByProviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range backups {
|
|
err = backups[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (instance *SElasticcache) purgeAccounts(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
accounts, err := instance.GetElasticcacheAccounts()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range accounts {
|
|
err = accounts[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (instance *SElasticcacheAccount) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, instance)
|
|
defer lockman.ReleaseObject(ctx, instance)
|
|
|
|
err := instance.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return instance.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SElasticcache) purgeAcls(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
acls, err := instance.GetElasticcacheAcls()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range acls {
|
|
err = acls[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (instance *SElasticcacheAcl) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, instance)
|
|
defer lockman.ReleaseObject(ctx, instance)
|
|
|
|
err := instance.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return instance.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SElasticcache) purgeBackups(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
backups, err := instance.GetElasticcacheBackups()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range backups {
|
|
err = backups[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (instance *SElasticcacheBackup) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, instance)
|
|
defer lockman.ReleaseObject(ctx, instance)
|
|
|
|
err := instance.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return instance.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SElasticcache) purgeParameters(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
parameters, err := instance.GetElasticcacheParameters()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i := range parameters {
|
|
err = parameters[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (instance *SElasticcacheParameter) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, instance)
|
|
defer lockman.ReleaseObject(ctx, instance)
|
|
|
|
err := instance.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return instance.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SElasticcache) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, instance)
|
|
defer lockman.ReleaseObject(ctx, instance)
|
|
|
|
instance.DeletePreventionOff(instance, userCred)
|
|
|
|
err := instance.purgeAccounts(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = instance.purgeAcls(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = instance.purgeBackups(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = instance.purgeParameters(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = instance.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return instance.SVirtualResourceBase.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SElasticcacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
instances, err := manager.getElasticcachesByProviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range instances {
|
|
err = instances[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SSecurityGroupCacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
caches := []SSecurityGroupCache{}
|
|
err := fetchByManagerId(manager, providerId, &caches)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range caches {
|
|
err := caches[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (quota *SCloudproviderQuota) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, quota)
|
|
defer lockman.ReleaseObject(ctx, quota)
|
|
|
|
err := quota.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return quota.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SCloudproviderQuotaManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
quotas := []SCloudproviderQuota{}
|
|
err := fetchByManagerId(manager, providerId, "as)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range quotas {
|
|
err := quotas[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (assignment *SPolicyAssignment) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, assignment)
|
|
defer lockman.ReleaseObject(ctx, assignment)
|
|
|
|
err := assignment.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "assignment.ValidateDeleteCondition(%s(%s))", assignment.Name, assignment.Id)
|
|
}
|
|
|
|
return assignment.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (definition *SPolicyDefinition) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, definition)
|
|
defer lockman.ReleaseObject(ctx, definition)
|
|
|
|
assignments, err := definition.GetPolicyAssignments()
|
|
if err != nil {
|
|
return errors.Wrap(err, "definition.GetPolicyAssignments")
|
|
}
|
|
|
|
for i := range assignments {
|
|
err = assignments[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
err = definition.ValidateDeleteCondition(ctx, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return definition.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SPolicyDefinitionManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
definitions := []SPolicyDefinition{}
|
|
err := fetchByManagerId(manager, providerId, &definitions)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range definitions {
|
|
err := definitions[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (self *SAccessGroupCache) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, self)
|
|
defer lockman.ReleaseObject(ctx, self)
|
|
|
|
return self.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SAccessGroupCacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
caches := []SAccessGroupCache{}
|
|
err := fetchByManagerId(manager, providerId, &caches)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
|
|
for i := range caches {
|
|
err := caches[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cache purge")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (self *SFileSystem) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, self)
|
|
defer lockman.ReleaseObject(ctx, self)
|
|
|
|
return self.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SFileSystemManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
files := []SFileSystem{}
|
|
err := fetchByManagerId(manager, providerId, &files)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
|
|
for i := range files {
|
|
err := files[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cache purge")
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (vpcPC *SVpcPeeringConnection) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, vpcPC)
|
|
defer lockman.ReleaseObject(ctx, vpcPC)
|
|
return vpcPC.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (manager *SInterVpcNetworkManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
networks := []SInterVpcNetwork{}
|
|
err := fetchByManagerId(manager, providerId, &networks)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range networks {
|
|
err := networks[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "inter vpc network delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SWafRuleGroupCacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
caches := []SWafRuleGroupCache{}
|
|
err := fetchByManagerId(manager, providerId, &caches)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range caches {
|
|
err := caches[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cache delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SWafIPSetCacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
caches := []SWafIPSetCache{}
|
|
err := fetchByManagerId(manager, providerId, &caches)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range caches {
|
|
err := caches[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cache delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SWafRegexSetCacheManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
caches := []SWafRegexSetCache{}
|
|
err := fetchByManagerId(manager, providerId, &caches)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range caches {
|
|
err := caches[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cache delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SWafInstanceManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
ins := []SWafInstance{}
|
|
err := fetchByManagerId(manager, providerId, &ins)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range ins {
|
|
err := ins[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cache delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SMongoDBManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
dbs := []SMongoDB{}
|
|
err := fetchByManagerId(manager, providerId, &dbs)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range dbs {
|
|
err := dbs[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cache delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SElasticSearchManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
ess := []SElasticSearch{}
|
|
err := fetchByManagerId(manager, providerId, &ess)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range ess {
|
|
lockman.LockObject(ctx, &ess[i])
|
|
defer lockman.ReleaseObject(ctx, &ess[i])
|
|
|
|
err := ess[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "elastic search delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SKafkaManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
kafkas := []SKafka{}
|
|
err := fetchByManagerId(manager, providerId, &kafkas)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range kafkas {
|
|
lockman.LockObject(ctx, &kafkas[i])
|
|
defer lockman.ReleaseObject(ctx, &kafkas[i])
|
|
|
|
err := kafkas[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "kafka delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SCDNDomainManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
domains := []SCDNDomain{}
|
|
err := fetchByManagerId(manager, providerId, &domains)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range domains {
|
|
lockman.LockObject(ctx, &domains[i])
|
|
defer lockman.ReleaseObject(ctx, &domains[i])
|
|
|
|
err := domains[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "cdn domain delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SKubeClusterManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
clusters := []SKubeCluster{}
|
|
err := fetchByManagerId(manager, providerId, &clusters)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range clusters {
|
|
lockman.LockObject(ctx, &clusters[i])
|
|
defer lockman.ReleaseObject(ctx, &clusters[i])
|
|
|
|
err := clusters[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "kube cluster delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *STablestoreManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
tablestores := make([]STablestore, 0)
|
|
err := fetchByManagerId(manager, providerId, &tablestores)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range tablestores {
|
|
lockman.LockObject(ctx, &tablestores[i])
|
|
defer lockman.ReleaseObject(ctx, &tablestores[i])
|
|
|
|
err := tablestores[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "real delete %s", tablestores[i].Id)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (manager *SModelartsPoolManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
ess := []SModelartsPool{}
|
|
err := fetchByManagerId(manager, providerId, &ess)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "fetchByManagerId")
|
|
}
|
|
for i := range ess {
|
|
lockman.LockObject(ctx, &ess[i])
|
|
defer lockman.ReleaseObject(ctx, &ess[i])
|
|
|
|
err := ess[i].RealDelete(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "modelarts pool delete")
|
|
}
|
|
}
|
|
return nil
|
|
}
|