Merge "Updates to advanced networking chapter"

This commit is contained in:
Jenkins 2014-08-27 15:23:46 +00:00 committed by Gerrit Code Review
commit 99ba91d1d8
4 changed files with 2375 additions and 1769 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,450 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="section_networking-advanced-agent">
<title>Advanced agent options</title>
<para>This section describes advanced configuration options for server plug-ins and agents.</para>
<section xml:id="section_neutron_server">
<title>OpenStack Networking server with plug-in</title>
<para>This web server runs the OpenStack Networking API Web Server. It loads
a plug-in and passes the API calls to the plug-in for processing. The
<systemitem class="service">neutron-server</systemitem> service receives one or more configuration files
as input. For example:</para>
<screen><userinput>neutron-server --config-file <replaceable>NEUTRON_CONFIG_FILE</replaceable> --config-file <replaceable>PLUGIN_CONFIG_FILE</replaceable></userinput></screen>
<para>The neutron configuration file contains the common neutron configuration options.</para>
<para>The plug-in configuration file contains the plug-in specific options.</para>
<para>The plug-in that runs on the service is loaded through the
<parameter>core_plugin</parameter> configuration option. In some cases, a plug-in
might have an agent that performs the actual networking.</para>
<para>Most plug-ins require an SQL database. After you install and start the database
server, set a password for the root account and delete the anonymous accounts:</para>
<screen><prompt>$</prompt> <userinput>&gt; mysql -u root</userinput>
<prompt>mysql&gt;</prompt> <userinput>update mysql.user set password = password('iamroot') where user = 'root';</userinput>
<prompt>mysql&gt;</prompt> <userinput>delete from mysql.user where user = '';</userinput></screen>
<para>Create a database and user account specifically for plug-in:</para>
<screen><prompt>mysql&gt;</prompt> <userinput>create database <replaceable>DATABASE_NAME</replaceable></userinput>
<prompt>mysql&gt;</prompt> <userinput>create user '<replaceable>USER_NAME</replaceable>'@'localhost' identified by '<replaceable>USER_NAME</replaceable>';</userinput>
<prompt>mysql&gt;</prompt> <userinput>create user '<replaceable>USER_NAME</replaceable>'@'%' identified by '<replaceable>USER_NAME</replaceable>';</userinput>
<prompt>mysql&gt;</prompt> <userinput>grant all on <replaceable>DATABASE_NAME</replaceable>.* to '<replaceable>USER_NAME</replaceable>'@'%';</userinput></screen>
<para>After this step completes, you can update the settings in the relevant plug-in
configuration files. Find the plug-in specific configuration files at
<filename>$NEUTRON_CONF_DIR/plugins</filename>.</para>
<para>Some plug-ins have an L2 agent that performs the actual networking. That is, the agent
attaches the virtual machine NIC to the OpenStack Networking network. Each node should
run an L2 agent. Note that the agent receives the following input parameters:</para>
<screen><userinput>neutron-plugin-agent --config-file <replaceable>NEUTRON_CONFIG_FILE</replaceable> --config-file <replaceable>PLUGIN_CONFIG_FILE</replaceable></userinput></screen>
<para>You must complete these tasks before you can work with the plug-in:</para>
<orderedlist>
<listitem>
<para>Ensure that the core plug-in is updated.</para>
</listitem>
<listitem>
<para>Ensure that the database connection is correctly set.</para>
</listitem>
</orderedlist>
<para>The following table shows sample values for the configuration options. Some Linux
packages might provide installation utilities that configure these values.</para>
<table rules="all">
<caption>Settings</caption>
<thead>
<tr>
<th>Option</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><emphasis role="bold">Open vSwitch</emphasis></td>
<td/>
</tr>
<tr>
<td>core_plugin ($NEUTRON_CONF_DIR/neutron.conf)</td>
<td>openvswitch</td>
</tr>
<tr>
<td>connection (in the plugin configuration file, section
<code>[database]</code>)</td>
<td>mysql://<replaceable>USERNAME</replaceable>:<replaceable>PASSWORD</replaceable>@localhost/ovs_neutron?charset=utf8</td>
</tr>
<tr>
<td>Plug-in Configuration File</td>
<td>$NEUTRON_CONF_DIR/plugins/openvswitch/ovs_neutron_plugin.ini</td>
</tr>
<tr>
<td>Agent</td>
<td>neutron-openvswitch-agent</td>
</tr>
<tr>
<td><emphasis role="bold">Linux Bridge</emphasis></td>
<td/>
</tr>
<tr>
<td>core_plugin ($NEUTRON_CONF_DIR/neutron.conf)</td>
<td>linuxbridge</td>
</tr>
<tr>
<td>connection (in the plug-in configuration file, section
<code>[database]</code>)</td>
<td>mysql://<replaceable>USERNAME</replaceable>:<replaceable>PASSWORD</replaceable>@localhost/neutron_linux_bridge?charset=utf8</td>
</tr>
<tr>
<td>Plug-in Configuration File</td>
<td>$NEUTRON_CONF_DIR/plugins/linuxbridge/linuxbridge_conf.ini</td>
</tr>
<tr>
<td>Agent</td>
<td>neutron-linuxbridge-agent</td>
</tr>
</tbody>
</table>
</section>
<section xml:id="section_adv_cfg_dhcp_agent">
<title>DHCP agent</title>
<para>You can run a DHCP server that allocates IP addresses to virtual machines that run on
the network. When a subnet is created, by default, the subnet has DHCP enabled.</para>
<para>The node that runs the DHCP agent should run:</para>
<screen><userinput>neutron-dhcp-agent --config-file <replaceable>NEUTRON_CONFIG_FILE</replaceable> --config-file <replaceable>DHCP_CONFIG_FILE</replaceable></userinput></screen>
<para>Currently the DHCP agent uses <systemitem class="service">dnsmasq</systemitem> to perform that static
address assignment.</para>
<para>You must configure a driver that matches the plug-in that runs on the service.</para>
<table rules="all">
<caption>Settings</caption>
<thead>
<tr>
<th>Option</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><emphasis role="bold">Open vSwitch</emphasis></td>
<td/>
</tr>
<tr>
<td>interface_driver ($NEUTRON_CONF_DIR/dhcp_agent.ini)</td>
<td>neutron.agent.linux.interface.OVSInterfaceDriver</td>
</tr>
<tr>
<td><emphasis role="bold">Linux Bridge</emphasis></td>
<td/>
</tr>
<tr>
<td>interface_driver ($NEUTRON_CONF_DIR/dhcp_agent.ini)</td>
<td>neutron.agent.linux.interface.BridgeInterfaceDriver</td>
</tr>
</tbody>
</table>
<section xml:id="adv_cfg_dhcp_agent_namespace">
<title>Namespace</title>
<para>By default, the DHCP agent uses Linux network namespaces to support overlapping IP
addresses. For information about network namespaces support, see the <link
linkend="section_limitations">Limitations</link> section.</para>
<para>If the Linux installation does not support network namespaces, you must disable
network namespaces in the DHCP agent configuration file. The default value of
<option>use_namespaces</option> is <literal>True</literal>.</para>
<programlisting language="ini">use_namespaces = False</programlisting>
</section>
</section>
<section xml:id="section_adv_cfg_l3_agent">
<title>L3 agent</title>
<para>You can run an L3 agent that enables layer 3 forwarding and floating IP support.</para>
<para>The node that runs the L3 agent should run:</para>
<screen><userinput>neutron-l3-agent --config-file <replaceable>NEUTRON_CONFIG_FILE</replaceable> --config-file <replaceable>L3_CONFIG_FILE</replaceable></userinput></screen>
<para>You must configure a driver that matches the plug-in that runs on the service. This
driver creates the routing interface.</para>
<table rules="all">
<caption>Settings</caption>
<thead>
<tr>
<th>Option</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><emphasis role="bold">Open vSwitch</emphasis></td>
<td/>
</tr>
<tr>
<td>interface_driver ($NEUTRON_CONF_DIR/l3_agent.ini)</td>
<td>neutron.agent.linux.interface.OVSInterfaceDriver</td>
</tr>
<tr>
<td>external_network_bridge ($NEUTRON_CONF_DIR/l3_agent.ini)</td>
<td>br-ex</td>
</tr>
<tr>
<td><emphasis role="bold">Linux Bridge</emphasis></td>
<td/>
</tr>
<tr>
<td>interface_driver ($NEUTRON_CONF_DIR/l3_agent.ini)</td>
<td>neutron.agent.linux.interface.BridgeInterfaceDriver</td>
</tr>
<tr>
<td>external_network_bridge ($NEUTRON_CONF_DIR/l3_agent.ini)</td>
<td>This field must be empty (or the bridge name for the external network).</td>
</tr>
</tbody>
</table>
<para>The L3 agent communicates with the OpenStack Networking server through the OpenStack
Networking API, so the following configuration is required:</para>
<orderedlist>
<listitem>
<para>OpenStack Identity authentication:</para>
<programlisting language="ini">auth_url="$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT/v2.0"</programlisting>
<para>For example:</para>
<programlisting language="ini">http://10.56.51.210:5000/v2.0</programlisting>
</listitem>
<listitem>
<para>Administrative user details:</para>
<programlisting language="ini">admin_tenant_name $SERVICE_TENANT_NAME
admin_user $Q_ADMIN_USERNAME
admin_password $SERVICE_PASSWORD</programlisting>
</listitem>
</orderedlist>
<section xml:id="adv_cfg_l3_agent_namespace">
<title>Namespace</title>
<para>By default, the L3 agent uses Linux network namespaces to support overlapping IP
addresses.</para>
<para>For information about network namespaces support, see the <link
linkend="section_limitations">Limitation</link> section.</para>
<para>If the Linux installation does not support network namespaces, you must disable
network namespaces in the L3 agent configuration file. The default value of
<option>use_namespaces</option> is <literal>True</literal>.</para>
<programlisting language="ini">use_namespaces = False</programlisting>
<para>When you set <option>use_namespaces</option> to <literal>False</literal>, only one
router ID is supported per node.</para>
<para>Use the <option>router_id</option> configuration option to configure the
router:</para>
<programlisting language="ini"># If use_namespaces is set to False then the agent can only configure one router.
# This is done by setting the specific router_id.
router_id = 1064ad16-36b7-4c2f-86f0-daa2bcbd6b2a</programlisting>
<para>To configure it, you must run the OpenStack Networking service, create a router,
and set the router ID value to the <option>router_id</option> value in the L3 agent
configuration file.</para>
<screen><prompt>$</prompt> <userinput>neutron router-create myrouter1</userinput>
<computeroutput>Created a new router:
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| external_gateway_info | |
| id | 338d42d7-b22e-42c5-9df6-f3674768fe75 |
| name | myrouter1 |
| status | ACTIVE |
| tenant_id | 0c236f65baa04e6f9b4236b996555d56 |
+-----------------------+--------------------------------------+</computeroutput></screen>
</section>
<section xml:id="adv_cfg_l3_agent_multi_extnet">
<title>Multiple external networks</title>
<para>Use one of these methods to support multiple external networks:</para>
<itemizedlist>
<listitem>
<para>Assign multiple subnets to an external network.</para>
</listitem>
<listitem>
<para>Use multiple floating IP pools.</para>
</listitem>
</itemizedlist>
<para>The following sections describe these options.</para>
<section xml:id="adv_cfg_l3_agent_multi_subnet">
<title>Assign multiple subnets to an external network</title>
<para>This approach leverages the addition of on-link routes, which enables a router
to host floating IPs from any subnet on an external network regardless of which
subnet the primary router IP address comes from. This method does not require
the creation of multiple external networks.</para>
<para>To add a subnet to the external network, use the following command
template:</para>
<screen><prompt>$</prompt> <userinput>neutron subnet-create <replaceable>EXT_NETWORK_NAME</replaceable> <replaceable>CIDR</replaceable></userinput></screen>
<para>For example:</para>
<screen><prompt>$</prompt> <userinput>neutron subnet-create my-ext_network 10.0.0.0/29</userinput> </screen>
</section>
<section xml:id="adv_cfg_l3_agent_multi_floatip">
<title>Multiple floating IP pools</title>
<para>The L3 API in OpenStack Networking supports multiple floating IP pools. In
OpenStack Networking, a floating IP pool is represented as an external network
and a floating IP is allocated from a subnet associated with the external
network. Because you can associate each L3 agent with, at most, one external
network, you must invoke multiple L3 agents to define multiple floating IP
pools. Use the <option>gateway_external_network_id</option> option in the L3
agent configuration file to define the external network that the L3 agent
handles. You can run multiple L3 agent instances on one host.</para>
<para>In addition, when you run multiple L3 agents, set the
<option>handle_internal_only_routers</option> option to
<literal>True</literal> for only one L3 agent in an OpenStack Networking
deployment and set this option to <literal>False</literal> for all other L3
agents. Because the default value of this parameter is <literal>True</literal>,
you must configure it carefully.</para>
<para>Before starting L3 agents, you must create routers and external networks,
update the configuration files with UUID of external networks, and start L3
agents.</para>
<para>For the first agent, invoke it with the following
<filename>l3_agent.ini</filename>, where the
<option>handle_internal_only_routers</option> option is set to
<literal>True</literal>.</para>
<programlisting language="ini">handle_internal_only_routers = True
gateway_external_network_id = 2118b11c-011e-4fa5-a6f1-2ca34d372c35
external_network_bridge = br-ex</programlisting>
<screen><prompt>$</prompt> <userinput>python /opt/stack/neutron/bin/neutron-l3-agent
--config-file /etc/neutron/neutron.conf
--config-file=/etc/neutron/l3_agent.ini</userinput></screen>
<para>For the second (or later) agent, invoke it with the following
<filename>l3_agent.ini</filename> where the
<option>handle_internal_only_routers</option> option is set to
<literal>False</literal>.</para>
<programlisting language="ini">handle_internal_only_routers = False
gateway_external_network_id = e828e54c-850a-4e74-80a8-8b79c6a285d8
external_network_bridge = br-ex-2</programlisting>
</section>
</section>
</section>
<section xml:id="section_adv_cfg_l3_metering_agent">
<title>L3 metering agent</title>
<para>You can run an L3 metering agent that enables layer 3 traffic metering. In general,
you should launch the metering agent on all nodes that run the L3 agent:</para>
<screen><userinput>neutron-metering-agent --config-file <replaceable>NEUTRON_CONFIG_FILE</replaceable> --config-file <replaceable>L3_METERING_CONFIG_FILE</replaceable></userinput></screen>
<para>You must configure a driver that matches the plug-in that runs on the service. The
driver adds metering to the routing interface.</para>
<table rules="all">
<caption>Settings</caption>
<thead>
<tr>
<th>Option</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><emphasis role="bold">Open vSwitch</emphasis></td>
<td/>
</tr>
<tr>
<td>interface_driver ($NEUTRON_CONF_DIR/metering_agent.ini)</td>
<td>neutron.agent.linux.interface.OVSInterfaceDriver</td>
</tr>
<tr>
<td><emphasis role="bold">Linux Bridge</emphasis></td>
<td/>
</tr>
<tr>
<td>interface_driver ($NEUTRON_CONF_DIR/metering_agent.ini)</td>
<td>neutron.agent.linux.interface.BridgeInterfaceDriver</td>
</tr>
</tbody>
</table>
<section xml:id="adv_cfg_l3_metering_agent_namespace">
<title>Namespace</title>
<para>The metering agent and the L3 agent must have the same network namespaces
configuration.</para>
<note>
<para>If the Linux installation does not support network namespaces, you must
disable network namespaces in the L3 metering configuration file. The default
value of the <option>use_namespaces</option> option is <code>True</code>.</para>
</note>
<para><programlisting language="ini">use_namespaces = False</programlisting></para>
</section>
<section xml:id="adv_cfg_l3_metering_agent_driver">
<title>L3 metering driver</title>
<para>You must configure any driver that implements the metering abstraction. Currently
the only available implementation uses iptables for metering.</para>
<para><programlisting language="ini">driver = neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver</programlisting></para>
</section>
<section xml:id="adv_cfg_l3_metering_service_driver">
<title>L3 metering service driver</title>
<para>To enable L3 metering, you must set the following option in the
<filename>neutron.conf</filename> file on the host that runs <systemitem
class="service">neutron-server</systemitem>:</para>
<programlisting language="ini">service_plugins = metering</programlisting>
</section>
</section>
<section xml:id="section_limitations">
<title>Limitations</title>
<itemizedlist>
<listitem>
<para><emphasis>No equivalent for nova-network <option>--multi_host</option>
option</emphasis>. Nova-network has a model where the L3, NAT, and DHCP
processing happen on the compute node itself, rather than a dedicated networking
node. OpenStack Networking now support running multiple l3-agent and dhcp-agents
with load being split across those agents, but the tight coupling of that
scheduling with the location of the VM is not supported in Icehouse. The Juno
release is expected to include an exact replacement for the
<option>--multi_host</option> option in nova-network.</para>
</listitem>
<listitem>
<para><emphasis>Linux network namespace required on nodes running <systemitem
class="
service">neutron-l3-agent</systemitem>
or <systemitem class="
service"
>neutron-dhcp-agent</systemitem> if overlapping IPs are in
use</emphasis>. To support overlapping IP addresses, the OpenStack
Networking DHCP and L3 agents use Linux network namespaces by default. The hosts
running these processes must support network namespaces. To support network
namespaces, the following are required:</para>
<itemizedlist>
<listitem>
<para>Linux kernel 2.6.24 or later (with <literal>CONFIG_NET_NS=y</literal>
in kernel configuration)</para>
</listitem>
<listitem>
<para>iproute2 utilities ('ip' command) version 3.1.0 (aka 20111117) or
later</para>
</listitem>
</itemizedlist>
<para>To check whether your host supports namespaces, run these commands as
root:</para>
<screen><prompt>#</prompt> <userinput>ip netns add test-ns</userinput>
<prompt>#</prompt> <userinput>ip netns exec test-ns ifconfig</userinput></screen>
<para>If these commands succeed, your platform is likely sufficient to use the
dhcp-agent or l3-agent with namespaces. In our experience, Ubuntu 12.04 or later
support namespaces as does Fedora 17 and later, but some earlier RHEL platforms
do not by default. It might be possible to upgrade the <systemitem
class="service">iproute2</systemitem> package on a platform that does not
support namespaces by default.</para>
<para>If you must disable namespaces, make sure that the
<filename>neutron.conf</filename> file that is used by <systemitem class="service">neutron-server</systemitem> has the following
setting:</para>
<programlisting>allow_overlapping_ips=False</programlisting>
<para>Also, ensure that the <filename>dhcp_agent.ini</filename> and
<filename>l3_agent.ini</filename> files have the following setting:</para>
<programlisting>use_namespaces=False</programlisting>
<note>
<para>If the host does not support namespaces, the <systemitem class="service"
>neutron-l3-agent</systemitem> and <systemitem class="service"
>neutron-dhcp-agent</systemitem> should run on different hosts because
there is no isolation between the IP addresses created by the L3 agent and
by the DHCP agent. By manipulating the routing, the user can ensure that
these networks have access to one another.</para>
</note>
<para>If you run both L3 and DHCP services on the same node, you should enable
namespaces to avoid conflicts with routes:</para>
<programlisting>use_namespaces=True</programlisting>
</listitem>
<listitem>
<para><emphasis>No IPv6 support for L3 agent</emphasis>. The <systemitem
class="
service">neutron-l3-agent</systemitem>, used by
many plug-ins to implement L3 forwarding, supports only IPv4 forwarding.
Currently, there are no errors provided if you configure IPv6 addresses via the
API.</para>
</listitem>
<listitem>
<para><emphasis>ZeroMQ support is experimental</emphasis>. Some agents, including
<systemitem class="service">neutron-dhcp-agent</systemitem>, <systemitem
class="service">neutron-openvswitch-agent</systemitem>, and <systemitem
class="service">neutron-linuxbridge-agent</systemitem> use RPC to
communicate. ZeroMQ is an available option in the configuration file, but has
not been tested and should be considered experimental. In particular, issues
might occur with ZeroMQ and the dhcp agent.</para>
</listitem>
<listitem>
<para><emphasis>MetaPlugin is experimental</emphasis>. This release includes a
MetaPlugin that is intended to support multiple plug-ins at the same time for
different API requests, based on the content of those API requests. The core
team has not thoroughly reviewed or tested this functionality. Consider this
functionality to be experimental until further validation is performed.</para>
</listitem>
</itemizedlist>
</section>
</section>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="section_networking-adv-operational_features">
<title>Advanced operational features</title>
<section xml:id="section_adv_logging">
<title>Logging settings</title>
<para>Networking components use Python logging module to do
logging. Logging configuration can be provided in
<filename>neutron.conf</filename> or as command-line
options. Command options override ones in
<filename>neutron.conf</filename>.</para>
<para>To configure logging for Networking components, use one
of these methods:</para>
<itemizedlist>
<listitem>
<para>Provide logging settings in a logging
configuration file.</para>
<para>See <link xlink:href="http://docs.python.org/howto/logging.html">Python
logging how-to</link> to learn more about logging.</para>
</listitem>
<listitem>
<para>Provide logging setting in
<filename>neutron.conf</filename></para>
<programlisting language="ini">[DEFAULT]
# Default log level is WARNING
# Show debugging output in logs (sets DEBUG log level output)
# debug = False
# Show more verbose log output (sets INFO log level output) if debug is False
# verbose = False
# log_format = %(asctime)s %(levelname)8s [%(name)s] %(message)s
# log_date_format = %Y-%m-%d %H:%M:%S
# use_syslog = False
# syslog_log_facility = LOG_USER
# if use_syslog is False, we can set log_file and log_dir.
# if use_syslog is False and we do not set log_file,
# the log will be printed to stdout.
# log_file =
# log_dir =</programlisting>
</listitem>
</itemizedlist>
</section>
<section xml:id="section_adv_notification">
<title>Notifications</title>
<para>Notifications can be sent when Networking resources such
as network, subnet and port are created, updated or
deleted.</para>
<section xml:id="section_adv_notification_overview">
<title>Notification options</title>
<para>To support DHCP agent, rpc_notifier driver must be
set. To set up the notification, edit notification
options in <filename>neutron.conf</filename>:</para>
<programlisting language="ini"># ============ Notification System Options =====================
# Notifications can be sent when network/subnet/port are create, updated or deleted.
# There are three methods of sending notifications: logging (via the
# log_file directive), rpc (via a message queue) and
# noop (no notifications sent, the default)
# Notification_driver can be defined multiple times
# Do nothing driver
# notification_driver = neutron.openstack.common.notifier.no_op_notifier
# Logging driver
# notification_driver = neutron.openstack.common.notifier.log_notifier
# RPC driver
notification_driver = neutron.openstack.common.notifier.rpc_notifier
# default_notification_level is used to form actual topic names or to set logging level
# default_notification_level = INFO
# default_publisher_id is a part of the notification payload
# host = myhost.com
# default_publisher_id = $host
# Defined in rpc_notifier for rpc way, can be comma-separated values.
# The actual topic names will be %s.%(default_notification_level)s
notification_topics = notifications</programlisting>
</section>
<section xml:id="section_adv_notification_cases">
<title>Setting cases</title>
<section xml:id="section_adv_notification_cases_log_rpc">
<title>Logging and RPC</title>
<para>These options configure the Networking
server to send notifications through logging and
RPC. The logging options are described in
<citetitle
>OpenStack Configuration Reference</citetitle>
. RPC notifications go to 'notifications.info'
queue bound to a topic exchange defined by
'control_exchange' in
<filename>neutron.conf</filename>.</para>
<programlisting language="ini"># ============ Notification System Options =====================
# Notifications can be sent when network/subnet/port are create, updated or deleted.
# There are three methods of sending notifications: logging (via the
# log_file directive), rpc (via a message queue) and
# noop (no notifications sent, the default)
# Notification_driver can be defined multiple times
# Do nothing driver
# notification_driver = neutron.openstack.common.notifier.no_op_notifier
# Logging driver
notification_driver = neutron.openstack.common.notifier.log_notifier
# RPC driver
notification_driver = neutron.openstack.common.notifier.rpc_notifier
# default_notification_level is used to form actual topic names or to set logging level
default_notification_level = INFO
# default_publisher_id is a part of the notification payload
# host = myhost.com
# default_publisher_id = $host
# Defined in rpc_notifier for rpc way, can be comma-separated values.
# The actual topic names will be %s.%(default_notification_level)s
notification_topics = notifications</programlisting>
</section>
<section
xml:id="ch_adv_notification_cases_multi_rpc_topics">
<title>Multiple RPC topics</title>
<para>These options configure the Networking
server to send notifications to multiple RPC
topics. RPC notifications go to
'notifications_one.info' and
'notifications_two.info' queues bound to a topic
exchange defined by 'control_exchange' in
<filename>neutron.conf</filename>.</para>
<programlisting language="ini"># ============ Notification System Options =====================
# Notifications can be sent when network/subnet/port are create, updated or deleted.
# There are three methods of sending notifications: logging (via the
# log_file directive), rpc (via a message queue) and
# noop (no notifications sent, the default)
# Notification_driver can be defined multiple times
# Do nothing driver
# notification_driver = neutron.openstack.common.notifier.no_op_notifier
# Logging driver
# notification_driver = neutron.openstack.common.notifier.log_notifier
# RPC driver
notification_driver = neutron.openstack.common.notifier.rabbit_notifier
# default_notification_level is used to form actual topic names or to set logging level
default_notification_level = INFO
# default_publisher_id is a part of the notification payload
# host = myhost.com
# default_publisher_id = $host
# Defined in rpc_notifier for rpc way, can be comma-separated values.
# The actual topic names will be %s.%(default_notification_level)s
notification_topics = notifications_one,notifications_two</programlisting>
</section>
</section>
</section>
</section>