| {%- from "neutron/map.jinja" import server with context %} |
| [DEFAULT] |
| |
| # |
| # From oslo.log |
| # |
| |
| # If set to true, the logging level will be set to DEBUG instead of the default |
| # INFO level. (boolean value) |
| # Note: This option can be changed without restarting. |
| #debug = false |
| |
| # DEPRECATED: If set to false, the logging level will be set to WARNING instead |
| # of the default INFO level. (boolean value) |
| # This option is deprecated for removal. |
| # Its value may be silently ignored in the future. |
| #verbose = true |
| |
| # The name of a logging configuration file. This file is appended to any |
| # existing logging configuration files. For details about logging configuration |
| # files, see the Python logging module documentation. Note that when logging |
| # configuration files are used then all logging configuration is set in the |
| # configuration file and other logging configuration options are ignored (for |
| # example, logging_context_format_string). (string value) |
| # Note: This option can be changed without restarting. |
| # Deprecated group/name - [DEFAULT]/log_config |
| #log_config_append = <None> |
| |
| # Defines the format string for %%(asctime)s in log records. Default: |
| # %(default)s . This option is ignored if log_config_append is set. (string |
| # value) |
| #log_date_format = %Y-%m-%d %H:%M:%S |
| |
| # (Optional) Name of log file to send logging output to. If no default is set, |
| # logging will go to stderr as defined by use_stderr. This option is ignored if |
| # log_config_append is set. (string value) |
| # Deprecated group/name - [DEFAULT]/logfile |
| #log_file = <None> |
| |
| # (Optional) The base directory used for relative log_file paths. This option |
| # is ignored if log_config_append is set. (string value) |
| # Deprecated group/name - [DEFAULT]/logdir |
| #log_dir = <None> |
| |
| # Uses logging handler designed to watch file system. When log file is moved or |
| # removed this handler will open a new log file with specified path |
| # instantaneously. It makes sense only if log_file option is specified and |
| # Linux platform is used. This option is ignored if log_config_append is set. |
| # (boolean value) |
| #watch_log_file = false |
| |
| # Use syslog for logging. Existing syslog format is DEPRECATED and will be |
| # changed later to honor RFC5424. This option is ignored if log_config_append |
| # is set. (boolean value) |
| #use_syslog = false |
| |
| # Syslog facility to receive log lines. This option is ignored if |
| # log_config_append is set. (string value) |
| #syslog_log_facility = LOG_USER |
| |
| # Log output to standard error. This option is ignored if log_config_append is |
| # set. (boolean value) |
| #use_stderr = false |
| |
| # Format string to use for log messages with context. (string value) |
| #logging_context_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s |
| |
| # Format string to use for log messages when context is undefined. (string |
| # value) |
| #logging_default_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s |
| |
| # Additional data to append to log message when logging level for the message |
| # is DEBUG. (string value) |
| #logging_debug_format_suffix = %(funcName)s %(pathname)s:%(lineno)d |
| |
| # Prefix each line of exception output with this format. (string value) |
| #logging_exception_prefix = %(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s |
| |
| # Defines the format string for %(user_identity)s that is used in |
| # logging_context_format_string. (string value) |
| #logging_user_identity_format = %(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s |
| |
| # List of package logging levels in logger=LEVEL pairs. This option is ignored |
| # if log_config_append is set. (list value) |
| #default_log_levels = amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,dogpile.core.dogpile=INFO |
| |
| # Enables or disables publication of error events. (boolean value) |
| #publish_errors = false |
| |
| # The format for an instance that is passed with the log message. (string |
| # value) |
| #instance_format = "[instance: %(uuid)s] " |
| |
| # The format for an instance UUID that is passed with the log message. (string |
| # value) |
| #instance_uuid_format = "[instance: %(uuid)s] " |
| |
| # Interval, number of seconds, of log rate limiting. (integer value) |
| #rate_limit_interval = 0 |
| |
| # Maximum number of logged messages per rate_limit_interval. (integer value) |
| #rate_limit_burst = 0 |
| |
| # Log level name used by rate limiting: CRITICAL, ERROR, INFO, WARNING, DEBUG |
| # or empty string. Logs with level greater or equal to rate_limit_except_level |
| # are not filtered. An empty string means that all levels are filtered. (string |
| # value) |
| #rate_limit_except_level = CRITICAL |
| |
| # Enables or disables fatal status of deprecations. (boolean value) |
| #fatal_deprecations = false |
| |
| |
| [ml2] |
| |
| # |
| # From neutron.ml2 |
| # |
| |
| # List of network type driver entrypoints to be loaded from the |
| # neutron.ml2.type_drivers namespace. (list value) |
| #type_drivers = local,flat,vlan,gre,vxlan,geneve |
| |
| # Ordered list of network_types to allocate as tenant networks. The default |
| # value 'local' is useful for single-box testing but provides no connectivity |
| # between hosts. (list value) |
| #tenant_network_types = local |
| tenant_network_types = {{ server.backend.tenant_network_types }} |
| |
| # An ordered list of networking mechanism driver entrypoints to be loaded from |
| # the neutron.ml2.mechanism_drivers namespace. (list value) |
| #mechanism_drivers = |
| {%- set mechanism_drivers = [] %} |
| {%- set default_order = 0 %} |
| {%- for mechanism_name, mechanism in server.get('backend', {}).get('mechanism', []).items() %} |
| {%- if 'driver' in mechanism %} |
| {%- do mechanism.update({'order': default_order}) if 'order' not in mechanism %} |
| {%- do mechanism_drivers.append(mechanism) %} |
| {%- endif %} |
| {%- endfor %} |
| {%- if "vxlan" in server.backend.tenant_network_types and not server.backend.opendaylight|default(False) %} |
| {%- do mechanism_drivers.append({'driver': 'l2population', 'order': default_order}) %} |
| {%- endif %} |
| mechanism_drivers = {{ mechanism_drivers|sort(True, attribute='order')|join(',', attribute='driver') }} |
| |
| # An ordered list of extension driver entrypoints to be loaded from the |
| # neutron.ml2.extension_drivers namespace. For example: extension_drivers = |
| # port_security,qos (list value) |
| #extension_drivers = |
| {# Get server:backend:extension mapping and prepare tmp_ext_list list with extentions where enabled = True #} |
| {%- set tmp_ext_list = [] %} |
| {%- for ext_name, ext_params in server.backend.get('extension', {}).iteritems() %} |
| {%- do tmp_ext_list.append(ext_name) if ext_params.get('enabled', False) %} |
| {%- endfor %} |
| {# Below section is for backward compatible when extentions were separated properties without server:backend:extension pillar #} |
| {%- do tmp_ext_list.append('port_security') if 'port_security' not in tmp_ext_list %} |
| {%- do tmp_ext_list.append('qos') if server.get('qos', 'True') and 'qos' not in tmp_ext_list %} |
| extension_drivers={{ tmp_ext_list|join(',') }} |
| |
| # Maximum size of an IP packet (MTU) that can traverse the underlying physical |
| # network infrastructure without fragmentation when using an overlay/tunnel |
| # protocol. This option allows specifying a physical network MTU value that |
| # differs from the default global_physnet_mtu value. (integer value) |
| #path_mtu = 0 |
| path_mtu = {{ server.get('path_mtu', server.get('global_physnet_mtu', '0')) }} |
| |
| # A list of mappings of physical networks to MTU values. The format of the |
| # mapping is <physnet>:<mtu val>. This mapping allows specifying a physical |
| # network MTU value that differs from the default global_physnet_mtu value. |
| # (list value) |
| #physical_network_mtus = |
| {%- set physical_network_mtus = [] %} |
| |
| {%- for physnet, params in server.backend.get('physnets', {}).iteritems() %} |
| {%- do physical_network_mtus.append([physnet, params.get('mtu')]|join(":")) if params.get('mtu', False) %} |
| {%- endfor %} |
| |
| {%- if not physical_network_mtus %} |
| |
| {%- if server.get('external_access', True) %} |
| {%- do physical_network_mtus.append(['physnet1',server.backend.get('external_mtu', '1500')]|join(":")) %} |
| {%- endif %} |
| {%- if "vlan" in server.backend.tenant_network_types %} |
| {%- do physical_network_mtus.append(['physnet2',server.backend.get('tenant_net_mtu', server.backend.get('external_mtu', '1500'))]|join(":")) %} |
| {%- endif %} |
| {%- if server.get('ironic_enabled', False) %} |
| {%- do physical_network_mtus.append(['physnet3',server.backend.get('ironic_net_mtu', server.backend.get('external_mtu', '1500'))]|join(":")) %} |
| {%- endif %} |
| |
| {%- endif %} |
| |
| physical_network_mtus = {{ ','.join(physical_network_mtus) }} |
| |
| # Default network type for external networks when no provider attributes are |
| # specified. By default it is None, which means that if provider attributes are |
| # not specified while creating external networks then they will have the same |
| # type as tenant networks. Allowed values for external_network_type config |
| # option depend on the network type values configured in type_drivers config |
| # option. (string value) |
| #external_network_type = <None> |
| |
| # IP version of all overlay (tunnel) network endpoints. Use a value of 4 for |
| # IPv4 or 6 for IPv6. (integer value) |
| #overlay_ip_version = 4 |
| |
| |
| [ml2_type_flat] |
| |
| # |
| # From neutron.ml2 |
| # |
| |
| # List of physical_network names with which flat networks can be created. Use |
| # default '*' to allow flat networks with arbitrary physical_network names. Use |
| # an empty list to disable flat networks. (list value) |
| #flat_networks = * |
| {%- set flat_nets = [] %} |
| |
| {%- for physnet, params in server.backend.get('physnets', {}).iteritems() %} |
| {%- do flat_nets.append(physnet) if 'flat' in params.get('types', []) %} |
| {%- endfor %} |
| |
| {%- if not flat_nets %} |
| {%- do flat_nets.append(server.backend.get('flat_networks_default', '*')) %} |
| {%- endif %} |
| |
| flat_networks = {{ ','.join(flat_nets) }} |
| |
| |
| [ml2_type_geneve] |
| |
| # |
| # From neutron.ml2 |
| # |
| |
| # Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges of |
| # Geneve VNI IDs that are available for tenant network allocation (list value) |
| #vni_ranges = |
| vni_ranges = {{ server.get('geneve', {}).vni_ranges|default('1:65536') }} |
| |
| # 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. The default size for this field is 50, |
| # which is the size of the Geneve header without any additional option headers. |
| # (integer value) |
| #max_header_size = 30 |
| max_header_size = 38 |
| |
| |
| [ml2_type_gre] |
| |
| # |
| # From neutron.ml2 |
| # |
| |
| # Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges of GRE |
| # tunnel IDs that are available for tenant network allocation (list value) |
| #tunnel_id_ranges = |
| tunnel_id_ranges =2:65535 |
| |
| |
| [ml2_type_vlan] |
| |
| # |
| # From neutron.ml2 |
| # |
| |
| # List of <physical_network>:<vlan_min>:<vlan_max> or <physical_network> |
| # specifying physical_network names usable for VLAN provider and tenant |
| # networks, as well as ranges of VLAN tags on each available for allocation to |
| # tenant networks. (list value) |
| {%- set network_vlan_ranges = [] %} |
| |
| {%- for physnet, params in server.backend.get('physnets', {}).iteritems() %} |
| {%- do network_vlan_ranges.append([physnet, params.get('vlan_range')]|join(":") if params.get('vlan_range', False) else physnet) if 'vlan' in params.get('types', ['vlan']) %} |
| {%- endfor %} |
| |
| {%- if not network_vlan_ranges %} |
| |
| {%- if server.backend.external_vlan_range is defined %} |
| {%- do network_vlan_ranges.append(['physnet1',server.backend.get('external_vlan_range')]|join(":")) %} |
| {%- endif %} |
| {%- if "vlan" in server.backend.tenant_network_types %} |
| {%- do network_vlan_ranges.append(['physnet2',server.backend.get('tenant_vlan_range')]|join(":")) %} |
| {%- endif %} |
| {%- if server.get('ironic_enabled', False) %} |
| {%- do network_vlan_ranges.append(['physnet3',server.backend.get('ironic_vlan_range')]|join(":")) %} |
| {%- endif %} |
| |
| {%- endif %} |
| |
| network_vlan_ranges = {{ ','.join(network_vlan_ranges) }} |
| |
| [ml2_type_vxlan] |
| |
| # |
| # From neutron.ml2 |
| # |
| |
| # Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges of |
| # VXLAN VNI IDs that are available for tenant network allocation (list value) |
| #vni_ranges = |
| vni_ranges = {{ server.get('vxlan', {}).vni_ranges|default('2:65535') }} |
| |
| # Multicast group for VXLAN. When configured, will enable sending all broadcast |
| # traffic to this multicast group. When left unconfigured, will disable |
| # multicast VXLAN mode. (string value) |
| #vxlan_group = <None> |
| vxlan_group = {{ server.get('vxlan', {}).group|default('224.0.0.1') }} |
| |
| |
| [securitygroup] |
| |
| # |
| # From neutron.ml2 |
| # |
| |
| # Driver for security groups firewall in the L2 agent (string value) |
| #firewall_driver = <None> |
| {%- if not server.get('security_groups_enabled', True) %} |
| {%- set _firewall_driver = 'noop' %} |
| {%- elif server.dpdk or server.get('vlan_aware_vms', False) %} |
| {%- set _firewall_driver = 'openvswitch' %} |
| {%- else %} |
| {%- set _firewall_driver = 'iptables_hybrid' %} |
| {%- endif %} |
| firewall_driver = {{ server.get('firewall_driver', _firewall_driver) }} |
| |
| # Controls whether the neutron security group API is enabled in the server. It |
| # should be false when using no security groups or using the nova security |
| # group API. (boolean value) |
| #enable_security_group = true |
| enable_security_group = {{ server.get('security_groups_enabled', True) }} |
| |
| # Use ipset to speed-up the iptables based security groups. Enabling ipset |
| # support requires that ipset is installed on L2 agent node. (boolean value) |
| #enable_ipset = true |
| |
| {%- if server.backend.engine == "ovn" %} |
| [ovn] |
| ovn_nb_connection = tcp:{{ server.controller_vip }}:6641 |
| ovn_sb_connection = tcp:{{ server.controller_vip }}:6642 |
| ovn_l3_scheduler = leastloaded |
| {%- endif %} |
| |
| {%- if server.backend.opendaylight|default(False) %} |
| [ml2_odl] |
| # HTTP URL of OpenDaylight REST interface. (string value) |
| url = {{ server.backend.protocol|default('http') }}://{{ server.backend.host }}:{{ server.backend.rest_api_port }}/controller/nb/v2/neutron |
| |
| # HTTP username for authentication. (string value) |
| username = {{ server.backend.user }} |
| |
| # HTTP password for authentication. (string value) |
| password = {{ server.backend.password }} |
| |
| # Name of the controller to be used for port binding. (string value) |
| port_binding_controller = pseudo-agentdb-binding |
| |
| # Enable websocket for pseudo-agent-port-binding. (boolean value) |
| enable_websocket_pseudo_agentdb = {{ server.backend.enable_websocket|default('false') }} |
| |
| # Enables the networking-odl driver to supply special neutron ports of |
| # "dhcp" type to OpenDaylight Controller for its use in providing DHCP |
| # Service. (boolean value) |
| enable_dhcp_service = {{ server.backend.enable_dhcp_service|default('false') }} |
| {%- endif %} |