Cross-AZ high availability for L3 routers
Closes-Bug: PROD-34390
Change-Id: I6410fb7de9d363c376439a26600810cf6453291c
diff --git a/README.rst b/README.rst
index ef03f8b..7de9c8f 100644
--- a/README.rst
+++ b/README.rst
@@ -1761,6 +1761,41 @@
availability_zone: nova
....
+High-available cross-az L3 routers:
+-----------------------------------
+
+Control node:
+
+.. code-block:: yaml
+
+ neutron:
+ ....
+ server:
+ router_scheduler_driver: neutron.scheduler.l3_agent_scheduler.AZLeastRoutersScheduler
+ max_l3_agents_per_router: '3'
+ ....
+
+Network/Gateway node:
+
+.. code-block:: yaml
+
+ neutron:
+ ....
+ gateway:
+ availability_zone: nova
+ ....
+
+Compute node:
+
+.. code-block:: yaml
+
+ neutron:
+ ....
+ compute:
+ availability_zone: nova
+ ....
+
+
Set nova_metadata_protocol for Neutron
---------------------------------------
diff --git a/neutron/files/pike/neutron-server.conf b/neutron/files/pike/neutron-server.conf
index dc13f82..5195503 100644
--- a/neutron/files/pike/neutron-server.conf
+++ b/neutron/files/pike/neutron-server.conf
@@ -350,7 +350,7 @@
# Driver to use for scheduling router to a default L3 agent (string value)
#router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.LeastRoutersScheduler
-router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.ChanceScheduler
+router_scheduler_driver = {{ server.get('router_scheduler_driver', 'neutron.scheduler.l3_agent_scheduler.ChanceScheduler') }}
# Allow auto scheduling of routers to L3 agent. (boolean value)
#router_auto_schedule = true
@@ -367,20 +367,27 @@
# 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. (integer value)
#max_l3_agents_per_router = 3
-max_l3_agents_per_router = 0
+max_l3_agents_per_router = {{ server.get('max_l3_agents_per_router', '0') }}
# Subnet used for the l3 HA admin network. (string value)
#l3_ha_net_cidr = 169.254.192.0/18
+l3_ha_net_cidr = {{ server.get('l3_ha_net_cidr', '169.254.192.0/18') }}
# The network type to use when creating the HA network for an HA router. By
# default or if empty, the first 'tenant_network_types' is used. This is
# helpful when the VRRP traffic should use a specific network which is not the
# default one. (string value)
#l3_ha_network_type =
+{%- if server.l3_ha_network_type is defined %}
+l3_ha_network_type = {{ server.l3_ha_network_type }}
+{%- endif %}
# The physical network name with which the HA network can be created. (string
# value)
#l3_ha_network_physical_name =
+{%- if server.l3_ha_network_physical_name is defined %}
+l3_ha_network_physical_name = {{ server.l3_ha_network_physical_name }}
+{%- endif %}
#
# From neutron.extensions
diff --git a/neutron/files/queens/neutron-server.conf b/neutron/files/queens/neutron-server.conf
index 8356251..d85cea0 100644
--- a/neutron/files/queens/neutron-server.conf
+++ b/neutron/files/queens/neutron-server.conf
@@ -336,7 +336,7 @@
# Driver to use for scheduling router to a default L3 agent (string value)
#router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.LeastRoutersScheduler
-router_scheduler_driver = neutron.scheduler.l3_agent_scheduler.ChanceScheduler
+router_scheduler_driver = {{ server.get('router_scheduler_driver', 'neutron.scheduler.l3_agent_scheduler.ChanceScheduler') }}
# Allow auto scheduling of routers to L3 agent. (boolean value)
#router_auto_schedule = true
@@ -353,20 +353,27 @@
# 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. (integer value)
#max_l3_agents_per_router = 3
-max_l3_agents_per_router = 0
+max_l3_agents_per_router = {{ server.get('max_l3_agents_per_router', '0') }}
# Subnet used for the l3 HA admin network. (string value)
#l3_ha_net_cidr = 169.254.192.0/18
+l3_ha_net_cidr = {{ server.get('l3_ha_net_cidr', '169.254.192.0/18') }}
# The network type to use when creating the HA network for an HA router. By
# default or if empty, the first 'tenant_network_types' is used. This is
# helpful when the VRRP traffic should use a specific network which is not the
# default one. (string value)
#l3_ha_network_type =
+{%- if server.l3_ha_network_type is defined %}
+l3_ha_network_type = {{ server.l3_ha_network_type }}
+{%- endif %}
# The physical network name with which the HA network can be created. (string
# value)
#l3_ha_network_physical_name =
+{%- if server.l3_ha_network_physical_name is defined %}
+l3_ha_network_physical_name = {{ server.l3_ha_network_physical_name }}
+{%- endif %}
#
# From neutron.extensions