Add option to disable DHCP on gateway nodes
Related-Prod: PROD-30105

Change-Id: I0df5de0f7a4a8deed1eccb66e1c43395a23452ea
diff --git a/README.rst b/README.rst
index 8986c63..b48e194 100644
--- a/README.rst
+++ b/README.rst
@@ -945,6 +945,17 @@
         dhcp_agent_enabled: true
       ....
 
+Neutron with DHCP agent disabled on gateway node
+------------------------------------------------
+
+.. code-block:: yaml
+
+    neutron:
+      ....
+      gateway:
+        dhcp_agent_enabled: false
+      ....
+
 Neutron with metadata agent on compute node
 -------------------------------------------
 
diff --git a/neutron/gateway.sls b/neutron/gateway.sls
index 61b4372..b1b61f7 100644
--- a/neutron/gateway.sls
+++ b/neutron/gateway.sls
@@ -83,6 +83,7 @@
 {%- endif %}
 {%- endif %}
 
+{% if gateway.get('dhcp_agent_enabled', True) %}
 /etc/neutron/dhcp_agent.ini:
   file.managed:
   - source: salt://neutron/files/{{ gateway.version }}/dhcp_agent.ini
@@ -91,6 +92,7 @@
   - template: jinja
   - require:
     - pkg: neutron_gateway_packages
+{%- endif %}
 
 /etc/neutron/metadata_agent.ini:
   file.managed:
@@ -176,7 +178,9 @@
   - watch:
     - file: /etc/neutron/neutron.conf
     - file: /etc/neutron/metadata_agent.ini
+    {% if gateway.get('dhcp_agent_enabled', True) %}
     - file: /etc/neutron/dhcp_agent.ini
+    {%- endif %}
     {%- if gateway.opendaylight is not defined %}
     - file: /etc/neutron/l3_agent.ini
     {%- if gateway.backend.get('mechanism', {}).get('lb', {}).get('driver', {}) == "linuxbridge" %}
diff --git a/neutron/map.jinja b/neutron/map.jinja
index 8312d13..9e6cb36 100644
--- a/neutron/map.jinja
+++ b/neutron/map.jinja
@@ -72,8 +72,14 @@
 
 {%- set opendaylight_enabled = pillar.neutron.gateway is defined and pillar.neutron.gateway.opendaylight is defined %}
 {%- set linuxbridge_enabled = pillar.neutron.gateway is defined and pillar.neutron.gateway.get('backend', {}).get('mechanism', {}).get('lb', {}).get('driver', {}) == "linuxbridge" %}
-{%- set pkgs_list = ['neutron-dhcp-agent', 'neutron-metadata-agent'] %}
-{%- set services_list = ['neutron-metadata-agent', 'neutron-dhcp-agent'] %}
+{%- set dhcp_enabled = pillar.neutron.gateway is defined and pillar.neutron.gateway.get('dhcp_agent_enabled', True) %}
+{%- set pkgs_list = ['neutron-metadata-agent'] %}
+
+{%- set services_list = ['neutron-metadata-agent'] %}
+{%- if dhcp_enabled %}
+{%- do pkgs_list.extend(['neutron-dhcp-agent']) %}
+{%- do services_list.extend(['neutron-dhcp-agent']) %}
+{%- endif %}
 {%- if linuxbridge_enabled %}
 {%- do pkgs_list.extend(['neutron-linuxbridge-agent', 'neutron-l3-agent']) %}
 {%- do services_list.extend(['neutron-linuxbridge-agent', 'neutron-l3-agent']) %}