NSXV: Octavia L7 rule delete

Fix a bug with L7 rule deletion

Change-Id: Ib40040c5d85ebef7d8566d1d2a46438367887927
This commit is contained in:
Kobi Samoray 2021-04-22 10:27:50 +03:00
parent 98c9df4cc0
commit a7575ae6af
2 changed files with 8 additions and 5 deletions

View File

@ -42,7 +42,7 @@ def policy_to_application_rule(policy):
condition = '' condition = ''
rule_lines = [] rule_lines = []
for rule in policy['rules']: for rule in policy['rules']:
if rule['provisioning_status'] == constants.PENDING_DELETE: if rule.get('provisioning_status') == constants.PENDING_DELETE:
# skip this rule as it is being deleted # skip this rule as it is being deleted
continue continue

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib import constants
from oslo_log import helpers as log_helpers from oslo_log import helpers as log_helpers
from oslo_log import log as logging from oslo_log import log as logging
from oslo_utils import excutils from oslo_utils import excutils
@ -29,8 +30,7 @@ class EdgeL7RuleManagerFromDict(base_mgr.EdgeLoadbalancerBaseManager):
def __init__(self, vcns_driver): def __init__(self, vcns_driver):
super(EdgeL7RuleManagerFromDict, self).__init__(vcns_driver) super(EdgeL7RuleManagerFromDict, self).__init__(vcns_driver)
def _handle_l7policy_rules_change(self, context, rule, completor, def _handle_l7policy_rules_change(self, context, rule, completor):
delete=False):
# Get the nsx application rule id and edge id # Get the nsx application rule id and edge id
edge_id, app_rule_id = l7policy_mgr.policy_to_edge_and_rule_id( edge_id, app_rule_id = l7policy_mgr.policy_to_edge_and_rule_id(
context, rule['l7policy_id']) context, rule['l7policy_id'])
@ -60,8 +60,11 @@ class EdgeL7RuleManagerFromDict(base_mgr.EdgeLoadbalancerBaseManager):
self._handle_l7policy_rules_change(context, new_rule, completor) self._handle_l7policy_rules_change(context, new_rule, completor)
def delete(self, context, rule, completor): def delete(self, context, rule, completor):
self._handle_l7policy_rules_change(context, rule, completor, # Mark rule for deletion in policy rule list
delete=True) for r in rule['policy']['rules']:
if r['l7rule_id'] == rule['l7rule_id']:
r['provisioning_status'] = constants.PENDING_DELETE
self._handle_l7policy_rules_change(context, rule, completor)
def delete_cascade(self, context, rule, completor): def delete_cascade(self, context, rule, completor):
self.delete(context, rule, completor) self.delete(context, rule, completor)