示例#1
0
    def __exit__(self, exc_type, value, traceback):
        # TODO(carl) Preserves old behavior of L3 agent where cleaning
        # namespaces was only done once after restart.  Still a good idea?
        if exc_type:
            # An exception occurred in the caller's with statement
            return False
        if not self._clean_stale:
            # No need to cleanup
            return True
        self._clean_stale = False

        for ns in self._all_namespaces:
            _ns_prefix, ns_id = self.get_prefix_and_id(ns)
            if ns_id in self._ids_to_keep:
                continue
            if _ns_prefix == namespaces.NS_PREFIX:
                ns = namespaces.RouterNamespace(ns_id,
                                                self.agent_conf,
                                                self.driver,
                                                use_ipv6=False)
            else:
                ns = dvr_snat_ns.SnatNamespace(ns_id,
                                               self.agent_conf,
                                               self.driver,
                                               use_ipv6=False)
            try:
                if self.metadata_driver:
                    # cleanup stale metadata proxy processes first
                    self.metadata_driver.destroy_monitored_metadata_proxy(
                        self.process_monitor, ns_id, self.agent_conf)
                ns.delete()
            except RuntimeError:
                LOG.exception(_LE('Failed to destroy stale namespace %s'), ns)

        return True
示例#2
0
 def create_snat_namespace(self):
     # TODO(mlavalle): in the near future, this method should contain the
     # code in the L3 agent that creates a gateway for a dvr. The first step
     # is to move the creation of the snat namespace here
     self.snat_namespace = dvr_snat_ns.SnatNamespace(
         self.router['id'], self.agent_conf, self.driver, self.use_ipv6)
     self.snat_namespace.create()
     return self.snat_namespace
示例#3
0
 def __init__(self, agent, host, *args, **kwargs):
     super(DvrEdgeRouter, self).__init__(agent, host, *args, **kwargs)
     # NOTE: Initialize the snat_namespace object here.
     # The namespace can be created later, just to align with the
     # parent init.
     self.snat_namespace = dvr_snat_ns.SnatNamespace(
         self.router_id, self.agent_conf,
         self.driver, self.use_ipv6)
     self.snat_iptables_manager = None
示例#4
0
 def setUp(self):
     super(TestDvrSnatNs, self).setUp()
     self.conf = mock.Mock()
     self.conf.state_path = cfg.CONF.state_path
     self.driver = mock.Mock()
     self.driver.DEV_NAME_LEN = 14
     self.router_id = _uuid()
     self.snat_ns = dvr_snat_ns.SnatNamespace(self.router_id,
                                              self.conf,
                                              self.driver,
                                              use_ipv6=False)
示例#5
0
 def _make_dvr_edge_router_info_for_test(self):
     router = dvr_edge_router.DvrEdgeRouter(mock.sentinel.agent,
                                            mock.sentinel.myhost,
                                            FAKE_ROUTER_ID,
                                            **self.ri_kwargs)
     router.router['distributed'] = True
     router.snat_namespace = dvr_snat_ns.SnatNamespace(
         router.router['id'], mock.sentinel.agent, self.driver, mock.ANY)
     router.snat_namespace.create()
     router.snat_iptables_manager = iptables_manager.IptablesManager(
         namespace='snat-' + FAKE_ROUTER_ID, use_ipv6=mock.ANY)
     router.snat_iptables_manager.ipv4['nat'] = self.iptables
     router.snat_iptables_manager.apply = self.apply_mock
     self.driver.routers[FAKE_ROUTER_ID] = router
示例#6
0
 def __init__(self, host, *args, **kwargs):
     super(DvrEdgeRouter, self).__init__(host, *args, **kwargs)
     self.snat_namespace = dvr_snat_ns.SnatNamespace(
         self.router_id, self.agent_conf, self.driver, self.use_ipv6)
     self.snat_iptables_manager = None