diff --git a/pkg/compute/models/loadbalancerbackendgroups.go b/pkg/compute/models/loadbalancerbackendgroups.go index 96e3bca730..241161bbbe 100644 --- a/pkg/compute/models/loadbalancerbackendgroups.go +++ b/pkg/compute/models/loadbalancerbackendgroups.go @@ -183,6 +183,16 @@ func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Cont return region.GetDriver().ValidateCreateLoadbalancerBackendGroupData(ctx, userCred, data, lb, backends) } +func (lbbg *SLoadbalancerBackendGroup) GetLoadbalancerListenerRules() ([]SLoadbalancerListenerRule, error) { + q := LoadbalancerListenerRuleManager.Query().Equals("backend_group_id", lbbg.Id).IsFalse("pending_deleted") + rules := []SLoadbalancerListenerRule{} + err := db.FetchModelObjects(LoadbalancerListenerRuleManager, q, &rules) + if err != nil { + return nil, err + } + return rules, nil +} + func (lbbg *SLoadbalancerBackendGroup) GetLoadbalancerListeners() ([]SLoadbalancerListener, error) { q := LoadbalancerListenerManager.Query().Equals("backend_group_id", lbbg.Id).IsFalse("pending_deleted") listeners := []SLoadbalancerListener{} diff --git a/pkg/compute/models/purge.go b/pkg/compute/models/purge.go index 1273b453c5..94076583ed 100644 --- a/pkg/compute/models/purge.go +++ b/pkg/compute/models/purge.go @@ -391,6 +391,20 @@ func (lbbg *SLoadbalancerBackendGroup) purgeListeners(ctx context.Context, userC 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) @@ -405,6 +419,11 @@ func (lbbg *SLoadbalancerBackendGroup) purge(ctx context.Context, userCred mccli return err } + err = lbbg.purgeListenerrules(ctx, userCred) + if err != nil { + return err + } + err = lbbg.ValidateDeleteCondition(ctx) if err != nil { return err