Merge "Add support to force overwrite on updating adv rule"

This commit is contained in:
Zuul 2019-07-16 17:49:43 +00:00 committed by Gerrit Code Review
commit 801adfe85c
2 changed files with 31 additions and 3 deletions

View File

@ -1192,6 +1192,29 @@ class LogicalRouterTestCase(BaseTestResource):
data=jsonutils.dumps({'rules': rules}, sort_keys=True),
headers=self.default_headers())
def test_update_advertisement_rules_force(self):
router = self.get_mocked_resource()
router_id = test_constants.FAKE_ROUTER_UUID
rules = [{"action": "ALLOW",
"networks": ["44.0.0.0/20"],
"display_name": "rule1"},
{"action": "ALLOW",
"networks": ["6.60.0.0/20"],
"display_name": "rule2"}]
headers = self.default_headers()
expected_headers = headers.copy()
expected_headers['X-Allow-Overwrite'] = 'true'
with mock.patch.object(router.client, 'get',
return_value={}):
router.update_advertisement_rules(router_id, rules, force=True)
test_client.assert_json_call(
'put', router,
('https://1.2.3.4/api/v1/logical-routers/%s/routing/'
'advertisement/rules' % router_id),
data=jsonutils.dumps({'rules': rules}, sort_keys=True),
headers=expected_headers)
def test_update_advertisement_rules_with_replace(self):
router = self.get_mocked_resource()
router_id = test_constants.FAKE_ROUTER_UUID

View File

@ -710,7 +710,7 @@ class NsxLibLogicalRouter(utils.NsxLibApiBase):
return self._update_resource(resource, kwargs, retry=True)
def update_advertisement_rules(self, logical_router_id, rules,
name_prefix=None):
name_prefix=None, force=False):
"""Update the router advertisement rules
If name_prefix is None, replace the entire list of NSX rules with the
@ -736,8 +736,13 @@ class NsxLibLogicalRouter(utils.NsxLibApiBase):
if name_prefix:
callback = update_payload_cbk
return self._update_resource(resource, {'rules': rules}, retry=True,
update_payload_cbk=callback)
# In case of updating advertisement rule on the logical router
# owned by other Principal Entities, need to force the overwrite
headers = {'X-Allow-Overwrite': 'true'} if force else None
return self._update_resource(
resource, {'rules': rules}, retry=True,
update_payload_cbk=callback, headers=headers)
def get_advertisement_rules(self, logical_router_id):
resource = ('logical-routers/%s/routing/advertisement/rules' %