From: Brian Haley Date: Tue, 12 Jan 2016 23:53:42 +0000 (-0500) Subject: Register RA and PD config options in l3-agent X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=18ec2e424e48fd9999235deeffffbffcff91d56f;p=openstack-build%2Fneutron-build.git Register RA and PD config options in l3-agent In order for the l3-agent to see the RA and PD config options, it needs to register them when it starts. Noticed this when I went to override something for a test and it wouldn't work. It now passes the config down to radvd on start so the correct values are picked-up. Change-Id: Iec0e0d16eed4f12af77fcd4f0b93b641b1146293 Related-Bug: #1532338 --- diff --git a/neutron/agent/l3/router_info.py b/neutron/agent/l3/router_info.py index b990ba38c..877a22fc6 100644 --- a/neutron/agent/l3/router_info.py +++ b/neutron/agent/l3/router_info.py @@ -76,7 +76,8 @@ class RouterInfo(object): self.radvd = ra.DaemonMonitor(self.router_id, self.ns_name, process_monitor, - self.get_internal_device_name) + self.get_internal_device_name, + self.agent_conf) self.router_namespace.create() diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index 691b1ec6d..dbfbb65b7 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -24,6 +24,8 @@ from neutron.agent.l3 import config as l3_config from neutron.agent.l3 import ha from neutron.agent.linux import external_process from neutron.agent.linux import interface +from neutron.agent.linux import pd +from neutron.agent.linux import ra from neutron.agent.metadata import config as metadata_config from neutron.common import config as common_config from neutron.common import topics @@ -39,6 +41,8 @@ def register_opts(conf): config.register_agent_state_opts_helper(conf) conf.register_opts(interface.OPTS) conf.register_opts(external_process.OPTS) + conf.register_opts(pd.OPTS) + conf.register_opts(ra.OPTS) config.register_availability_zone_opts_helper(conf) diff --git a/neutron/agent/linux/pd.py b/neutron/agent/linux/pd.py index b649076d2..350b53090 100644 --- a/neutron/agent/linux/pd.py +++ b/neutron/agent/linux/pd.py @@ -40,8 +40,6 @@ OPTS = [ help=_('Service to handle DHCPv6 Prefix delegation.')), ] -cfg.CONF.register_opts(OPTS) - class PrefixDelegation(object): def __init__(self, context, pmon, intf_driver, notifier, pd_update_cb, diff --git a/neutron/agent/linux/ra.py b/neutron/agent/linux/ra.py index 8896e8d26..9cc0a2528 100644 --- a/neutron/agent/linux/ra.py +++ b/neutron/agent/linux/ra.py @@ -40,8 +40,6 @@ OPTS = [ help=_('Location to store IPv6 RA config files')), ] -cfg.CONF.register_opts(OPTS) - CONFIG_TEMPLATE = jinja2.Template("""interface {{ interface_name }} { AdvSendAdvert on; @@ -74,14 +72,16 @@ CONFIG_TEMPLATE = jinja2.Template("""interface {{ interface_name }} class DaemonMonitor(object): """Manage the data and state of an radvd process.""" - def __init__(self, router_id, router_ns, process_monitor, dev_name_helper): + def __init__(self, router_id, router_ns, process_monitor, dev_name_helper, + agent_conf): self._router_id = router_id self._router_ns = router_ns self._process_monitor = process_monitor self._dev_name_helper = dev_name_helper + self._agent_conf = agent_conf def _generate_radvd_conf(self, router_ports): - radvd_conf = utils.get_conf_file_name(cfg.CONF.ra_confs, + radvd_conf = utils.get_conf_file_name(self._agent_conf.ra_confs, self._router_id, 'radvd.conf', True) @@ -117,7 +117,7 @@ class DaemonMonitor(object): default_cmd_callback=callback, namespace=self._router_ns, service=RADVD_SERVICE_NAME, - conf=cfg.CONF, + conf=self._agent_conf, run_as_root=True) def _spawn_radvd(self, radvd_conf): @@ -157,7 +157,7 @@ class DaemonMonitor(object): service_name=RADVD_SERVICE_NAME) pm = self._get_radvd_process_manager() pm.disable() - utils.remove_conf_files(cfg.CONF.ra_confs, self._router_id) + utils.remove_conf_files(self._agent_conf.ra_confs, self._router_id) LOG.debug("radvd disabled for router %s", self._router_id) @property diff --git a/neutron/opts.py b/neutron/opts.py index 200839369..4e0860468 100644 --- a/neutron/opts.py +++ b/neutron/opts.py @@ -24,6 +24,8 @@ import neutron.agent.l2.extensions.manager import neutron.agent.l3.config import neutron.agent.l3.ha import neutron.agent.linux.interface +import neutron.agent.linux.pd +import neutron.agent.linux.ra import neutron.agent.metadata.config import neutron.agent.ovsdb.api import neutron.agent.securitygroups_rpc @@ -190,7 +192,9 @@ def list_l3_agent_opts(): itertools.chain( neutron.agent.l3.config.OPTS, neutron.service.service_opts, - neutron.agent.l3.ha.OPTS) + neutron.agent.l3.ha.OPTS, + neutron.agent.linux.pd.OPTS, + neutron.agent.linux.ra.OPTS) ) ] diff --git a/neutron/tests/unit/agent/l3/test_agent.py b/neutron/tests/unit/agent/l3/test_agent.py index 7c42059c9..17051b8aa 100644 --- a/neutron/tests/unit/agent/l3/test_agent.py +++ b/neutron/tests/unit/agent/l3/test_agent.py @@ -75,10 +75,14 @@ class BasicRouterOperationsFramework(base.BaseTestCase): agent_config.register_availability_zone_opts_helper(self.conf) self.conf.register_opts(interface.OPTS) self.conf.register_opts(external_process.OPTS) + self.conf.register_opts(pd.OPTS) + self.conf.register_opts(ra.OPTS) self.conf.set_override('interface_driver', 'neutron.agent.linux.interface.NullDriver') self.conf.set_override('send_arp_for_ha', 1) self.conf.set_override('state_path', '') + self.conf.set_override('ra_confs', '/tmp') + self.conf.set_override('pd_dhcp_driver', '') self.device_exists_p = mock.patch( 'neutron.agent.linux.ip_lib.device_exists') @@ -171,7 +175,8 @@ class BasicRouterOperationsFramework(base.BaseTestCase): ri.radvd = ra.DaemonMonitor(router['id'], ri.ns_name, agent.process_monitor, - ri.get_internal_device_name) + ri.get_internal_device_name, + self.conf) ri.process(agent) @@ -2182,7 +2187,8 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework): router['id'], namespaces.RouterNamespace._get_ns_name(router['id']), agent.process_monitor, - l3_test_common.FakeDev) + l3_test_common.FakeDev, + self.conf) radvd.enable(router['_interfaces']) cmd = execute.call_args[0][0] @@ -2275,7 +2281,8 @@ class TestBasicRouterOperations(BasicRouterOperationsFramework): ri.radvd = ra.DaemonMonitor(router['id'], ri.ns_name, agent.process_monitor, - ri.get_internal_device_name) + ri.get_internal_device_name, + self.conf) return agent, router, ri def _pd_remove_gw_interface(self, intfs, agent, router, ri):