From 25836b22b3ea41271c022c033e8a177ad8d7e729 Mon Sep 17 00:00:00 2001 From: TangBin Date: Tue, 6 Aug 2019 11:47:34 +0800 Subject: [PATCH] add elastic cache purge --- pkg/compute/models/cloudproviders.go | 1 + pkg/compute/models/elasticcache_instances.go | 9 ++ pkg/compute/models/purge.go | 150 +++++++++++++++++++ 3 files changed, 160 insertions(+) diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index 35eec7da9a..028d91b175 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -1132,6 +1132,7 @@ func (self *SCloudprovider) RealDelete(ctx context.Context, userCred mcclient.To NatGatewayManager, DBInstanceManager, DBInstanceBackupManager, + ElasticcacheManager, VpcManager, ElasticipManager, NetworkInterfaceManager, diff --git a/pkg/compute/models/elasticcache_instances.go b/pkg/compute/models/elasticcache_instances.go index 0e6127b362..b989d08262 100644 --- a/pkg/compute/models/elasticcache_instances.go +++ b/pkg/compute/models/elasticcache_instances.go @@ -293,3 +293,12 @@ func (manager *SElasticcacheManager) newFromCloudElasticcache(ctx context.Contex return &instance, nil } + +func (manager *SElasticcacheManager) getElasticcachesByProviderId(providerId string) ([]SElasticcache, error) { + instances := []SElasticcache{} + err := fetchByManagerId(manager, providerId, &instances) + if err != nil { + return nil, errors.Wrapf(err, "getElasticcachesByProviderId.fetchByManagerId") + } + return instances, nil +} diff --git a/pkg/compute/models/purge.go b/pkg/compute/models/purge.go index 0ec12e7d61..84d0e35e50 100644 --- a/pkg/compute/models/purge.go +++ b/pkg/compute/models/purge.go @@ -1264,3 +1264,153 @@ func (manager *SDBInstanceBackupManager) purgeAll(ctx context.Context, userCred } 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.ValidateDeleteCondition(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.ValidateDeleteCondition(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.ValidateDeleteCondition(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.ValidateDeleteCondition(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) + + 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.ValidateDeleteCondition(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 +}