]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Automatically generate neutron core configuration files
authorMartin Hickey <martin.hickey@ie.ibm.com>
Mon, 9 Nov 2015 23:37:37 +0000 (23:37 +0000)
committerMartin Hickey <martin.hickey@ie.ibm.com>
Fri, 27 Nov 2015 15:22:59 +0000 (15:22 +0000)
This adds a new tox environment, genconfig, which generates sample
neutron core configuration file using oslo-config-generator.

Updates to some configuration option help messages to reflect useful
details that were missing in the code but were present in config files.

It also adds details to devref on how to update config files.

Partially-Implements: blueprint autogen-neutron-conf-file

DocImpact

Change-Id: I1c6dc4e7d479f1b7c755597caded24a0f018c712
Closes-bug: #1199963
Co-Authored-By: Louis Taylor <louis@kragniz.eu>
41 files changed:
.gitignore
doc/source/devref/contribute.rst
etc/README.txt [new file with mode: 0644]
etc/oslo-config-generator/dhcp_agent.ini [new file with mode: 0644]
etc/oslo-config-generator/l3_agent.ini [new file with mode: 0644]
etc/oslo-config-generator/linuxbridge_agent.ini [new file with mode: 0644]
etc/oslo-config-generator/metadata_agent.ini [new file with mode: 0644]
etc/oslo-config-generator/metering_agent.ini [new file with mode: 0644]
etc/oslo-config-generator/ml2_conf.ini [new file with mode: 0644]
etc/oslo-config-generator/ml2_conf_sriov.ini [new file with mode: 0644]
etc/oslo-config-generator/neutron.conf [new file with mode: 0644]
etc/oslo-config-generator/openvswitch_agent.ini [new file with mode: 0644]
etc/oslo-config-generator/sriov_agent.ini [new file with mode: 0644]
neutron/agent/common/config.py
neutron/agent/common/ovs_lib.py
neutron/agent/dhcp/config.py
neutron/agent/l3/config.py
neutron/agent/linux/interface.py
neutron/agent/metadata/config.py
neutron/agent/ovsdb/api.py
neutron/agent/ovsdb/impl_idl.py
neutron/agent/securitygroups_rpc.py
neutron/common/config.py
neutron/db/extraroute_db.py
neutron/db/l3_hamode_db.py
neutron/db/migration/cli.py
neutron/debug/debug_agent.py
neutron/debug/shell.py
neutron/opts.py [new file with mode: 0644]
neutron/plugins/ml2/config.py
neutron/plugins/ml2/drivers/linuxbridge/agent/common/config.py
neutron/plugins/ml2/drivers/mech_sriov/agent/common/config.py
neutron/plugins/ml2/drivers/mech_sriov/mech_driver/mech_driver.py
neutron/plugins/ml2/drivers/openvswitch/agent/common/config.py
neutron/plugins/ml2/drivers/type_geneve.py
neutron/plugins/ml2/drivers/type_vxlan.py
neutron/tests/unit/debug/test_commands.py
releasenotes/notes/config-file-generation-2eafc6602d57178e.yaml [new file with mode: 0644]
setup.cfg
tools/generate_config_file_samples.sh [new file with mode: 0755]
tox.ini

index 25fb772f42d65217501e31a72233600b9d0cfce2..57d3563069482c71cd8ca01d941e90f4f9277520 100644 (file)
@@ -6,6 +6,8 @@ cover/
 covhtml/
 dist/
 doc/build
+etc/*.sample
+etc/neutron/plugins/ml2/*.sample
 *.DS_Store
 *.pyc
 neutron.egg-info/
index 4cde3d73fbeb25286a5c9c3d4e317d4d4b45cdfc..44c49f2bdebedc16da0239b9686e4d893395497b 100644 (file)
@@ -367,6 +367,21 @@ section of the third-party repo's own ``setup.cfg`` file.
   config files, duplicate settings will collide. It is therefore recommended to
   prefix section names with a third-party string, e.g. [vendor_foo].
 
+Since Mitaka, configuration files are not maintained in the git repository but
+should be generated as follows::
+
+``tox -e genconfig``
+
+If a 'tox' environment is unavailable, then you can run the following script
+instead to generate the configuration files::
+
+./tools/generate_config_file_samples.sh
+
+It is advised that subprojects do not keep their configuration files in their
+respective trees and instead generate them using a similar approach as Neutron
+does.
+
+
 Liberty Steps
 +++++++++++++
 
diff --git a/etc/README.txt b/etc/README.txt
new file mode 100644 (file)
index 0000000..40690ee
--- /dev/null
@@ -0,0 +1,9 @@
+To generate the sample neutron configuration files, run the following
+command from the top level of the neutron directory:
+
+tox -e genconfig
+
+If a 'tox' environment is unavailable, then you can run the following script
+instead to generate the configuration files:
+
+./tools/generate_config_file_samples.sh
diff --git a/etc/oslo-config-generator/dhcp_agent.ini b/etc/oslo-config-generator/dhcp_agent.ini
new file mode 100644 (file)
index 0000000..13a0de1
--- /dev/null
@@ -0,0 +1,7 @@
+[DEFAULT]
+output_file = etc/dhcp_agent.ini.sample
+wrap_width = 79
+
+namespace = neutron.base.agent
+namespace = neutron.dhcp.agent
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/l3_agent.ini b/etc/oslo-config-generator/l3_agent.ini
new file mode 100644 (file)
index 0000000..82bf2ca
--- /dev/null
@@ -0,0 +1,7 @@
+[DEFAULT]
+output_file = etc/l3_agent.ini.sample
+wrap_width = 79
+
+namespace = neutron.base.agent
+namespace = neutron.l3.agent
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/linuxbridge_agent.ini b/etc/oslo-config-generator/linuxbridge_agent.ini
new file mode 100644 (file)
index 0000000..060346b
--- /dev/null
@@ -0,0 +1,6 @@
+[DEFAULT]
+output_file = etc/neutron/plugins/ml2/linuxbridge_agent.ini.sample
+wrap_width = 79
+
+namespace = neutron.ml2.linuxbridge.agent
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/metadata_agent.ini b/etc/oslo-config-generator/metadata_agent.ini
new file mode 100644 (file)
index 0000000..5c27309
--- /dev/null
@@ -0,0 +1,6 @@
+[DEFAULT]
+output_file = etc/metadata_agent.ini.sample
+wrap_width = 79
+
+namespace = neutron.metadata.agent
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/metering_agent.ini b/etc/oslo-config-generator/metering_agent.ini
new file mode 100644 (file)
index 0000000..9c00d30
--- /dev/null
@@ -0,0 +1,6 @@
+[DEFAULT]
+output_file = etc/metering_agent.ini.sample
+wrap_width = 79
+
+namespace = neutron.metering.agent
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/ml2_conf.ini b/etc/oslo-config-generator/ml2_conf.ini
new file mode 100644 (file)
index 0000000..ab97bd4
--- /dev/null
@@ -0,0 +1,6 @@
+[DEFAULT]
+output_file = etc/neutron/plugins/ml2/ml2_conf.ini.sample
+wrap_width = 79
+
+namespace = neutron.ml2
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/ml2_conf_sriov.ini b/etc/oslo-config-generator/ml2_conf_sriov.ini
new file mode 100644 (file)
index 0000000..ed03c78
--- /dev/null
@@ -0,0 +1,6 @@
+[DEFAULT]
+output_file = etc/neutron/plugins/ml2/ml2_conf_sriov.ini.sample
+wrap_width = 79
+
+namespace = neutron.ml2.sriov
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/neutron.conf b/etc/oslo-config-generator/neutron.conf
new file mode 100644 (file)
index 0000000..f55a562
--- /dev/null
@@ -0,0 +1,18 @@
+[DEFAULT]
+output_file = etc/neutron.conf.sample
+wrap_width = 79
+
+namespace = neutron
+namespace = neutron.agent
+namespace = neutron.db
+namespace = neutron.extensions
+namespace = neutron.qos
+namespace = nova.auth
+namespace = oslo.log
+namespace = oslo.db
+namespace = oslo.policy
+namespace = oslo.concurrency
+namespace = oslo.messaging
+namespace = oslo.service.sslutils
+namespace = oslo.service.wsgi
+namespace = keystonemiddleware.auth_token
diff --git a/etc/oslo-config-generator/openvswitch_agent.ini b/etc/oslo-config-generator/openvswitch_agent.ini
new file mode 100644 (file)
index 0000000..3fab70d
--- /dev/null
@@ -0,0 +1,6 @@
+[DEFAULT]
+output_file = etc/neutron/plugins/ml2/openvswitch_agent.ini.sample
+wrap_width = 79
+
+namespace = neutron.ml2.ovs.agent
+namespace = oslo.log
diff --git a/etc/oslo-config-generator/sriov_agent.ini b/etc/oslo-config-generator/sriov_agent.ini
new file mode 100644 (file)
index 0000000..29864f5
--- /dev/null
@@ -0,0 +1,6 @@
+[DEFAULT]
+output_file = etc/neutron/plugins/ml2/sriov_agent.ini.sample
+wrap_width = 79
+
+namespace = neutron.ml2.sriov.agent
+namespace = oslo.log
index fcb063d0687db30519e5006f947c526285471a70..233cf622a57754fe6c751ad6497577aae9efa434 100644 (file)
@@ -26,11 +26,18 @@ LOG = logging.getLogger(__name__)
 
 ROOT_HELPER_OPTS = [
     cfg.StrOpt('root_helper', default='sudo',
-               help=_('Root helper application.')),
+               help=_("Root helper application. "
+                      "Use 'sudo neutron-rootwrap /etc/neutron/rootwrap.conf' "
+                      "to use the real root filter facility. Change to 'sudo' "
+                      "to skip the filtering and just run the command "
+                      "directly.")),
     cfg.BoolOpt('use_helper_for_ns_read',
                 default=True,
-                help=_('Use the root helper to read the namespaces from '
-                       'the operating system.')),
+                help=_("Use the root helper when listing the namespaces on a "
+                       "system. This may not be required depending on the "
+                       "security configuration. If the root helper is "
+                       "not required, set this to False for a performance "
+                       "improvement.")),
     # We can't just use root_helper=sudo neutron-rootwrap-daemon $cfg because
     # it isn't appropriate for long-lived processes spawned with create_process
     # Having a bool use_rootwrap_daemon option precludes specifying the
@@ -55,7 +62,11 @@ INTERFACE_DRIVER_OPTS = [
 
 IPTABLES_OPTS = [
     cfg.BoolOpt('comment_iptables_rules', default=True,
-                help=_("Add comments to iptables rules.")),
+                help=_("Add comments to iptables rules. "
+                       "Set to false to disallow the addition of comments to "
+                       "generated iptables rules that describe each rule's "
+                       "purpose. System must support the iptables comments "
+                       "module for addition of comments.")),
 ]
 
 PROCESS_MONITOR_OPTS = [
@@ -74,6 +85,17 @@ AVAILABILITY_ZONE_OPTS = [
                help=_("Availability zone of this node")),
 ]
 
+EXT_NET_BRIDGE_OPTS = [
+    cfg.StrOpt('external_network_bridge', default='br-ex',
+               deprecated_for_removal=True,
+               help=_("Name of bridge used for external network "
+                      "traffic. This should be set to an empty value for the "
+                      "Linux Bridge. When this parameter is set, each L3 "
+                      "agent can be associated with no more than one external "
+                      "network. This option is deprecated and will be removed "
+                      "in the M release.")),
+]
+
 
 def get_log_args(conf, log_file_name, **kwargs):
     cmd_args = []
index 41ce3993bf1c513dd00c0d0dcaf8f9ab4f91b3e8..08f3bb094dc82858df3ad0738f5bf977d995e752 100644 (file)
@@ -47,7 +47,9 @@ FAILMODE_STANDALONE = 'standalone'
 OPTS = [
     cfg.IntOpt('ovs_vsctl_timeout',
                default=DEFAULT_OVS_VSCTL_TIMEOUT,
-               help=_('Timeout in seconds for ovs-vsctl commands')),
+               help=_('Timeout in seconds for ovs-vsctl commands. '
+                      'If the timeout expires, ovs commands will fail with '
+                      'ALARMCLOCK error.')),
 ]
 cfg.CONF.register_opts(OPTS)
 
index a6c00b9e17fb2a7eaf3e85ca2590070ee4ee59fa..0331755f06074f691c2cb1fb7c63db1cfe598a31 100644 (file)
@@ -18,20 +18,43 @@ from oslo_config import cfg
 
 DHCP_AGENT_OPTS = [
     cfg.IntOpt('resync_interval', default=5,
-               help=_("Interval to resync.")),
+               help=_("The DHCP agent will resync its state with Neutron to "
+                      "recover from any transient notification or RPC errors. "
+                      "The interval is number of seconds between attempts.")),
     cfg.StrOpt('dhcp_driver',
                default='neutron.agent.linux.dhcp.Dnsmasq',
                help=_("The driver used to manage the DHCP server.")),
     cfg.BoolOpt('enable_isolated_metadata', default=False,
-                help=_("Support Metadata requests on isolated networks.")),
+                help=_("The DHCP server can assist with providing metadata "
+                       "support on isolated networks. Setting this value to "
+                       "True will cause the DHCP server to append specific "
+                       "host routes to the DHCP request. The metadata service "
+                       "will only be activated when the subnet does not "
+                       "contain any router port. The guest instance must be "
+                       "configured to request host routes via DHCP (Option "
+                       "121). This option doesn't have any effect when "
+                       "force_metadata is set to True.")),
     cfg.BoolOpt('force_metadata', default=False,
-                help=_("Force to use DHCP to get Metadata on all networks.")),
+                help=_("In some cases the Neutron router is not present to "
+                       "provide the metadata IP but the DHCP server can be "
+                       "used to provide this info. Setting this value will "
+                       "force the DHCP server to append specific host routes "
+                       "to the DHCP request. If this option is set, then the "
+                       "metadata service will be activated for all the "
+                       "networks.")),
     cfg.BoolOpt('enable_metadata_network', default=False,
-                help=_("Allows for serving metadata requests from a "
-                       "dedicated network. Requires "
-                       "enable_isolated_metadata = True")),
+                help=_("Allows for serving metadata requests coming from a "
+                       "dedicated metadata access network whose CIDR is "
+                       "169.254.169.254/16 (or larger prefix), and is "
+                       "connected to a Neutron router from which the VMs send "
+                       "metadata:1 request. In this case DHCP Option 121 will "
+                       "not be injected in VMs, as they will be able to reach "
+                       "169.254.169.254 through a router. This option "
+                       "requires enable_isolated_metadata = True.")),
     cfg.IntOpt('num_sync_threads', default=4,
-               help=_('Number of threads to use during sync process.'))
+               help=_('Number of threads to use during sync process. '
+                      'Should not exceed connection pool size configured on '
+                      'server.'))
 ]
 
 DHCP_OPTS = [
index 78cd6eb3b3c75124a603c370ef98d01b068bde3f..8831b310ef83fb2d14a1415c513a2a668dba71d0 100644 (file)
@@ -16,6 +16,7 @@
 
 from oslo_config import cfg
 
+from neutron.agent.common import config
 from neutron.common import constants
 
 
@@ -36,11 +37,6 @@ OPTS = [
                       "with DVR.  This mode must be used for an L3 agent "
                       "running on a centralized node (or in single-host "
                       "deployments, e.g. devstack)")),
-    cfg.StrOpt('external_network_bridge', default='br-ex',
-               deprecated_for_removal=True,
-               help=_("Name of bridge used for external network "
-                      "traffic. This option is deprecated and will be removed "
-                      "in the M release.")),
     cfg.PortOpt('metadata_port',
                 default=9697,
                 help=_("TCP Port used by Neutron metadata namespace proxy.")),
@@ -54,10 +50,19 @@ OPTS = [
                       "that has the matching router ID.")),
     cfg.BoolOpt('handle_internal_only_routers',
                 default=True,
-                help=_("Agent should implement routers with no gateway")),
+                help=_("Indicates that this L3 agent should also handle "
+                       "routers that do not have an external network gateway "
+                       "configured. This option should be True only for a "
+                       "single agent in a Neutron deployment, and may be "
+                       "False for all agents if all routers must have an "
+                       "external network gateway.")),
     cfg.StrOpt('gateway_external_network_id', default='',
-               help=_("UUID of external network for routers implemented "
-                      "by the agents.")),
+               help=_("When external_network_bridge is set, each L3 agent can "
+                      "be associated with no more than one external network. "
+                      "This value should be set to the UUID of that external "
+                      "network. To allow L3 agent support multiple external "
+                      "networks, both the external_network_bridge and "
+                      "gateway_external_network_id must be left empty.")),
     cfg.StrOpt('ipv6_gateway', default='',
                help=_("With IPv6, the network used for the external gateway "
                       "does not need to have an associated subnet, since the "
@@ -95,3 +100,5 @@ OPTS = [
                       'external network. This mark will be masked with '
                       '0xffff so that only the lower 16 bits will be used.')),
 ]
+
+OPTS += config.EXT_NET_BRIDGE_OPTS
index 83b8e741dd327f69106ec5bd709ff158bc1a894e..13ff3c9078c7fb1187a9689e0d3ce8e1813741a6 100644 (file)
@@ -37,7 +37,10 @@ OPTS = [
                help=_('Name of Open vSwitch bridge to use')),
     cfg.BoolOpt('ovs_use_veth',
                 default=False,
-                help=_('Uses veth for an interface or not')),
+                help=_('Uses veth for an OVS interface or not. '
+                       'Support kernels with limited namespace support '
+                       '(e.g. RHEL 6.5) so long as ovs_use_veth is set to '
+                       'True.')),
     cfg.IntOpt('network_device_mtu',
                help=_('MTU setting for device.')),
 ]
index 67e5e1eb8db31b7155966bf775000841da16667e..0d34c9045fc71ffd36fcc09018f51d1331b263de 100644 (file)
@@ -59,7 +59,12 @@ METADATA_PROXY_HANDLER_OPTS = [
                  help=_("TCP Port used by Nova metadata server.")),
      cfg.StrOpt('metadata_proxy_shared_secret',
                 default='',
-                help=_('Shared secret to sign instance-id request'),
+                help=_('When proxying metadata requests, Neutron signs the '
+                       'Instance-ID header with a shared secret to prevent '
+                       'spoofing. You may select any string for a secret, '
+                       'but it must match here and in the configuration used '
+                       'by the Nova Metadata Server. NOTE: Nova uses the same '
+                       'config key, but in [neutron] section.'),
                 secret=True),
      cfg.StrOpt('nova_metadata_protocol',
                 default='http',
index f5aad9ef8e19cfa3f110685e65b3154c9cc5b75e..c711ac224dab8154f51944ebe87614b3fc83425d 100644 (file)
@@ -30,6 +30,10 @@ OPTS = [
                choices=interface_map.keys(),
                default='vsctl',
                help=_('The interface for interacting with the OVSDB')),
+    cfg.StrOpt('ovsdb_connection',
+               default='tcp:127.0.0.1:6640',
+               help=_('The connection string for the native OVSDB backend. '
+                      'Requires the native ovsdb_interface to be enabled.'))
 ]
 cfg.CONF.register_opts(OPTS, 'OVS')
 
index c4bd2cb7e94228f3d8b5e5b76c07fb7c6e797d19..8133c0c03dd5f7dabe99507eecd8d514b860baea 100644 (file)
@@ -26,13 +26,6 @@ from neutron.agent.ovsdb.native import connection
 from neutron.agent.ovsdb.native import idlutils
 
 
-OPTS = [
-    cfg.StrOpt('ovsdb_connection',
-               default='tcp:127.0.0.1:6640',
-               help=_('The connection string for the native OVSDB backend')),
-]
-cfg.CONF.register_opts(OPTS, 'OVS')
-# TODO(twilson) DEFAULT.ovs_vsctl_timeout should be OVS.vsctl_timeout
 cfg.CONF.import_opt('ovs_vsctl_timeout', 'neutron.agent.common.ovs_lib')
 
 LOG = logging.getLogger(__name__)
index a0ac9ed3c6fbd634e3f321cc02d12a09d233bdd7..0f5c5d7ae40fff1d7f8cc378ccc0eb2616513623 100644 (file)
@@ -42,7 +42,9 @@ security_group_opts = [
     cfg.BoolOpt(
         'enable_ipset',
         default=True,
-        help=_('Use ipset to speed-up the iptables based security groups.'))
+        help=_('Use ipset to speed-up the iptables based security groups. '
+               'Enabling ipset support requires that ipset is installed on L2 '
+               'agent node.'))
 ]
 cfg.CONF.register_opts(security_group_opts, 'SECURITYGROUP')
 
index 5f0515462ad874699dda4ce0492e9bbc9f5fd716..3358e371a9cd9470ef844b8b319bb8651b655946 100644 (file)
@@ -42,7 +42,13 @@ core_opts = [
     cfg.PortOpt('bind_port', default=9696,
                 help=_("The port to bind to")),
     cfg.StrOpt('api_extensions_path', default="",
-               help=_("The path for API extensions")),
+               help=_("The path for API extensions. "
+                      "Note that this can be a colon-separated list of paths. "
+                      "For example: api_extensions_path = "
+                      "extensions:/path/to/more/exts:/even/more/exts. "
+                      "The __path__ of neutron.extensions is appended to "
+                      "this, so if your extensions are in there you don't "
+                      "need to specify them here.")),
     cfg.StrOpt('auth_strategy', default='keystone',
                help=_("The type of authentication to use")),
     cfg.StrOpt('core_plugin',
@@ -50,7 +56,10 @@ core_opts = [
     cfg.ListOpt('service_plugins', default=[],
                 help=_("The service plugins Neutron will use")),
     cfg.StrOpt('base_mac', default="fa:16:3e:00:00:00",
-               help=_("The base MAC address Neutron will use for VIFs")),
+               help=_("The base MAC address Neutron will use for VIFs. "
+                      "The first 3 octets will remain unchanged. If the 4th "
+                      "octet is not 00, it will also be used. The others "
+                      "will be randomly generated.")),
     cfg.IntOpt('mac_generation_retries', default=16,
                help=_("How many times Neutron will retry MAC generation")),
     cfg.BoolOpt('allow_bulk', default=True,
@@ -74,7 +83,7 @@ core_opts = [
                        "considered for high availability while scheduling "
                        "the resource.")),
     cfg.IntOpt('max_dns_nameservers', default=5,
-               help=_("Maximum number of DNS nameservers")),
+               help=_("Maximum number of DNS nameservers per subnet")),
     cfg.IntOpt('max_subnet_host_routes', default=20,
                help=_("Maximum number of host routes per subnet")),
     cfg.IntOpt('max_fixed_ips_per_port', default=5,
@@ -83,16 +92,35 @@ core_opts = [
                       "is deprecated and will be removed in the N "
                       "release.")),
     cfg.StrOpt('default_ipv4_subnet_pool', deprecated_for_removal=True,
-               help=_("Default IPv4 subnet-pool to be used for automatic "
-                      "subnet CIDR allocation. This option is deprecated for "
-                      "removal in the N release.")),
+               help=_("Default IPv4 subnet pool to be used for automatic "
+                      "subnet CIDR allocation. "
+                      "Specifies by UUID the pool to be used in case where "
+                      "creation of a subnet is being called without a "
+                      "subnet pool ID. If not set then no pool "
+                      "will be used unless passed explicitly to the subnet "
+                      "create. If no pool is used, then a CIDR must be passed "
+                      "to create a subnet and that subnet will not be "
+                      "allocated from any pool; it will be considered part of "
+                      "the tenant's private address space. This option is "
+                      "deprecated for removal in the N release.")),
     cfg.StrOpt('default_ipv6_subnet_pool', deprecated_for_removal=True,
-               help=_("Default IPv6 subnet-pool to be used for automatic "
-                      "subnet CIDR allocation. This option is deprecated for "
-                      "removal in the N release.")),
+               help=_("Default IPv6 subnet pool to be used for automatic "
+                      "subnet CIDR allocation. "
+                      "Specifies by UUID the pool to be used in case where "
+                      "creation of a subnet is being called without a "
+                      "subnet pool ID. See the description for "
+                      "default_ipv4_subnet_pool for more information. This "
+                      "option is deprecated for removal in the N release.")),
     cfg.BoolOpt('ipv6_pd_enabled', default=False,
                 help=_("Enables IPv6 Prefix Delegation for automatic subnet "
-                       "CIDR allocation")),
+                       "CIDR allocation. "
+                       "Set to True to enable IPv6 Prefix Delegation for "
+                       "subnet allocation in a PD-capable environment. Users "
+                       "making subnet creation requests for IPv6 subnets "
+                       "without providing a CIDR or subnetpool ID will be "
+                       "given a CIDR via the Prefix Delegation mechanism. "
+                       "Note that enabling PD will override the behavior of "
+                       "the default IPv6 subnetpool.")),
     cfg.IntOpt('dhcp_lease_duration', default=86400,
                deprecated_name='dhcp_lease_time',
                help=_("DHCP lease duration (in seconds). Use -1 to tell "
@@ -104,9 +132,13 @@ core_opts = [
                 help=_("Allow sending resource operation"
                        " notification to DHCP agent")),
     cfg.BoolOpt('allow_overlapping_ips', default=False,
-                help=_("Allow overlapping IP support in Neutron")),
+                help=_("Allow overlapping IP support in Neutron. "
+                       "Attention: the following parameter MUST be set to "
+                       "False if Neutron is being used in conjunction with "
+                       "Nova security groups.")),
     cfg.StrOpt('host', default=utils.get_hostname(),
-               help=_("Hostname to be used by the neutron server, agents and "
+               sample_default='example.domain',
+               help=_("Hostname to be used by the Neutron server, agents and "
                       "services running on this machine. All the agents and "
                       "services running on this machine must use the same "
                       "host value.")),
@@ -127,7 +159,11 @@ core_opts = [
                        'to VMs via network methods (DHCP and RA MTU options) '
                        'when the network\'s preferred MTU is known.')),
     cfg.StrOpt('ipam_driver',
-               help=_('IPAM driver to use.')),
+               help=_("Neutron IPAM (IP address management) driver to use. "
+                      "If ipam_driver is not set (default behavior), no IPAM "
+                      "driver is used. In order to use the reference "
+                      "implementation of Neutron IPAM driver, "
+                      "use 'internal'.")),
     cfg.BoolOpt('vlan_transparent', default=False,
                 help=_('If True, then allow plugins that support it to '
                        'create VLAN transparent networks.')),
index 0bf0ae228a06da08ffbfef05c50db664446b5f21..f3f3de4e70751a24be6acd2dcef0411c2782854f 100644 (file)
@@ -33,7 +33,7 @@ LOG = logging.getLogger(__name__)
 extra_route_opts = [
     #TODO(nati): use quota framework when it support quota for attributes
     cfg.IntOpt('max_routes', default=30,
-               help=_("Maximum number of routes")),
+               help=_("Maximum number of routes per router")),
 ]
 
 cfg.CONF.register_opts(extra_route_opts)
index 9125062fcfc072b2eacfd509ee123975a79f8717..525d3a531293ee2947549e69725d94a11f179134 100644 (file)
@@ -50,12 +50,14 @@ L3_HA_OPTS = [
                 help=_('Enable HA mode for virtual routers.')),
     cfg.IntOpt('max_l3_agents_per_router',
                default=3,
-               help=_('Maximum number of agents on which a router will be '
-                      'scheduled.')),
+               help=_("Maximum number of L3 agents which a HA router will be "
+                      "scheduled on. If it is set to 0 then the router will "
+                      "be scheduled on every agent.")),
     cfg.IntOpt('min_l3_agents_per_router',
                default=constants.MINIMUM_AGENTS_FOR_HA,
-               help=_('Minimum number of agents on which a router will be '
-                      'scheduled.')),
+               help=_("Minimum number of L3 agents which a HA router will be "
+                      "scheduled on. If it is set to 0 then the router will "
+                      "be scheduled on every agent.")),
     cfg.StrOpt('l3_ha_net_cidr',
                default='169.254.192.0/18',
                help=_('Subnet used for the l3 HA admin network.')),
index f13611c7eb9fb28e2e5ca784d57d71c7f68ae52c..fd482c6fe30afbd0af872d1953e9a0cc24c20188 100644 (file)
@@ -98,7 +98,8 @@ _db_opts = [
                help=_('URL to database')),
     cfg.StrOpt('engine',
                default='',
-               help=_('Database engine')),
+               help=_('Database engine for which script will be generated '
+                      'when using offline migration.')),
 ]
 
 CONF = cfg.ConfigOpts()
@@ -679,6 +680,10 @@ def validate_cli_options():
         alembic_util.err(_("Cannot specify both --service and --subproject."))
 
 
+def get_engine_config():
+    return [obj for obj in _db_opts if obj.name == 'engine']
+
+
 def main():
     CONF(project='neutron')
     validate_cli_options()
index 6919224ff1382d7f7d9bf0227a4862844a6ff27f..5b436162c716ba267a6fbd4b0523a91c48191ea5 100644 (file)
@@ -17,7 +17,6 @@ import shlex
 import socket
 
 import netaddr
-from oslo_config import cfg
 from oslo_log import log as logging
 
 from neutron.agent.linux import dhcp
@@ -35,15 +34,6 @@ DEVICE_OWNER_COMPUTE_PROBE = constants.DEVICE_OWNER_COMPUTE_PREFIX + 'probe'
 
 class NeutronDebugAgent(object):
 
-    OPTS = [
-        # Needed for drivers
-        cfg.StrOpt('external_network_bridge', default='br-ex',
-                   deprecated_for_removal=True,
-                   help=_("Name of bridge used for external network "
-                          "traffic. This option is deprecated and will be "
-                          "removed in the M release.")),
-    ]
-
     def __init__(self, conf, client, driver):
         self.conf = conf
         self.client = client
index 00a8622edde218fe686a3adbc8ecacdffc1f780e..eca65d1f993c7687fce0b7ea59bcf7ce1c971c06 100644 (file)
@@ -71,7 +71,7 @@ class NeutronDebugShell(shell.NeutronShell):
                   " either --config-file or env[NEUTRON_TEST_CONFIG_FILE]"))
         client = self.client_manager.neutron
         cfg.CONF.register_opts(interface.OPTS)
-        cfg.CONF.register_opts(debug_agent.NeutronDebugAgent.OPTS)
+        cfg.CONF.register_opts(config.EXT_NET_BRIDGE_OPTS)
         config.register_interface_driver_opts_helper(cfg.CONF)
         cfg.CONF(['--config-file', self.options.config_file])
         config.setup_logging()
diff --git a/neutron/opts.py b/neutron/opts.py
new file mode 100644 (file)
index 0000000..70529b6
--- /dev/null
@@ -0,0 +1,287 @@
+#  Licensed under the Apache License, Version 2.0 (the "License"); you may
+#  not use this file except in compliance with the License. You may obtain
+#  a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#  License for the specific language governing permissions and limitations
+#  under the License.
+
+import copy
+import itertools
+import operator
+
+from keystoneclient import auth
+from keystoneclient import session
+from oslo_config import cfg
+
+import neutron.agent.common.config
+import neutron.agent.common.ovs_lib
+import neutron.agent.dhcp.config
+import neutron.agent.l2.extensions.manager
+import neutron.agent.l3.config
+import neutron.agent.l3.ha
+import neutron.agent.linux.interface
+import neutron.agent.metadata.config
+import neutron.agent.ovsdb.api
+import neutron.agent.securitygroups_rpc
+import neutron.db.agents_db
+import neutron.db.agentschedulers_db
+import neutron.db.dvr_mac_db
+import neutron.db.extraroute_db
+import neutron.db.l3_agentschedulers_db
+import neutron.db.l3_dvr_db
+import neutron.db.l3_gwmode_db
+import neutron.db.l3_hamode_db
+import neutron.db.migration.cli
+import neutron.extensions.allowedaddresspairs
+import neutron.extensions.l3
+import neutron.extensions.securitygroup
+import neutron.openstack.common.cache.cache
+import neutron.plugins.ml2.config
+import neutron.plugins.ml2.drivers.linuxbridge.agent.common.config
+import neutron.plugins.ml2.drivers.mech_sriov.agent.common.config
+import neutron.plugins.ml2.drivers.mech_sriov.mech_driver.mech_driver
+import neutron.plugins.ml2.drivers.openvswitch.agent.common.config
+import neutron.plugins.ml2.drivers.type_flat
+import neutron.plugins.ml2.drivers.type_geneve
+import neutron.plugins.ml2.drivers.type_gre
+import neutron.plugins.ml2.drivers.type_vlan
+import neutron.plugins.ml2.drivers.type_vxlan
+import neutron.quota
+import neutron.service
+import neutron.services.metering.agents.metering_agent
+import neutron.services.qos.notification_drivers.manager
+import neutron.wsgi
+
+
+NOVA_GROUP = 'nova'
+
+CONF = cfg.CONF
+
+deprecations = {'nova.cafile': [cfg.DeprecatedOpt('ca_certificates_file',
+                                                  group=NOVA_GROUP)],
+                'nova.insecure': [cfg.DeprecatedOpt('api_insecure',
+                                                    group=NOVA_GROUP)],
+                'nova.timeout': [cfg.DeprecatedOpt('url_timeout',
+                                                   group=NOVA_GROUP)]}
+
+_nova_options = session.Session.register_conf_options(
+            CONF, NOVA_GROUP, deprecated_opts=deprecations)
+
+
+def list_agent_opts():
+    return [
+        ('agent',
+         itertools.chain(
+             neutron.agent.common.config.ROOT_HELPER_OPTS,
+             neutron.agent.common.config.AGENT_STATE_OPTS,
+             neutron.agent.common.config.IPTABLES_OPTS,
+             neutron.agent.common.config.PROCESS_MONITOR_OPTS,
+             neutron.agent.common.config.AVAILABILITY_ZONE_OPTS)
+         ),
+        ('DEFAULT',
+         itertools.chain(
+             neutron.agent.common.config.INTERFACE_DRIVER_OPTS,
+             neutron.agent.metadata.config.SHARED_OPTS,
+             neutron.agent.metadata.config.DRIVER_OPTS)
+         )
+    ]
+
+
+def list_extension_opts():
+    return [
+        ('DEFAULT',
+         neutron.extensions.allowedaddresspairs.allowed_address_pair_opts),
+        ('quotas',
+         itertools.chain(
+             neutron.extensions.l3.l3_quota_opts,
+             neutron.extensions.securitygroup.security_group_quota_opts)
+         )
+    ]
+
+
+def list_db_opts():
+    return [
+        ('DEFAULT',
+         itertools.chain(
+             neutron.db.agents_db.AGENT_OPTS,
+             neutron.db.extraroute_db.extra_route_opts,
+             neutron.db.l3_gwmode_db.OPTS,
+             neutron.db.agentschedulers_db.AGENTS_SCHEDULER_OPTS,
+             neutron.db.dvr_mac_db.dvr_mac_address_opts,
+             neutron.db.l3_dvr_db.router_distributed_opts,
+             neutron.db.l3_agentschedulers_db.L3_AGENTS_SCHEDULER_OPTS,
+             neutron.db.l3_hamode_db.L3_HA_OPTS)
+         ),
+        ('database',
+         neutron.db.migration.cli.get_engine_config())
+    ]
+
+
+def list_opts():
+    return [
+        ('DEFAULT',
+         itertools.chain(
+             neutron.common.config.core_cli_opts,
+             neutron.common.config.core_opts,
+             neutron.wsgi.socket_opts,
+             neutron.service.service_opts)
+         ),
+        (neutron.common.config.NOVA_CONF_SECTION,
+         itertools.chain(
+              neutron.common.config.nova_opts)
+         ),
+        ('quotas', neutron.quota.quota_opts)
+    ]
+
+
+def list_qos_opts():
+    return [
+        ('DEFAULT',
+         neutron.services.qos.notification_drivers.manager.QOS_PLUGIN_OPTS)
+    ]
+
+
+def list_base_agent_opts():
+    return [
+        ('DEFAULT',
+         itertools.chain(
+             neutron.agent.linux.interface.OPTS,
+             neutron.agent.common.config.INTERFACE_DRIVER_OPTS,
+             neutron.agent.common.ovs_lib.OPTS)
+         ),
+        ('AGENT', neutron.agent.common.config.AGENT_STATE_OPTS)
+    ]
+
+
+def list_dhcp_agent_opts():
+    return [
+        ('DEFAULT',
+         itertools.chain(
+             neutron.agent.dhcp.config.DHCP_AGENT_OPTS,
+             neutron.agent.dhcp.config.DHCP_OPTS,
+             neutron.agent.dhcp.config.DNSMASQ_OPTS)
+         )
+    ]
+
+
+def list_linux_bridge_opts():
+    return [
+        ('linux_bridge',
+         neutron.plugins.ml2.drivers.linuxbridge.agent.common.config.
+         bridge_opts),
+        ('vxlan',
+         neutron.plugins.ml2.drivers.linuxbridge.agent.common.config.
+         vxlan_opts),
+        ('agent',
+         neutron.plugins.ml2.drivers.linuxbridge.agent.common.config.
+         agent_opts),
+        ('securitygroup',
+         neutron.agent.securitygroups_rpc.security_group_opts)
+    ]
+
+
+def list_l3_agent_opts():
+    return [
+        ('DEFAULT',
+         itertools.chain(
+             neutron.agent.l3.config.OPTS,
+             neutron.service.service_opts,
+             neutron.agent.l3.ha.OPTS)
+         )
+    ]
+
+
+def list_metadata_agent_opts():
+    return [
+        ('DEFAULT',
+         itertools.chain(
+             neutron.agent.metadata.config.SHARED_OPTS,
+             neutron.agent.metadata.config.METADATA_PROXY_HANDLER_OPTS,
+             neutron.agent.metadata.config.UNIX_DOMAIN_METADATA_PROXY_OPTS,
+             neutron.openstack.common.cache.cache._get_oslo_configs())
+         ),
+        ('AGENT', neutron.agent.common.config.AGENT_STATE_OPTS)
+    ]
+
+
+def list_metering_agent_opts():
+    return [
+        ('DEFAULT',
+         itertools.chain(
+             neutron.services.metering.agents.metering_agent.MeteringAgent.
+             Opts,
+             neutron.agent.common.config.INTERFACE_DRIVER_OPTS)
+         )
+    ]
+
+
+def list_ml2_conf_opts():
+    return [
+        ('ml2',
+         neutron.plugins.ml2.config.ml2_opts),
+        ('ml2_type_flat',
+         neutron.plugins.ml2.drivers.type_flat.flat_opts),
+        ('ml2_type_vlan',
+         neutron.plugins.ml2.drivers.type_vlan.vlan_opts),
+        ('ml2_type_gre',
+         neutron.plugins.ml2.drivers.type_gre.gre_opts),
+        ('ml2_type_vxlan',
+         neutron.plugins.ml2.drivers.type_vxlan.vxlan_opts),
+        ('ml2_type_geneve',
+         neutron.plugins.ml2.drivers.type_geneve.geneve_opts),
+        ('securitygroup',
+         neutron.agent.securitygroups_rpc.security_group_opts)
+    ]
+
+
+def list_ml2_conf_sriov_opts():
+    return [
+        ('ml2_sriov',
+         neutron.plugins.ml2.drivers.mech_sriov.mech_driver.mech_driver.
+         sriov_opts)
+    ]
+
+
+def list_ovs_opts():
+    return [
+        ('ovs',
+         itertools.chain(
+             neutron.plugins.ml2.drivers.openvswitch.agent.common.config.
+             ovs_opts,
+             neutron.agent.ovsdb.api.OPTS)
+         ),
+        ('agent',
+         neutron.plugins.ml2.drivers.openvswitch.agent.common.config.
+         agent_opts),
+        ('securitygroup',
+         neutron.agent.securitygroups_rpc.security_group_opts)
+    ]
+
+
+def list_sriov_agent_opts():
+    return [
+        ('ml2_sriov',
+         neutron.plugins.ml2.drivers.mech_sriov.agent.common.config.
+         sriov_nic_opts),
+        ('agent',
+         neutron.agent.l2.extensions.manager.L2_AGENT_EXT_MANAGER_OPTS)
+    ]
+
+
+def list_auth_opts():
+    opt_list = copy.deepcopy(_nova_options)
+    opt_list.insert(0, auth.get_common_conf_options()[0])
+    # NOTE(mhickey): There are a lot of auth plugins, we just generate
+    # the config options for a few common ones
+    plugins = ['password', 'v2password', 'v3password']
+    for name in plugins:
+        for plugin_option in auth.get_plugin_class(name).get_options():
+            if all(option.name != plugin_option.name for option in opt_list):
+                opt_list.append(plugin_option)
+    opt_list.sort(key=operator.attrgetter('name'))
+    return [(NOVA_GROUP, opt_list)]
index 94a0fda065d4e617e9c4d772f5a7eae8000478a3..0c16368fc01e000499eedc0f62205c75ba0f87cd 100644 (file)
@@ -24,7 +24,9 @@ ml2_opts = [
     cfg.ListOpt('tenant_network_types',
                 default=['local'],
                 help=_("Ordered list of network_types to allocate as tenant "
-                       "networks.")),
+                       "networks. The default value 'local' is useful for "
+                       "single-box testing but provides no connectivity "
+                       "between hosts.")),
     cfg.ListOpt('mechanism_drivers',
                 default=[],
                 help=_("An ordered list of networking mechanism driver "
@@ -39,12 +41,17 @@ ml2_opts = [
     cfg.IntOpt('path_mtu', default=0,
                help=_('The maximum permissible size of an unfragmented '
                       'packet travelling from and to addresses where '
-                      'encapsulated Neutron traffic is sent.  If <= 0, '
-                      'the path MTU is indeterminate.')),
+                      'encapsulated Neutron traffic is sent. '
+                      'Drivers calculate maximum viable MTU for validating '
+                      'tenant requests based on this value (typically, '
+                      'path_mtu - maxmum encapsulation header size). If <= 0, '
+                      'the path MTU is indeterminate and no calculation '
+                      'takes place.')),
     cfg.IntOpt('segment_mtu', default=0,
                help=_('The maximum permissible size of an unfragmented '
                       'packet travelling a L2 network segment.  If <= 0, the '
-                      'segment MTU is indeterminate.')),
+                      'segment MTU is indeterminate and no calculation takes '
+                      'place.')),
     cfg.ListOpt('physical_network_mtus',
                 default=[],
                 help=_("A list of mappings of physical networks to MTU "
index 72750e97ce379fbafd486bdabc3852ff73ea51f3..83c6203e52a02b5f7ea90d575cd22d8324b42c9d 100644 (file)
@@ -33,7 +33,10 @@ vxlan_opts = [
     cfg.StrOpt('vxlan_group', default=DEFAULT_VXLAN_GROUP,
                help=_("Multicast group(s) for vxlan interface. A range of "
                       "group addresses may be specified by using CIDR "
-                      "notation. To reserve a unique group for each possible "
+                      "notation. Specifying a range allows different VNIs to "
+                      "use different group addresses, reducing or eliminating "
+                      "spurious broadcast traffic to the tunnel endpoints. "
+                      "To reserve a unique group for each possible "
                       "(24-bit) VNI, use a /8 such as 239.0.0.0/8. This "
                       "setting must be the same on all the agents.")),
     cfg.IPOpt('local_ip', version=4,
@@ -47,7 +50,14 @@ vxlan_opts = [
 bridge_opts = [
     cfg.ListOpt('physical_interface_mappings',
                 default=DEFAULT_INTERFACE_MAPPINGS,
-                help=_("List of <physical_network>:<physical_interface>")),
+                help=_("Comma-separated list of "
+                       "<physical_network>:<physical_interface> tuples "
+                       "mapping physical network names to the agent's "
+                       "node-specific physical network interfaces to be used "
+                       "for flat and VLAN networks. All physical networks "
+                       "listed in network_vlan_ranges on the server should "
+                       "have mappings to appropriate interfaces on each "
+                       "agent.")),
     cfg.ListOpt('bridge_mappings',
                 default=DEFAULT_BRIDGE_MAPPINGS,
                 help=_("List of <physical_network>:<physical_bridge>")),
index 07e42462f4bc09f83314acb421b01346e2e15489..947eb9cadab99d487edf1b752522564e934b7cb4 100644 (file)
@@ -62,23 +62,25 @@ agent_opts = [
 sriov_nic_opts = [
     cfg.ListOpt('physical_device_mappings',
                 default=DEFAULT_DEVICE_MAPPINGS,
-                help=_("List of <physical_network>:<network_device> mapping "
+                help=_("Comma-separated list of "
+                       "<physical_network>:<network_device> tuples mapping "
                        "physical network names to the agent's node-specific "
-                       "physical network device of SR-IOV physical "
-                       "function to be used for VLAN networks. "
-                       "All physical networks listed in network_vlan_ranges "
-                       "on the server should have mappings to appropriate "
-                       "interfaces on each agent")),
+                       "physical network device interfaces of SR-IOV physical "
+                       "function to be used for VLAN networks. All physical "
+                       "networks listed in network_vlan_ranges on the server "
+                       "should have mappings to appropriate interfaces on "
+                       "each agent.")),
     cfg.ListOpt('exclude_devices',
                 default=DEFAULT_EXCLUDE_DEVICES,
-                help=_("List of <network_device>:<excluded_devices> "
-                       "mapping network_device to the agent's node-specific "
-                       "list of virtual functions that should not be used "
-                       "for virtual networking. excluded_devices is a "
-                       "semicolon separated list of virtual functions "
-                       "(BDF format).to exclude from network_device. "
-                       "The network_device in the mapping should appear in "
-                       "the physical_device_mappings list.")),
+                help=_("Comma-separated list of "
+                       "<network_device>:<vfs_to_exclude> tuples, mapping "
+                       "network_device to the agent's node-specific list of "
+                       "virtual functions that should not be used for virtual "
+                       "networking. vfs_to_exclude is a semicolon-separated "
+                       "list of virtual functions to exclude from "
+                       "network_device. The network_device in the mapping "
+                       "should appear in the physical_device_mappings "
+                       "list.")),
 ]
 
 
index f904cc655f02b0ef551a16ce5394c2e0651535ea..4859ddabbbfc15967dc4a9cd76b14e9558283d2f 100644 (file)
@@ -34,10 +34,10 @@ FLAT_VLAN = 0
 sriov_opts = [
     cfg.ListOpt('supported_pci_vendor_devs',
                default=['15b3:1004', '8086:10ca'],
-               help=_("Supported PCI vendor devices, defined by "
-                      "vendor_id:product_id according to the PCI ID "
-                      "Repository. Default enables support for Intel "
-                      "and Mellanox SR-IOV capable NICs")),
+               help=_("Comma-separated list of supported PCI vendor devices, "
+                      "as defined by vendor_id:product_id according to the "
+                      "PCI ID Repository. Default enables support for Intel "
+                      "and Mellanox SR-IOV capable NICs.")),
 ]
 
 cfg.CONF.register_opts(sriov_opts, "ml2_sriov")
index 94c1b8239400c141ba0103a41865d209bd743eac..11f22b730925b3f117f04f7142067af1b6ba90d8 100644 (file)
@@ -28,7 +28,13 @@ DEFAULT_TUNNEL_TYPES = []
 
 ovs_opts = [
     cfg.StrOpt('integration_bridge', default='br-int',
-               help=_("Integration bridge to use.")),
+               help=_("Integration bridge to use. "
+                      "Do not change this parameter unless you have a good "
+                      "reason to. This is the name of the OVS integration "
+                      "bridge. There is one per hypervisor. The integration "
+                      "bridge acts as a virtual 'patch bay'. All VM VIFs are "
+                      "attached to this bridge and then 'patched' according "
+                      "to their network connectivity.")),
     cfg.StrOpt('tunnel_bridge', default='br-tun',
                help=_("Tunnel bridge to use.")),
     cfg.StrOpt('int_peer_patch_port', default='patch-tun',
@@ -41,18 +47,33 @@ ovs_opts = [
               help=_("Local IP address of tunnel endpoint.")),
     cfg.ListOpt('bridge_mappings',
                 default=DEFAULT_BRIDGE_MAPPINGS,
-                help=_("List of <physical_network>:<bridge>. "
-                       "Deprecated for ofagent.")),
+                help=_("Comma-separated list of <physical_network>:<bridge> "
+                       "tuples mapping physical network names to the agent's "
+                       "node-specific Open vSwitch bridge names to be used "
+                       "for flat and VLAN networks. The length of bridge "
+                       "names should be no more than 11. Each bridge must "
+                       "exist, and should have a physical network interface "
+                       "configured as a port. All physical networks "
+                       "configured on the server should have mappings to "
+                       "appropriate bridges on each agent. "
+                       "Note: If you remove a bridge from this "
+                       "mapping, make sure to disconnect it from the "
+                       "integration bridge as it won't be managed by the "
+                       "agent anymore. Deprecated for ofagent.")),
     cfg.BoolOpt('use_veth_interconnection', default=False,
                 help=_("Use veths instead of patch ports to interconnect the "
-                       "integration bridge to physical bridges.")),
+                       "integration bridge to physical networks. "
+                       "Support kernel without Open vSwitch patch port "
+                       "support so long as it is set to True.")),
     cfg.StrOpt('of_interface', default='ovs-ofctl',
                choices=['ovs-ofctl', 'native'],
                help=_("OpenFlow interface to use.")),
     cfg.StrOpt('datapath_type', default=constants.OVS_DATAPATH_SYSTEM,
                choices=[constants.OVS_DATAPATH_SYSTEM,
                         constants.OVS_DATAPATH_NETDEV],
-               help=_("OVS datapath to use.")),
+               help=_("OVS datapath to use. 'system' is the default value and "
+                      "corresponds to the kernel datapath. To enable the "
+                      "userspace datapath set this value to 'netdev'.")),
     cfg.StrOpt('vhostuser_socket_dir', default=constants.VHOST_USER_SOCKET_DIR,
                help=_("OVS vhost-user socket directory.")),
     cfg.IPOpt('of_listen_address', default='127.0.0.1',
index d8f430aafd256327c3035f139e2ac211528bb1c0..54da70914fc4bede5d5154104f58f642e05f2b99 100644 (file)
@@ -36,9 +36,12 @@ geneve_opts = [
                default=p_const.GENEVE_ENCAP_MIN_OVERHEAD,
                help=_("Geneve encapsulation header size is dynamic, this "
                       "value is used to calculate the maximum MTU "
-                      "for the driver."
-                      "this is the sum of the sizes of the outer "
-                      "ETH + IP + UDP + GENEVE header sizes")),
+                      "for the driver. "
+                      "This is the sum of the sizes of the outer "
+                      "ETH + IP + UDP + GENEVE header sizes. "
+                      "The default size for this field is 50, which is the "
+                      "size of the Geneve header without any additional "
+                      "option headers.")),
 ]
 
 cfg.CONF.register_opts(geneve_opts, "ml2_type_geneve")
index c6f9dbf107308fa8a757b7a6d81567e2e32feb54..1a4aae92e6eb1b5b8286f2e465157bde138d2110 100644 (file)
@@ -33,8 +33,10 @@ vxlan_opts = [
                        "enumerating ranges of VXLAN VNI IDs that are "
                        "available for tenant network allocation")),
     cfg.StrOpt('vxlan_group',
-               help=_("Multicast group for VXLAN. If unset, disables VXLAN "
-                      "multicast mode.")),
+               help=_("Multicast group for VXLAN. When configured, will "
+                      "enable sending all broadcast traffic to this multicast "
+                      "group. When left unconfigured, will disable multicast "
+                      "VXLAN mode.")),
 ]
 
 cfg.CONF.register_opts(vxlan_opts, "ml2_type_vxlan")
index 1f9cb17354e7695bb35ecf9e93ead1b04dd52cfa..331257410346f311860882b680a2d0756956e365 100644 (file)
@@ -35,7 +35,7 @@ class TestDebugCommands(base.BaseTestCase):
     def setUp(self):
         super(TestDebugCommands, self).setUp()
         cfg.CONF.register_opts(interface.OPTS)
-        cfg.CONF.register_opts(debug_agent.NeutronDebugAgent.OPTS)
+        cfg.CONF.register_opts(config.EXT_NET_BRIDGE_OPTS)
         common_config.init([])
         config.register_interface_driver_opts_helper(cfg.CONF)
 
diff --git a/releasenotes/notes/config-file-generation-2eafc6602d57178e.yaml b/releasenotes/notes/config-file-generation-2eafc6602d57178e.yaml
new file mode 100644 (file)
index 0000000..d937452
--- /dev/null
@@ -0,0 +1,7 @@
+---
+prelude: >
+   Generation of sample Neutron core configuration files.
+features:
+  - Neutron no longer includes static example configuration files. Instead,
+    use tools/generate_config_file_samples.sh to generate them. The files are
+    generated with a .sample extension.
index f88a79b593929fbe28c32eeefecfeecd0eba0bbc..c9cffb8511cb153a16258369edd17e9209db0a66 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -149,6 +149,23 @@ oslo.messaging.notify.drivers =
     neutron.openstack.common.notifier.test_notifier = oslo_messaging.notify._impl_test:TestDriver
     neutron.openstack.common.notifier.rpc_notifier2 = oslo_messaging.notify.messaging:MessagingV2Driver
     neutron.openstack.common.notifier.rpc_notifier = oslo_messaging.notify.messaging:MessagingDriver
+oslo.config.opts =
+    neutron = neutron.opts:list_opts
+    neutron.agent = neutron.opts:list_agent_opts
+    neutron.base.agent = neutron.opts:list_base_agent_opts
+    neutron.db = neutron.opts:list_db_opts
+    neutron.dhcp.agent = neutron.opts:list_dhcp_agent_opts
+    neutron.extensions = neutron.opts:list_extension_opts
+    neutron.l3.agent = neutron.opts:list_l3_agent_opts
+    neutron.metadata.agent = neutron.opts:list_metadata_agent_opts
+    neutron.metering.agent = neutron.opts:list_metering_agent_opts
+    neutron.ml2 = neutron.opts:list_ml2_conf_opts
+    neutron.ml2.linuxbridge.agent = neutron.opts:list_linux_bridge_opts
+    neutron.ml2.ovs.agent = neutron.opts:list_ovs_opts
+    neutron.ml2.sriov = neutron.opts:list_ml2_conf_sriov_opts
+    neutron.ml2.sriov.agent = neutron.opts:list_sriov_agent_opts
+    neutron.qos = neutron.opts:list_qos_opts
+    nova.auth = neutron.opts:list_auth_opts
 neutron.db.alembic_migrations =
     neutron = neutron.db.migration:alembic_migrations
 neutron.interface_drivers =
diff --git a/tools/generate_config_file_samples.sh b/tools/generate_config_file_samples.sh
new file mode 100755 (executable)
index 0000000..6b0f4ec
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+set -e
+
+GEN_CMD=oslo-config-generator
+
+if ! type "$GEN_CMD" > /dev/null; then
+    echo "ERROR: $GEN_CMD not installed on the system."
+    exit 1
+fi
+
+for file in `ls etc/oslo-config-generator/*`; do
+    $GEN_CMD --config-file=$file
+done
+
+set -x
diff --git a/tox.ini b/tox.ini
index 2be0b20128c28220c621eb5af40e7b11d567c294..3889b04449acd16db51cabfe5b41cd82600ab4cb 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -108,6 +108,7 @@ commands=
   flake8
   sh ./tools/coding-checks.sh --pylint '{posargs}'
   neutron-db-manage --config-file neutron/tests/etc/neutron.conf check_migration
+  {[testenv:genconfig]commands}
 whitelist_externals =
   sh
   bash
@@ -125,6 +126,7 @@ commands=
   flake8
   sh ./tools/coding-checks.sh --pylint '{posargs}'
   neutron-db-manage --config-file neutron/tests/etc/neutron.conf check_migration
+  {[testenv:genconfig]commands}
 whitelist_externals = {[testenv:pep8]whitelist_externals}
 
 [testenv:cover]
@@ -171,3 +173,6 @@ exclude = ./.*,build,dist,neutron/openstack/common/*,neutron/tests/tempest
 [hacking]
 import_exceptions = neutron.i18n
 local-check-factory = neutron.hacking.checks.factory
+
+[testenv:genconfig]
+commands = {toxinidir}/tools/generate_config_file_samples.sh