class RouterInfo(l3_ha_agent.RouterMixin):
def __init__(self, router_id, root_helper, use_namespaces, router,
- use_ipv6=False):
+ use_ipv6=False, ns_name=None):
self.router_id = router_id
self.ex_gw_port = None
self._snat_enabled = None
self.use_namespaces = use_namespaces
# Invoke the setter for establishing initial SNAT action
self.router = router
+ self.ns_name = ns_name
self.iptables_manager = iptables_manager.IptablesManager(
root_helper=root_helper,
use_ipv6=use_ipv6,
# Gateway port was removed, remove rules
self._snat_action = 'remove_rules'
- @property
- def ns_name(self):
- return NS_PREFIX + self.router_id if self.use_namespaces else None
-
def perform_snat_action(self, snat_callback, *args):
# Process SNAT rules for attached subnets
if self._snat_action:
self.target_ex_net_id = None
self.use_ipv6 = ipv6_utils.is_enabled()
- def _get_router_info(self, router_id, router):
- return RouterInfo(
- router_id=router_id,
- root_helper=self.root_helper,
- use_namespaces=self.conf.use_namespaces,
- router=router,
- use_ipv6=self.use_ipv6)
-
def _check_config_params(self):
"""Check items in configuration files.
return set()
def _get_routers_namespaces(self, router_ids):
- namespaces = set(self._get_router_info(id, router=None).ns_name
- for id in router_ids)
- namespaces.update(self.get_snat_ns_name(id) for id in router_ids)
+ namespaces = set(self.get_ns_name(rid) for rid in router_ids)
+ namespaces.update(self.get_snat_ns_name(rid) for rid in router_ids)
return namespaces
def _cleanup_namespaces(self, router_namespaces, router_ids):
raise Exception(msg)
def _router_added(self, router_id, router):
- ri = self._get_router_info(router_id, router)
+ ns_name = (self.get_ns_name(router_id)
+ if self.conf.use_namespaces else None)
+ ri = RouterInfo(router_id=router_id,
+ root_helper=self.root_helper,
+ use_namespaces=self.conf.use_namespaces,
+ router=router,
+ use_ipv6=self.use_ipv6,
+ ns_name=ns_name)
self.router_info[router_id] = ri
if self.conf.use_namespaces:
self._create_router_namespace(ri)
def get_fip_ns_name(self, ext_net_id):
return (FIP_NS_PREFIX + ext_net_id)
+ def get_ns_name(self, router_id):
+ return (NS_PREFIX + router_id)
+
def get_snat_ns_name(self, router_id):
return (SNAT_NS_PREFIX + router_id)
def _prepare_router_data(self, use_namespaces):
router = {'id': str(uuid.uuid4()), 'tenant_id': str(uuid.uuid4())}
+ ns = "ns-" + router['id']
return l3_agent.RouterInfo(router['id'], self.conf.root_helper,
- use_namespaces, router=router)
+ use_namespaces, router=router, ns_name=ns)
def _get_router_info_list_with_namespace_helper(self,
router_use_namespaces):
def test_get_namespace(self):
router_id = _uuid()
+ ns = "ns-" + router_id
ri = l3_agent.RouterInfo(router_id, self.conf.root_helper,
- self.conf.use_namespaces, {})
+ self.conf.use_namespaces, {}, ns_name=ns)
self.agent.router_info = {router_id: ri}
namespace = self.agent.get_namespace(router_id)
self.assertTrue(namespace.endswith(router_id))
def test_router_info_create(self):
id = _uuid()
+ ns = "ns-" + id
ri = l3_agent.RouterInfo(id, self.conf.root_helper,
- self.conf.use_namespaces, {})
+ self.conf.use_namespaces, {}, ns_name=ns)
self.assertTrue(ri.ns_name.endswith(id))
'enable_snat': True,
'routes': [],
'gw_port': ex_gw_port}
+ ns = "ns-" + id
ri = l3_agent.RouterInfo(id, self.conf.root_helper,
- self.conf.use_namespaces, router)
+ self.conf.use_namespaces, router, ns_name=ns)
self.assertTrue(ri.ns_name.endswith(id))
self.assertEqual(ri.router, router)
self._test_internal_network_action('remove')
def _test_external_gateway_action(self, action, router):
- ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper,
- self.conf.use_namespaces, router=router)
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
+ ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper,
+ self.conf.use_namespaces, router=router,
+ ns_name=agent.get_ns_name(router['id']))
# Special setup for dvr routers
if router.get('distributed'):
agent.conf.agent_mode = 'dvr_snat'
def test_external_gateway_updated(self):
router = prepare_router_data(num_internal_ports=2)
- ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper,
- self.conf.use_namespaces, router=router)
agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
+ ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper,
+ self.conf.use_namespaces, router=router,
+ ns_name=agent.get_ns_name(router['id']))
interface_name, ex_gw_port = self._prepare_ext_gw_test(agent)
fake_fip = {'floatingips': [{'id': _uuid(),