mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-06-24 10:23:43 +08:00
1711 lines
40 KiB
Go
1711 lines
40 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"
|
|
"fmt"
|
|
|
|
"yunion.io/x/log"
|
|
"yunion.io/x/pkg/errors"
|
|
"yunion.io/x/pkg/tristate"
|
|
|
|
"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"
|
|
)
|
|
|
|
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)
|
|
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 err
|
|
}
|
|
|
|
guests := host.GetGuests()
|
|
for i := range guests {
|
|
err := guests[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// clean all disks on locally attached storages
|
|
storages := host._getAttachedStorages(tristate.None, tristate.None, api.STORAGE_LOCAL)
|
|
for i := range storages {
|
|
err := storages[i].purgeDisks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
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.DeleteAllDisksInDB(ctx, userCred)
|
|
|
|
err := guest.ValidatePurgeCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return guest.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 err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (disk *SDisk) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, disk)
|
|
defer lockman.ReleaseObject(ctx, disk)
|
|
|
|
err := disk.DetachAllSnapshotpolicies(ctx, userCred)
|
|
if err != nil {
|
|
return errors.Wrap(err, "disk.DetachAllSnapshotpolicies")
|
|
}
|
|
|
|
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
|
|
}
|
|
for i := range lbcs {
|
|
err := lbcs[i].purge(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (lbcert *SCachedLoadbalancerCertificate) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, lbcert)
|
|
defer lockman.ReleaseObject(ctx, lbcert)
|
|
|
|
err := lbcert.ValidateDeleteCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lbcert.DoPendingDelete(ctx, userCred)
|
|
}
|
|
|
|
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)
|
|
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)
|
|
|
|
_, 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)
|
|
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)
|
|
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)
|
|
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:
|
|
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)
|
|
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)
|
|
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)
|
|
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:
|
|
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)
|
|
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)
|
|
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.ValidateDeleteCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
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.LockObject(ctx, spc)
|
|
err := spc.ValidateDeleteCondition(ctx)
|
|
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 := sc.getCachedImages()
|
|
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)
|
|
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)
|
|
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 (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)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nic.Delete(ctx, userCred)
|
|
}
|
|
|
|
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 err
|
|
}
|
|
err = net.purgeHostnetworks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = net.purgeGroupnetworks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = net.purgeLoadbalancernetworks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = net.purgeEipnetworks(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = net.purgeReservedIps(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = net.purgeNetworkInterfaces(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = net.ValidateDeleteCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return net.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
func (wire *SWire) purgeNetworks(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
nets, err := wire.getNetworks()
|
|
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)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return wire.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (vpc *SVpc) purgeWires(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
wires := vpc.GetWires()
|
|
for i := range wires {
|
|
err := wires[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.purgeWires(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = vpc.ValidateDeleteCondition(ctx)
|
|
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)
|
|
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)
|
|
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 (manager *SExternalProjectManager) purgeAll(ctx context.Context, userCred mcclient.TokenCredential, providerId string) error {
|
|
projs, err := manager.getProjectsByProviderId(providerId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for i := range projs {
|
|
err = projs[i].Delete(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)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return zone.Delete(ctx, userCred)
|
|
}
|
|
|
|
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.purgeZones(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = region.ValidateDeleteCondition(ctx)
|
|
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 {
|
|
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)
|
|
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)
|
|
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
|
|
}
|
|
|
|
err = nat.ValidateDeleteCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nat.Delete(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)
|
|
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)
|
|
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)
|
|
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)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return network.Delete(ctx, userCred)
|
|
}
|
|
|
|
func (instance *SDBInstance) purgeNetwork(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
network, _ := instance.GetDBNetwork()
|
|
if network != nil {
|
|
return network.purge(ctx, userCred)
|
|
}
|
|
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 err
|
|
}
|
|
|
|
err = instance.purgeDatabases(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = instance.purgeParameters(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = instance.purgeNetwork(ctx, userCred)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = instance.PurgeBackups(ctx, userCred, api.BACKUP_MODE_AUTOMATED)
|
|
if err != nil {
|
|
return errors.Wrap(err, "instance.purgeBackups")
|
|
}
|
|
|
|
err = instance.ValidateDeleteCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
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)
|
|
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.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 (cache *SSecurityGroupCache) purge(ctx context.Context, userCred mcclient.TokenCredential) error {
|
|
lockman.LockObject(ctx, cache)
|
|
defer lockman.ReleaseObject(ctx, cache)
|
|
|
|
err := cache.ValidateDeleteCondition(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return cache.RealDelete(ctx, userCred)
|
|
}
|
|
|
|
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)
|
|
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)
|
|
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)
|
|
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
|
|
}
|