options: consolidate options definitions

Some config options(interface_driver, use_namespaces) are defined
multiple times in ad-hoc way.  It causes DuplicateOptError exception
when using those module at the same time.  Right now the exception is
avoided in ad-hoc way by each executable.  Those duplicated
definitions should be consolidated and treated in uniformed way.

This is the blocker for blueprint: l3-agent-consolidation

neutron.services.loadbalancer.drivers.haproxy.agent periodic_interval
conflicts with neutron.service one. Since there is no way to fix it
without changing existing behavior/default value, it is untouched for now.

Closes-bug: #1279769
Change-Id: Ifed79b7ee0033644854499416f8a2b22a20416fe
This commit is contained in:
Isaku Yamahata 2014-02-13 20:19:25 +09:00
parent 8dd2070fd0
commit 9af846caf7
22 changed files with 51 additions and 27 deletions

View File

@ -38,6 +38,16 @@ AGENT_STATE_OPTS = [
'is half or less than agent_down_time.')), 'is half or less than agent_down_time.')),
] ]
INTERFACE_DRIVER_OPTS = [
cfg.StrOpt('interface_driver',
help=_("The driver used to manage the virtual interface.")),
]
USE_NAMESPACES_OPTS = [
cfg.BoolOpt('use_namespaces', default=True,
help=_("Allow overlapping IP.")),
]
def get_log_args(conf, log_file_name): def get_log_args(conf, log_file_name):
cmd_args = [] cmd_args = []
@ -76,6 +86,14 @@ def register_agent_state_opts_helper(conf):
conf.register_opts(AGENT_STATE_OPTS, 'AGENT') conf.register_opts(AGENT_STATE_OPTS, 'AGENT')
def register_interface_driver_opts_helper(conf):
conf.register_opts(INTERFACE_DRIVER_OPTS)
def register_use_namespaces_opts_helper(conf):
conf.register_opts(USE_NAMESPACES_OPTS)
def get_root_helper(conf): def get_root_helper(conf):
root_helper = conf.AGENT.root_helper root_helper = conf.AGENT.root_helper
if root_helper != 'sudo': if root_helper != 'sudo':

View File

@ -52,8 +52,6 @@ class DhcpAgent(manager.Manager):
cfg.StrOpt('dhcp_driver', cfg.StrOpt('dhcp_driver',
default='neutron.agent.linux.dhcp.Dnsmasq', default='neutron.agent.linux.dhcp.Dnsmasq',
help=_("The driver used to manage the DHCP server.")), help=_("The driver used to manage the DHCP server.")),
cfg.BoolOpt('use_namespaces', default=True,
help=_("Allow overlapping IP.")),
cfg.BoolOpt('enable_isolated_metadata', default=False, cfg.BoolOpt('enable_isolated_metadata', default=False,
help=_("Support Metadata requests on isolated networks.")), help=_("Support Metadata requests on isolated networks.")),
cfg.BoolOpt('enable_metadata_network', default=False, cfg.BoolOpt('enable_metadata_network', default=False,
@ -589,6 +587,8 @@ class DhcpAgentWithStateReport(DhcpAgent):
def register_options(): def register_options():
cfg.CONF.register_opts(DhcpAgent.OPTS) cfg.CONF.register_opts(DhcpAgent.OPTS)
config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
config.register_agent_state_opts_helper(cfg.CONF) config.register_agent_state_opts_helper(cfg.CONF)
config.register_root_helper(cfg.CONF) config.register_root_helper(cfg.CONF)
cfg.CONF.register_opts(dhcp.OPTS) cfg.CONF.register_opts(dhcp.OPTS)

View File

@ -157,9 +157,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
cfg.StrOpt('external_network_bridge', default='br-ex', cfg.StrOpt('external_network_bridge', default='br-ex',
help=_("Name of bridge used for external network " help=_("Name of bridge used for external network "
"traffic.")), "traffic.")),
cfg.StrOpt('interface_driver',
help=_("The driver used to manage the virtual "
"interface.")),
cfg.IntOpt('metadata_port', cfg.IntOpt('metadata_port',
default=9697, default=9697,
help=_("TCP Port used by Neutron metadata namespace " help=_("TCP Port used by Neutron metadata namespace "
@ -168,8 +165,6 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
default=0, default=0,
help=_("Send this many gratuitous ARPs for HA setup, if " help=_("Send this many gratuitous ARPs for HA setup, if "
"less than or equal to 0, the feature is disabled")), "less than or equal to 0, the feature is disabled")),
cfg.BoolOpt('use_namespaces', default=True,
help=_("Allow overlapping IP.")),
cfg.StrOpt('router_id', default='', cfg.StrOpt('router_id', default='',
help=_("If namespaces is disabled, the l3 agent can only" help=_("If namespaces is disabled, the l3 agent can only"
" configure a router that has the matching router " " configure a router that has the matching router "
@ -906,6 +901,8 @@ def main(manager='neutron.agent.l3_agent.L3NATAgentWithStateReport'):
eventlet.monkey_patch() eventlet.monkey_patch()
conf = cfg.CONF conf = cfg.CONF
conf.register_opts(L3NATAgent.OPTS) conf.register_opts(L3NATAgent.OPTS)
config.register_interface_driver_opts_helper(conf)
config.register_use_namespaces_opts_helper(conf)
config.register_agent_state_opts_helper(conf) config.register_agent_state_opts_helper(conf)
config.register_root_helper(conf) config.register_root_helper(conf)
conf.register_opts(interface.OPTS) conf.register_opts(interface.OPTS)

View File

@ -59,8 +59,6 @@ OPTS = [
'dnsmasq_lease_max', 'dnsmasq_lease_max',
default=(2 ** 24), default=(2 ** 24),
help=_('Limit number of leases to prevent a denial-of-service.')), help=_('Limit number of leases to prevent a denial-of-service.')),
cfg.StrOpt('interface_driver',
help=_("The driver used to manage the virtual interface.")),
] ]
IPV4 = 4 IPV4 = 4

View File

@ -63,6 +63,7 @@ def setup_conf():
conf = cfg.CONF conf = cfg.CONF
conf.register_cli_opts(cli_opts) conf.register_cli_opts(cli_opts)
conf.register_opts(opts) conf.register_opts(opts)
agent_config.register_interface_driver_opts_helper(conf)
agent_config.register_root_helper(conf) agent_config.register_root_helper(conf)
conf.register_opts(dhcp.OPTS) conf.register_opts(dhcp.OPTS)
return conf return conf

View File

@ -48,6 +48,8 @@ def setup_conf():
conf.register_cli_opts(opts) conf.register_cli_opts(opts)
conf.register_opts(l3_agent.L3NATAgent.OPTS) conf.register_opts(l3_agent.L3NATAgent.OPTS)
conf.register_opts(interface.OPTS) conf.register_opts(interface.OPTS)
agent_config.register_interface_driver_opts_helper(conf)
agent_config.register_use_namespaces_opts_helper(conf)
agent_config.register_root_helper(conf) agent_config.register_root_helper(conf)
return conf return conf

View File

@ -39,11 +39,6 @@ class NeutronDebugAgent():
OPTS = [ OPTS = [
# Needed for drivers # Needed for drivers
cfg.BoolOpt('use_namespaces', default=True,
help=_("Use Linux network namespaces")),
cfg.StrOpt('interface_driver',
help=_("The driver used to manage the virtual "
"interface.")),
cfg.StrOpt('external_network_bridge', default='br-ex', cfg.StrOpt('external_network_bridge', default='br-ex',
help=_("Name of bridge used for external network " help=_("Name of bridge used for external network "
"traffic.")), "traffic.")),

View File

@ -74,6 +74,8 @@ class NeutronDebugShell(NeutronShell):
client = self.client_manager.neutron client = self.client_manager.neutron
cfg.CONF.register_opts(interface.OPTS) cfg.CONF.register_opts(interface.OPTS)
cfg.CONF.register_opts(NeutronDebugAgent.OPTS) cfg.CONF.register_opts(NeutronDebugAgent.OPTS)
config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
config.register_root_helper(cfg.CONF) config.register_root_helper(cfg.CONF)
cfg.CONF(['--config-file', self.options.config_file]) cfg.CONF(['--config-file', self.options.config_file])
config.setup_logging(cfg.CONF) config.setup_logging(cfg.CONF)

View File

@ -331,6 +331,8 @@ def main():
eventlet.monkey_patch() eventlet.monkey_patch()
conf = cfg.CONF conf = cfg.CONF
conf.register_opts(vArmourL3NATAgent.OPTS) conf.register_opts(vArmourL3NATAgent.OPTS)
config.register_interface_driver_opts_helper(conf)
config.register_use_namespaces_opts_helper(conf)
config.register_agent_state_opts_helper(conf) config.register_agent_state_opts_helper(conf)
config.register_root_helper(conf) config.register_root_helper(conf)
conf.register_opts(interface.OPTS) conf.register_opts(interface.OPTS)

View File

@ -53,6 +53,7 @@ def main():
cfg.CONF.register_opts(manager.OPTS) cfg.CONF.register_opts(manager.OPTS)
# import interface options just in case the driver uses namespaces # import interface options just in case the driver uses namespaces
cfg.CONF.register_opts(interface.OPTS) cfg.CONF.register_opts(interface.OPTS)
config.register_interface_driver_opts_helper(cfg.CONF)
config.register_agent_state_opts_helper(cfg.CONF) config.register_agent_state_opts_helper(cfg.CONF)
config.register_root_helper(cfg.CONF) config.register_root_helper(cfg.CONF)

View File

@ -39,10 +39,6 @@ OPTS = [
'.haproxy.namespace_driver.HaproxyNSDriver'], '.haproxy.namespace_driver.HaproxyNSDriver'],
help=_('Drivers used to manage loadbalancing devices'), help=_('Drivers used to manage loadbalancing devices'),
), ),
cfg.StrOpt(
'interface_driver',
help=_('The driver used to manage the virtual interface')
),
] ]

View File

@ -34,16 +34,10 @@ TOP_CHAIN = WRAP_NAME + "-FORWARD"
RULE = '-r-' RULE = '-r-'
LABEL = '-l-' LABEL = '-l-'
IptablesDriverOpts = [ config.register_interface_driver_opts_helper(cfg.CONF)
cfg.StrOpt('interface_driver', config.register_use_namespaces_opts_helper(cfg.CONF)
help=_("The driver used to manage the virtual "
"interface.")),
cfg.BoolOpt('use_namespaces', default=True,
help=_("Allow overlapping IP."))
]
config.register_root_helper(cfg.CONF) config.register_root_helper(cfg.CONF)
cfg.CONF.register_opts(interface.OPTS) cfg.CONF.register_opts(interface.OPTS)
cfg.CONF.register_opts(IptablesDriverOpts)
class IptablesManagerTransaction(object): class IptablesManagerTransaction(object):

View File

@ -38,6 +38,7 @@ class TestDhcpNoOpDriver(base.BaseTestCase):
def setUp(self): def setUp(self):
super(TestDhcpNoOpDriver, self).setUp() super(TestDhcpNoOpDriver, self).setUp()
self.conf = config.setup_conf() self.conf = config.setup_conf()
config.register_interface_driver_opts_helper(self.conf)
self.conf.register_opts(base_config.core_opts) self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(dhcp.OPTS) self.conf.register_opts(dhcp.OPTS)
self.conf.enable_isolated_metadata = True self.conf.enable_isolated_metadata = True

View File

@ -53,6 +53,7 @@ class TestFwaasL3AgentRpcCallback(base.BaseTestCase):
self.conf = cfg.ConfigOpts() self.conf = cfg.ConfigOpts()
self.conf.register_opts(base_config.core_opts) self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(l3_agent.L3NATAgent.OPTS) self.conf.register_opts(l3_agent.L3NATAgent.OPTS)
agent_config.register_use_namespaces_opts_helper(self.conf)
agent_config.register_root_helper(self.conf) agent_config.register_root_helper(self.conf)
self.conf.root_helper = 'sudo' self.conf.root_helper = 'sudo'
self.api = FWaasAgent(self.conf) self.api = FWaasAgent(self.conf)

View File

@ -44,6 +44,8 @@ class TestVarmourRouter(base.BaseTestCase):
self.conf = cfg.ConfigOpts() self.conf = cfg.ConfigOpts()
self.conf.register_opts(base_config.core_opts) self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(varmour_router.vArmourL3NATAgent.OPTS) self.conf.register_opts(varmour_router.vArmourL3NATAgent.OPTS)
agent_config.register_interface_driver_opts_helper(self.conf)
agent_config.register_use_namespaces_opts_helper(self.conf)
agent_config.register_root_helper(self.conf) agent_config.register_root_helper(self.conf)
self.conf.register_opts(interface.OPTS) self.conf.register_opts(interface.OPTS)
self.conf.set_override('interface_driver', self.conf.set_override('interface_driver',

View File

@ -45,6 +45,8 @@ class TestBasicRouterOperations(base.BaseTestCase):
self.conf = cfg.ConfigOpts() self.conf = cfg.ConfigOpts()
self.conf.register_opts(base_config.core_opts) self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(varmour_router.vArmourL3NATAgent.OPTS) self.conf.register_opts(varmour_router.vArmourL3NATAgent.OPTS)
agent_config.register_interface_driver_opts_helper(self.conf)
agent_config.register_use_namespaces_opts_helper(self.conf)
agent_config.register_root_helper(self.conf) agent_config.register_root_helper(self.conf)
self.conf.register_opts(interface.OPTS) self.conf.register_opts(interface.OPTS)
self.conf.set_override('interface_driver', self.conf.set_override('interface_driver',

View File

@ -52,6 +52,8 @@ class TestVPNAgent(base.BaseTestCase):
self.conf.register_opts(base_config.core_opts) self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(l3_agent.L3NATAgent.OPTS) self.conf.register_opts(l3_agent.L3NATAgent.OPTS)
self.conf.register_opts(interface.OPTS) self.conf.register_opts(interface.OPTS)
agent_config.register_interface_driver_opts_helper(self.conf)
agent_config.register_use_namespaces_opts_helper(self.conf)
agent_config.register_agent_state_opts_helper(self.conf) agent_config.register_agent_state_opts_helper(self.conf)
agent_config.register_root_helper(self.conf) agent_config.register_root_helper(self.conf)

View File

@ -40,8 +40,10 @@ class TestDebugCommands(base.BaseTestCase):
cfg.CONF.register_opts(interface.OPTS) cfg.CONF.register_opts(interface.OPTS)
cfg.CONF.register_opts(NeutronDebugAgent.OPTS) cfg.CONF.register_opts(NeutronDebugAgent.OPTS)
cfg.CONF(args=[], project='neutron') cfg.CONF(args=[], project='neutron')
cfg.CONF.set_override('use_namespaces', True) config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
config.register_root_helper(cfg.CONF) config.register_root_helper(cfg.CONF)
cfg.CONF.set_override('use_namespaces', True)
self.addCleanup(mock.patch.stopall) self.addCleanup(mock.patch.stopall)
device_exists_p = mock.patch( device_exists_p = mock.patch(

View File

@ -156,6 +156,7 @@ class TestDhcpAgent(base.BaseTestCase):
'dhcp', '--config-file', 'dhcp', '--config-file',
etcdir('neutron.conf.test')] etcdir('neutron.conf.test')]
cfg.CONF.register_opts(dhcp_agent.DhcpAgent.OPTS) cfg.CONF.register_opts(dhcp_agent.DhcpAgent.OPTS)
config.register_interface_driver_opts_helper(cfg.CONF)
config.register_agent_state_opts_helper(cfg.CONF) config.register_agent_state_opts_helper(cfg.CONF)
config.register_root_helper(cfg.CONF) config.register_root_helper(cfg.CONF)
cfg.CONF.register_opts(dhcp.OPTS) cfg.CONF.register_opts(dhcp.OPTS)
@ -449,6 +450,7 @@ class TestLogArgs(base.BaseTestCase):
class TestDhcpAgentEventHandler(base.BaseTestCase): class TestDhcpAgentEventHandler(base.BaseTestCase):
def setUp(self): def setUp(self):
super(TestDhcpAgentEventHandler, self).setUp() super(TestDhcpAgentEventHandler, self).setUp()
config.register_interface_driver_opts_helper(cfg.CONF)
cfg.CONF.register_opts(dhcp.OPTS) cfg.CONF.register_opts(dhcp.OPTS)
cfg.CONF.set_override('interface_driver', cfg.CONF.set_override('interface_driver',
'neutron.agent.linux.interface.NullDriver') 'neutron.agent.linux.interface.NullDriver')
@ -1087,6 +1089,8 @@ class FakeV4NetworkNoGateway:
class TestDeviceManager(base.BaseTestCase): class TestDeviceManager(base.BaseTestCase):
def setUp(self): def setUp(self):
super(TestDeviceManager, self).setUp() super(TestDeviceManager, self).setUp()
config.register_interface_driver_opts_helper(cfg.CONF)
config.register_use_namespaces_opts_helper(cfg.CONF)
cfg.CONF.register_opts(dhcp_agent.DhcpAgent.OPTS) cfg.CONF.register_opts(dhcp_agent.DhcpAgent.OPTS)
cfg.CONF.register_opts(dhcp.OPTS) cfg.CONF.register_opts(dhcp.OPTS)
cfg.CONF.set_override('interface_driver', cfg.CONF.set_override('interface_driver',

View File

@ -43,6 +43,8 @@ class TestBasicRouterOperations(base.BaseTestCase):
self.conf = cfg.ConfigOpts() self.conf = cfg.ConfigOpts()
self.conf.register_opts(base_config.core_opts) self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(l3_agent.L3NATAgent.OPTS) self.conf.register_opts(l3_agent.L3NATAgent.OPTS)
agent_config.register_interface_driver_opts_helper(self.conf)
agent_config.register_use_namespaces_opts_helper(self.conf)
agent_config.register_root_helper(self.conf) agent_config.register_root_helper(self.conf)
self.conf.register_opts(interface.OPTS) self.conf.register_opts(interface.OPTS)
self.conf.set_override('router_id', 'fake_id') self.conf.set_override('router_id', 'fake_id')

View File

@ -394,6 +394,7 @@ class TestBase(base.BaseTestCase):
self.conf = config.setup_conf() self.conf = config.setup_conf()
self.conf.register_opts(base_config.core_opts) self.conf.register_opts(base_config.core_opts)
self.conf.register_opts(dhcp.OPTS) self.conf.register_opts(dhcp.OPTS)
config.register_interface_driver_opts_helper(self.conf)
instance = mock.patch("neutron.agent.linux.dhcp.DeviceManager") instance = mock.patch("neutron.agent.linux.dhcp.DeviceManager")
self.mock_mgr = instance.start() self.mock_mgr = instance.start()
self.conf.register_opt(cfg.BoolOpt('enable_isolated_metadata', self.conf.register_opt(cfg.BoolOpt('enable_isolated_metadata',

View File

@ -373,6 +373,7 @@ class TestBridgeInterfaceDriver(TestBase):
class TestMetaInterfaceDriver(TestBase): class TestMetaInterfaceDriver(TestBase):
def setUp(self): def setUp(self):
super(TestMetaInterfaceDriver, self).setUp() super(TestMetaInterfaceDriver, self).setUp()
config.register_interface_driver_opts_helper(self.conf)
self.conf.register_opts(dhcp.OPTS) self.conf.register_opts(dhcp.OPTS)
self.client_cls_p = mock.patch('neutronclient.v2_0.client.Client') self.client_cls_p = mock.patch('neutronclient.v2_0.client.Client')
client_cls = self.client_cls_p.start() client_cls = self.client_cls_p.start()