Support LB rule changes by name suffix
In some cases the full name is unknown but a significant suffix is know and can be used to identify the correct rule. Change-Id: Id1ce82e0dd4c91f56f83c1976e3ce3e528d685da
This commit is contained in:
parent
19fe4ac438
commit
bd32dcf59c
@ -1307,6 +1307,36 @@ class TestPolicyLBVirtualServer(test_resources.NsxPolicyLibTestCase):
|
|||||||
{'display_name': 'xx', 'actions': '22'}])
|
{'display_name': 'xx', 'actions': '22'}])
|
||||||
self.assert_called_with_def(update_call, expected_def)
|
self.assert_called_with_def(update_call, expected_def)
|
||||||
|
|
||||||
|
def test_update_lb_rule_suffix(self):
|
||||||
|
vs_obj_id = '111'
|
||||||
|
vs_name = 'name-name'
|
||||||
|
with self.mock_get(
|
||||||
|
vs_obj_id, vs_name,
|
||||||
|
rules=[{'display_name': 'xx_with_suffix', 'actions': '11'},
|
||||||
|
{'display_name': 'yy'}]), \
|
||||||
|
self.mock_create_update() as update_call:
|
||||||
|
self.resourceApi.update_lb_rule(
|
||||||
|
vs_obj_id, 'xx', actions='22',
|
||||||
|
compare_name_suffix='suffix')
|
||||||
|
|
||||||
|
expected_def = lb_defs.LBVirtualServerDef(
|
||||||
|
virtual_server_id=vs_obj_id,
|
||||||
|
rules=[{'display_name': 'xx', 'actions': '22'},
|
||||||
|
{'display_name': 'yy'}])
|
||||||
|
self.assert_called_with_def(update_call, expected_def)
|
||||||
|
|
||||||
|
def test_update_lb_rule_wrong_suffix(self):
|
||||||
|
vs_obj_id = '111'
|
||||||
|
vs_name = 'name-name'
|
||||||
|
with self.mock_get(
|
||||||
|
vs_obj_id, vs_name,
|
||||||
|
rules=[{'display_name': 'xx_with_suffix', 'actions': '11'},
|
||||||
|
{'display_name': 'yy'}]):
|
||||||
|
self.assertRaises(nsxlib_exc.ResourceNotFound,
|
||||||
|
self.resourceApi.update_lb_rule,
|
||||||
|
vs_obj_id, 'xx', actions='22',
|
||||||
|
compare_name_suffix='bad')
|
||||||
|
|
||||||
def test_remove_lb_rule(self):
|
def test_remove_lb_rule(self):
|
||||||
vs_obj_id = '111'
|
vs_obj_id = '111'
|
||||||
vs_name = 'name-name'
|
vs_name = 'name-name'
|
||||||
@ -1321,6 +1351,37 @@ class TestPolicyLBVirtualServer(test_resources.NsxPolicyLibTestCase):
|
|||||||
rules=[{'display_name': 'yy'}])
|
rules=[{'display_name': 'yy'}])
|
||||||
self.assert_called_with_def(update_call, expected_def)
|
self.assert_called_with_def(update_call, expected_def)
|
||||||
|
|
||||||
|
def test_remove_lb_rule_by_suffix(self):
|
||||||
|
vs_obj_id = '111'
|
||||||
|
vs_name = 'name-name'
|
||||||
|
with self.mock_get(vs_obj_id, vs_name,
|
||||||
|
rules=[{'display_name': 'xx_with_suffix'},
|
||||||
|
{'display_name': 'yy'}]), \
|
||||||
|
self.mock_create_update() as update_call:
|
||||||
|
self.resourceApi.remove_lb_rule(vs_obj_id, 'with_suffix',
|
||||||
|
check_name_suffix=True)
|
||||||
|
|
||||||
|
expected_def = lb_defs.LBVirtualServerDef(
|
||||||
|
virtual_server_id=vs_obj_id,
|
||||||
|
rules=[{'display_name': 'yy'}])
|
||||||
|
self.assert_called_with_def(update_call, expected_def)
|
||||||
|
|
||||||
|
def test_remove_lb_rule_wrong_suffix(self):
|
||||||
|
vs_obj_id = '111'
|
||||||
|
vs_name = 'name-name'
|
||||||
|
with self.mock_get(vs_obj_id, vs_name,
|
||||||
|
rules=[{'display_name': 'xx_with_suffix'},
|
||||||
|
{'display_name': 'yy'}]),\
|
||||||
|
self.mock_create_update() as update_call:
|
||||||
|
self.resourceApi.remove_lb_rule(vs_obj_id, 'wrong_suffiX',
|
||||||
|
check_name_suffix=True)
|
||||||
|
|
||||||
|
expected_def = lb_defs.LBVirtualServerDef(
|
||||||
|
virtual_server_id=vs_obj_id,
|
||||||
|
rules=[{'display_name': 'xx_with_suffix'},
|
||||||
|
{'display_name': 'yy'}])
|
||||||
|
self.assert_called_with_def(update_call, expected_def)
|
||||||
|
|
||||||
def test_build_access_list_control(self):
|
def test_build_access_list_control(self):
|
||||||
lb_acl = self.resourceApi.build_access_list_control(
|
lb_acl = self.resourceApi.build_access_list_control(
|
||||||
constants.ACTION_ALLOW, 'fake_group_path', True)
|
constants.ACTION_ALLOW, 'fake_group_path', True)
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import abc
|
import abc
|
||||||
|
import copy
|
||||||
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
import six
|
import six
|
||||||
@ -983,9 +984,29 @@ class NsxPolicyLoadBalancerVirtualServerAPI(NsxPolicyResourceBase):
|
|||||||
vs_data=body,
|
vs_data=body,
|
||||||
rules=lb_rules, tenant=tenant)
|
rules=lb_rules, tenant=tenant)
|
||||||
|
|
||||||
|
def update_lb_rules(self, virtual_server_id, rules,
|
||||||
|
tenant=constants.POLICY_INFRA_TENANT):
|
||||||
|
lbvs_def = self.entry_def(
|
||||||
|
virtual_server_id=virtual_server_id,
|
||||||
|
tenant=tenant)
|
||||||
|
lbvs_path = lbvs_def.get_resource_path()
|
||||||
|
|
||||||
|
@utils.retry_upon_exception(
|
||||||
|
nsxlib_exc.StaleRevision,
|
||||||
|
max_attempts=self.policy_api.client.max_attempts)
|
||||||
|
def _update():
|
||||||
|
# Get the current data of vs
|
||||||
|
lbvs_body = self.policy_api.get(lbvs_def)
|
||||||
|
lbvs_body['rules'] = copy.deepcopy(rules)
|
||||||
|
# Update the backend using PUT
|
||||||
|
self.policy_api.client.update(lbvs_path, lbvs_body)
|
||||||
|
|
||||||
|
_update()
|
||||||
|
|
||||||
def update_lb_rule(self, virtual_server_id, lb_rule_name,
|
def update_lb_rule(self, virtual_server_id, lb_rule_name,
|
||||||
actions=None, match_conditions=None,
|
actions=None, match_conditions=None,
|
||||||
match_strategy=None, phase=None, position=-1,
|
match_strategy=None, phase=None, position=-1,
|
||||||
|
compare_name_suffix=None,
|
||||||
tenant=constants.POLICY_INFRA_TENANT):
|
tenant=constants.POLICY_INFRA_TENANT):
|
||||||
lb_rule = lb_defs.LBRuleDef(
|
lb_rule = lb_defs.LBRuleDef(
|
||||||
actions, match_conditions, lb_rule_name, match_strategy, phase)
|
actions, match_conditions, lb_rule_name, match_strategy, phase)
|
||||||
@ -997,8 +1018,13 @@ class NsxPolicyLoadBalancerVirtualServerAPI(NsxPolicyResourceBase):
|
|||||||
|
|
||||||
# Remove existing rule
|
# Remove existing rule
|
||||||
try:
|
try:
|
||||||
rule_index = next(lb_rules.index(r) for r in lb_rules
|
if compare_name_suffix:
|
||||||
if r.get('display_name') == lb_rule_name)
|
rule_index = next(lb_rules.index(r) for r in lb_rules
|
||||||
|
if r.get('display_name',
|
||||||
|
'').endswith(compare_name_suffix))
|
||||||
|
else:
|
||||||
|
rule_index = next(lb_rules.index(r) for r in lb_rules
|
||||||
|
if r.get('display_name') == lb_rule_name)
|
||||||
except Exception:
|
except Exception:
|
||||||
err_msg = (_("No resource in rules matched for values: "
|
err_msg = (_("No resource in rules matched for values: "
|
||||||
"%(values)s") % {'values': lb_rule_name})
|
"%(values)s") % {'values': lb_rule_name})
|
||||||
@ -1017,13 +1043,19 @@ class NsxPolicyLoadBalancerVirtualServerAPI(NsxPolicyResourceBase):
|
|||||||
rules=lb_rules, vs_data=body, tenant=tenant)
|
rules=lb_rules, vs_data=body, tenant=tenant)
|
||||||
|
|
||||||
def remove_lb_rule(self, virtual_server_id, lb_rule_name,
|
def remove_lb_rule(self, virtual_server_id, lb_rule_name,
|
||||||
|
check_name_suffix=False,
|
||||||
tenant=constants.POLICY_INFRA_TENANT):
|
tenant=constants.POLICY_INFRA_TENANT):
|
||||||
lbvs_def = self.entry_def(virtual_server_id=virtual_server_id,
|
lbvs_def = self.entry_def(virtual_server_id=virtual_server_id,
|
||||||
tenant=tenant)
|
tenant=tenant)
|
||||||
body = self.policy_api.get(lbvs_def)
|
body = self.policy_api.get(lbvs_def)
|
||||||
lb_rules = body.get('rules', [])
|
lb_rules = body.get('rules', [])
|
||||||
lb_rules = [r for r in lb_rules if (r.get('display_name') !=
|
if check_name_suffix:
|
||||||
lb_rule_name)]
|
lb_rules = [r for r in lb_rules
|
||||||
|
if not r.get('display_name', '').endswith(
|
||||||
|
lb_rule_name)]
|
||||||
|
else:
|
||||||
|
lb_rules = [r for r in lb_rules
|
||||||
|
if r.get('display_name') != lb_rule_name]
|
||||||
return self._update(
|
return self._update(
|
||||||
virtual_server_id=virtual_server_id, vs_data=body,
|
virtual_server_id=virtual_server_id, vs_data=body,
|
||||||
rules=lb_rules, tenant=tenant)
|
rules=lb_rules, tenant=tenant)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user