utils.ensure_dir(dhcp_dir)
self.dhcp_version = self.dhcp_driver_cls.check_version()
self._populate_networks_cache()
+ # keep track of mappings between networks and routers for
+ # metadata processing
+ self._metadata_routers = {} # {network_id: router_id}
self._process_monitor = external_process.ProcessMonitor(
config=self.conf,
resource_type='dhcp')
'port_id': router_ports[0].id,
'router_id': router_ports[0].device_id})
kwargs = {'router_id': router_ports[0].device_id}
+ self._metadata_routers[network.id] = router_ports[0].device_id
metadata_driver.MetadataDriver.spawn_monitored_metadata_proxy(
self._process_monitor, network.namespace, dhcp.METADATA_PORT,
self.conf, **kwargs)
def disable_isolated_metadata_proxy(self, network):
+ if (self.conf.enable_metadata_network and
+ network.id in self._metadata_routers):
+ uuid = self._metadata_routers[network.id]
+ is_router_id = True
+ else:
+ uuid = network.id
+ is_router_id = False
metadata_driver.MetadataDriver.destroy_monitored_metadata_proxy(
- self._process_monitor, network.id, self.conf)
+ self._process_monitor, uuid, self.conf)
+ if is_router_id:
+ del self._metadata_routers[network.id]
class DhcpPluginApi(object):
fake_network.id,
cfg.CONF)
- def _test_metadata_network(self, network):
+ def _test_enable_isolated_metadata_proxy(self, network):
cfg.CONF.set_override('enable_metadata_network', True)
cfg.CONF.set_override('debug', True)
cfg.CONF.set_override('verbose', False)
router_id='forzanapoli')
def test_enable_isolated_metadata_proxy_with_metadata_network(self):
- self._test_metadata_network(fake_meta_network)
+ self._test_enable_isolated_metadata_proxy(fake_meta_network)
def test_enable_isolated_metadata_proxy_with_metadata_network_dvr(self):
- self._test_metadata_network(fake_meta_dvr_network)
+ self._test_enable_isolated_metadata_proxy(fake_meta_dvr_network)
def test_enable_isolated_metadata_proxy_with_dist_network(self):
- self._test_metadata_network(fake_dist_network)
+ self._test_enable_isolated_metadata_proxy(fake_dist_network)
+
+ def _test_disable_isolated_metadata_proxy(self, network):
+ cfg.CONF.set_override('enable_metadata_network', True)
+ method_path = ('neutron.agent.metadata.driver.MetadataDriver'
+ '.destroy_monitored_metadata_proxy')
+ with mock.patch(method_path) as destroy:
+ self.dhcp.enable_isolated_metadata_proxy(network)
+ self.dhcp.disable_isolated_metadata_proxy(network)
+ destroy.assert_called_once_with(self.dhcp._process_monitor,
+ 'forzanapoli',
+ cfg.CONF)
+
+ def test_disable_isolated_metadata_proxy_with_metadata_network(self):
+ self._test_disable_isolated_metadata_proxy(fake_meta_network)
+
+ def test_disable_isolated_metadata_proxy_with_metadata_network_dvr(self):
+ self._test_disable_isolated_metadata_proxy(fake_meta_dvr_network)
+
+ def test_disable_isolated_metadata_proxy_with_dist_network(self):
+ self._test_disable_isolated_metadata_proxy(fake_dist_network)
def test_network_create_end(self):
payload = dict(network=dict(id=fake_network.id))