Cross-AZ high availability for Neutron DHCP agents

Closes-Bug: PROD-34386
Change-Id: I8f8256e31d9a07c98db01360a69fdb37648ce764
diff --git a/README.rst b/README.rst
index 188b19f..ef03f8b 100644
--- a/README.rst
+++ b/README.rst
@@ -1727,6 +1727,39 @@
           # Add key without value to remove line from policy.json
           get_bgpvpn:tenant_id:
 
+High-available cross-az DHCP agents:
+------------------------------------
+
+Control node:
+
+.. code-block:: yaml
+
+    neutron:
+      ....
+      server:
+        dhcp_load_type: networks
+        network_scheduler_driver: neutron.scheduler.dhcp_agent_scheduler.AZAwareWeightScheduler
+      ....
+
+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 4938383..dc13f82 100644
--- a/neutron/files/pike/neutron-server.conf
+++ b/neutron/files/pike/neutron-server.conf
@@ -285,6 +285,7 @@
 # dhcp_load_type=networks (string value)
 # Allowed values: networks, subnets, ports
 #dhcp_load_type = networks
+dhcp_load_type = {{ server.get('dhcp_load_type', 'networks') }}
 
 # Agent starts with admin_state_up=False when enable_new_agents=False. In the
 # case, user's resources will not be scheduled automatically to the agent until
@@ -300,6 +301,7 @@
 
 # Driver to use for scheduling network to DHCP agent (string value)
 #network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.WeightScheduler
+network_scheduler_driver = {{ server.get('network_scheduler_driver', 'neutron.scheduler.dhcp_agent_scheduler.WeightScheduler') }}
 
 # Allow auto scheduling networks to DHCP agent. (boolean value)
 #network_auto_schedule = true
diff --git a/neutron/files/queens/dhcp_agent.ini b/neutron/files/queens/dhcp_agent.ini
index bc270c8..8d72b30 100644
--- a/neutron/files/queens/dhcp_agent.ini
+++ b/neutron/files/queens/dhcp_agent.ini
@@ -159,6 +159,7 @@
 
 # Availability zone of this node (string value)
 #availability_zone = nova
+# This parameter is optional, we already passing this from neutron.conf
 {%- if neutron.get('agents', {}).get('dhcp', {}).get('agent', {}).availability_zone is defined %}
 availability_zone = {{ neutron.agents.dhcp.agent.availability_zone }}
 {%- endif %}
diff --git a/neutron/files/queens/neutron-server.conf b/neutron/files/queens/neutron-server.conf
index fbfaa61..8356251 100644
--- a/neutron/files/queens/neutron-server.conf
+++ b/neutron/files/queens/neutron-server.conf
@@ -266,6 +266,7 @@
 # subnets - <No description provided>
 # ports - <No description provided>
 #dhcp_load_type = networks
+dhcp_load_type = {{ server.get('dhcp_load_type', 'networks') }}
 
 # Agent starts with admin_state_up=False when enable_new_agents=False. In the
 # case, user's resources will not be scheduled automatically to the agent until
@@ -281,6 +282,7 @@
 
 # Driver to use for scheduling network to DHCP agent (string value)
 #network_scheduler_driver = neutron.scheduler.dhcp_agent_scheduler.WeightScheduler
+network_scheduler_driver = {{ server.get('network_scheduler_driver', 'neutron.scheduler.dhcp_agent_scheduler.WeightScheduler') }}
 
 # Allow auto scheduling networks to DHCP agent. (boolean value)
 #network_auto_schedule = true