For proper upgrade of centralized router to distributed the router
needs to be disabled (admin_state_up set to false).
The patch adds corresponding validation.
Closes-Bug: #
1428713
Change-Id: Idf25db0936eee892ecb169a8678ba7f0a2cfceb6
"to centralized"))
elif (not router_db.extra_attributes.distributed and
router_res.get('distributed')):
+ # router should be disabled in order for upgrade
+ if router_db.admin_state_up:
+ msg = _('Cannot upgrade active router to distributed. Please '
+ 'set router admin_state_up to False prior to upgrade.')
+ raise n_exc.BadRequest(resource='router', msg=msg)
+
# Notify advanced services of the imminent state transition
# for the router.
try:
attribute will be set to True
"""
name = data_utils.rand_name('router')
- router = self.admin_client.create_router(name, distributed=False)
+ # router needs to be in admin state down in order to be upgraded to DVR
+ router = self.admin_client.create_router(name, distributed=False,
+ admin_state_up=False)
self.addCleanup(self.admin_client.delete_router,
router['router']['id'])
self.assertFalse(router['router']['distributed'])
def test_update_router_db_centralized_to_distributed(self):
router = self._create_router(distributed=False)
+ # router needs to be in admin state down in order to be upgraded to DVR
+ self.l3_plugin.update_router(
+ self.context, router['id'], {'router': {'admin_state_up': False}})
self.assertFalse(router['distributed'])
self.l3_plugin.update_router(
self.context, router['id'], {'router': {'distributed': True}})
self.mixin._validate_router_migration,
self.ctx, router_db, {'distributed': False})
+ def test_upgrade_active_router_to_distributed_validation_failure(self):
+ router = {'name': 'foo_router', 'admin_state_up': True}
+ router_db = self._create_router(router)
+ update = {'distributed': True}
+ self.assertRaises(exceptions.BadRequest,
+ self.mixin._validate_router_migration,
+ self.ctx, router_db, update)
+
def test_update_router_db_centralized_to_distributed(self):
router = {'name': 'foo_router', 'admin_state_up': True}
agent = {'id': _uuid()}
self.assertEqual(1, len(dvr_ports))
def test__validate_router_migration_notify_advanced_services(self):
- router = {'name': 'foo_router', 'admin_state_up': True}
+ router = {'name': 'foo_router', 'admin_state_up': False}
router_db = self._create_router(router)
with mock.patch.object(l3_dvr_db.registry, 'notify') as mock_notify:
self.mixin._validate_router_migration(