Merge "Handle the hardcoded configuration values"
diff --git a/README.rst b/README.rst
index b48e194..2ef3f49 100644
--- a/README.rst
+++ b/README.rst
@@ -1649,6 +1649,46 @@
           workers: 64
           logto: /var/log/neutron/neutron-server.log
 
+Setup hardcoded configuration values
+------------------------------------
+
+.. code-block:: yaml
+
+    neutron:
+      server:
+        configmap:
+          neutron_server:
+            DEFAULT:
+              max_subnet_host_routes: 30
+              max_routes: 60
+              debug_iptables_rules: True
+            quotas:
+              quota_network: 20
+              quota_subnet: 10
+              quota_port: 100
+            matchmaker_redis:
+              host: 127.0.0.1
+              port: 6379
+              password: pswd
+      gateway:
+        configmap:
+          metadata_agent:
+            DEFAULT:
+              metadata_workers: 10
+              debug: True
+            agent:
+              report_interval: 30
+          l3_agent:
+            DEFAULT:
+              agent_mode : dvr
+            agent:
+              report_interval: 40
+          dhcp_agent:
+            DEFAULT:
+              ovs_vsctl_timeout: 12
+              resync_interval: 60
+            agent:
+              report_interval: 60
 
 Upgrades
 ========
diff --git a/neutron/files/ocata/dhcp_agent.ini b/neutron/files/ocata/dhcp_agent.ini
index d327e64..4105700 100644
--- a/neutron/files/ocata/dhcp_agent.ini
+++ b/neutron/files/ocata/dhcp_agent.ini
@@ -1,3 +1,8 @@
+{%- if pillar.neutron.gateway is defined %}
+{%- from "neutron/map.jinja" import gateway as neutron with context %}
+{%- else %}
+{%- from "neutron/map.jinja" import compute as neutron with context %}
+{%- endif %}
 [DEFAULT]
 
 #
@@ -198,3 +203,7 @@
 # ovsdb_interface is enabled (string value)
 #ovsdb_connection = tcp:127.0.0.1:6640
 
+{%- if neutron.get('configmap', {}).dhcp_agent is defined %}
+{%- set _data = neutron.configmap.dhcp_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/fwaas_driver.ini b/neutron/files/ocata/fwaas_driver.ini
index 40442a4..a19bf81 100644
--- a/neutron/files/ocata/fwaas_driver.ini
+++ b/neutron/files/ocata/fwaas_driver.ini
@@ -23,3 +23,8 @@
 # Name of the FWaaS Conntrack Driver (string value)
 #conntrack_driver = conntrack
 conntrack_driver = {{ fwaas.get('conntrack_driver', 'conntrack') }}
+
+{%- if fwaas.configmap is defined %}
+{%- set _data = fwaas.configmap %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/l3_agent.ini b/neutron/files/ocata/l3_agent.ini
index 4c3c5cb..ab7d02e 100644
--- a/neutron/files/ocata/l3_agent.ini
+++ b/neutron/files/ocata/l3_agent.ini
@@ -327,3 +327,8 @@
 # when monitoring and used for the all ovsdb commands when native
 # ovsdb_interface is enabled (string value)
 #ovsdb_connection = tcp:127.0.0.1:6640
+
+{%- if neutron.get('configmap', {}).l3_agent is defined %}
+{%- set _data = neutron.configmap.l3_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/linuxbridge_agent.ini b/neutron/files/ocata/linuxbridge_agent.ini
index 43532f4..45db17e 100644
--- a/neutron/files/ocata/linuxbridge_agent.ini
+++ b/neutron/files/ocata/linuxbridge_agent.ini
@@ -263,3 +263,8 @@
 # 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 neutron.get('configmap', {}).linuxbridge_agent is defined %}
+{%- set _data = neutron.configmap.linuxbridge_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/metadata_agent.ini b/neutron/files/ocata/metadata_agent.ini
index d846630..71aadb8 100644
--- a/neutron/files/ocata/metadata_agent.ini
+++ b/neutron/files/ocata/metadata_agent.ini
@@ -281,3 +281,8 @@
 # Number of seconds that an operation will wait to get a memcache client
 # connection. (integer value)
 #memcache_pool_connection_get_timeout = 10
+
+{%- if neutron.get('configmap', {}).metadata_agent is defined %}
+{%- set _data = neutron.configmap.metadata_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/ml2_conf.ini b/neutron/files/ocata/ml2_conf.ini
index ab67788..224637c 100644
--- a/neutron/files/ocata/ml2_conf.ini
+++ b/neutron/files/ocata/ml2_conf.ini
@@ -364,3 +364,8 @@
 ovn_sb_connection = tcp:{{ server.controller_vip }}:6642
 ovn_l3_scheduler = leastloaded
 {%- endif %}
+
+{%- if server.get('configmap', {}).ml2 is defined %}
+{%- set _data = server.configmap.ml2 %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/neutron-generic.conf b/neutron/files/ocata/neutron-generic.conf
index 403b3ce..48baf54 100644
--- a/neutron/files/ocata/neutron-generic.conf
+++ b/neutron/files/ocata/neutron-generic.conf
@@ -2102,3 +2102,8 @@
 # Sets the list of available ciphers. value should be a string in the OpenSSL
 # cipher list format. (string value)
 #ciphers = <None>
+
+{%- if neutron.get('configmap', {}).neutron_generic is defined %}
+{%- set _data = neutron.configmap.neutron_generic %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/neutron-server.conf b/neutron/files/ocata/neutron-server.conf
index 56494f5..98b5e2d 100644
--- a/neutron/files/ocata/neutron-server.conf
+++ b/neutron/files/ocata/neutron-server.conf
@@ -2274,3 +2274,8 @@
 password = {{ server.identity.password }}
 auth_url=http://{{ server.identity.host }}:35357
 {%- endif %}
+
+{%- if server.get('configmap', {}).neutron_server is defined %}
+{%- set _data = server.configmap.neutron_server %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/openvswitch_agent.ini b/neutron/files/ocata/openvswitch_agent.ini
index fa94c21..e72aa41 100644
--- a/neutron/files/ocata/openvswitch_agent.ini
+++ b/neutron/files/ocata/openvswitch_agent.ini
@@ -358,3 +358,8 @@
 
 # Password for connection to XenServer/Xen Cloud Platform. (string value)
 #connection_password = <None>
+
+{%- if neutron.get('configmap', {}).openvswitch_agent is defined %}
+{%- set _data = neutron.configmap.openvswitch_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/ocata/sriov_agent.ini b/neutron/files/ocata/sriov_agent.ini
index 3947dec..98fa4fb 100644
--- a/neutron/files/ocata/sriov_agent.ini
+++ b/neutron/files/ocata/sriov_agent.ini
@@ -158,3 +158,8 @@
 [securitygroup]
 firewall_driver = neutron.agent.firewall.NoopFirewallDriver
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).sriov_agent is defined %}
+{%- set _data = neutron.configmap.sriov_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/bagpipe-bgp.conf b/neutron/files/pike/bagpipe-bgp.conf
index 253191b..1cc3e5c 100644
--- a/neutron/files/pike/bagpipe-bgp.conf
+++ b/neutron/files/pike/bagpipe-bgp.conf
@@ -106,4 +106,9 @@
 # we will use to send)
 # Note: does not need to be specified if different than the BGP local_address
 # dataplane_local_address=eth1
-# dataplane_local_address=1.2.3.4
\ No newline at end of file
+# dataplane_local_address=1.2.3.4
+
+{%- if compute.get('configmap', {}).bagpipe_bgp is defined %}
+{%- set _data = compute.configmap.bagpipe_bgp %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/dhcp_agent.ini b/neutron/files/pike/dhcp_agent.ini
index cbc5b2a..907677b 100644
--- a/neutron/files/pike/dhcp_agent.ini
+++ b/neutron/files/pike/dhcp_agent.ini
@@ -239,3 +239,7 @@
 # ovsdb_interface is enabled (string value)
 #ovsdb_connection = tcp:127.0.0.1:6640
 
+{%- if neutron.get('configmap', {}).dhcp_agent is defined %}
+{%- set _data = neutron.configmap.dhcp_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/fwaas_driver.ini b/neutron/files/pike/fwaas_driver.ini
index 40442a4..a19bf81 100644
--- a/neutron/files/pike/fwaas_driver.ini
+++ b/neutron/files/pike/fwaas_driver.ini
@@ -23,3 +23,8 @@
 # Name of the FWaaS Conntrack Driver (string value)
 #conntrack_driver = conntrack
 conntrack_driver = {{ fwaas.get('conntrack_driver', 'conntrack') }}
+
+{%- if fwaas.configmap is defined %}
+{%- set _data = fwaas.configmap %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/l2gw/l2gateway_agent.ini b/neutron/files/pike/l2gw/l2gateway_agent.ini
index 59a62fb..3d9284c 100644
--- a/neutron/files/pike/l2gw/l2gateway_agent.ini
+++ b/neutron/files/pike/l2gw/l2gateway_agent.ini
@@ -66,3 +66,8 @@
 # safely assume that the connection with the remote OVSDB server is lost.
 socket_timeout = {{ gateway.l2gw.socket_timeout|default('30') }}
 # Example: socket_timeout = 30
+
+{%- if gateway.get('configmap', {}).l2gateway_agent is defined %}
+{%- set _data = gateway.configmap.l2gateway_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/l2gw/l2gw_plugin.ini b/neutron/files/pike/l2gw/l2gw_plugin.ini
index 8ea1bd7..9fe2895 100644
--- a/neutron/files/pike/l2gw/l2gw_plugin.ini
+++ b/neutron/files/pike/l2gw/l2gw_plugin.ini
@@ -24,3 +24,8 @@
 # Combination of <service type> and <name> must be unique; <driver> must also be unique
 # This is multiline option
 service_provider = {{ server.l2gw.service_provider|default('L2GW:l2gw:networking_l2gw.services.l2gateway.service_drivers.rpc_l2gw.L2gwRpcDriver:default') }}
+
+{%- if server.get('configmap', {}).l2gw_plugin is defined %}
+{%- set _data = server.configmap.l2gw_plugin %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/l3_agent.ini b/neutron/files/pike/l3_agent.ini
index a1e58bb..210ba3d 100644
--- a/neutron/files/pike/l3_agent.ini
+++ b/neutron/files/pike/l3_agent.ini
@@ -330,3 +330,8 @@
 # when monitoring and used for the all ovsdb commands when native
 # ovsdb_interface is enabled (string value)
 #ovsdb_connection = tcp:127.0.0.1:6640
+
+{%- if neutron.get('configmap', {}).l3_agent is defined %}
+{%- set _data = neutron.configmap.l3_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/linuxbridge_agent.ini b/neutron/files/pike/linuxbridge_agent.ini
index 43532f4..45db17e 100644
--- a/neutron/files/pike/linuxbridge_agent.ini
+++ b/neutron/files/pike/linuxbridge_agent.ini
@@ -263,3 +263,8 @@
 # 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 neutron.get('configmap', {}).linuxbridge_agent is defined %}
+{%- set _data = neutron.configmap.linuxbridge_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/metadata_agent.ini b/neutron/files/pike/metadata_agent.ini
index d846630..71aadb8 100644
--- a/neutron/files/pike/metadata_agent.ini
+++ b/neutron/files/pike/metadata_agent.ini
@@ -281,3 +281,8 @@
 # Number of seconds that an operation will wait to get a memcache client
 # connection. (integer value)
 #memcache_pool_connection_get_timeout = 10
+
+{%- if neutron.get('configmap', {}).metadata_agent is defined %}
+{%- set _data = neutron.configmap.metadata_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/ml2_conf.ini b/neutron/files/pike/ml2_conf.ini
index 17818ee..b705689 100644
--- a/neutron/files/pike/ml2_conf.ini
+++ b/neutron/files/pike/ml2_conf.ini
@@ -385,3 +385,8 @@
 # Service. (boolean value)
 enable_dhcp_service = {{ server.backend.enable_dhcp_service|default('false') }}
 {%- endif %}
+
+{%- if server.get('configmap', {}).ml2 is defined %}
+{%- set _data = server.configmap.ml2 %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/neutron-generic.conf b/neutron/files/pike/neutron-generic.conf
index 96d66ba..b93d3d4 100644
--- a/neutron/files/pike/neutron-generic.conf
+++ b/neutron/files/pike/neutron-generic.conf
@@ -2132,3 +2132,8 @@
 {%- if neutron.backend.ovsdb_connection is defined %}
 ovsdb_connection = {{ neutron.backend.ovsdb_connection }}
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).neutron_generic is defined %}
+{%- set _data = neutron.configmap.neutron_generic %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/neutron-server.conf b/neutron/files/pike/neutron-server.conf
index 5cccb0f..f926192 100644
--- a/neutron/files/pike/neutron-server.conf
+++ b/neutron/files/pike/neutron-server.conf
@@ -2381,3 +2381,8 @@
 {% if server.n_g_s is defined  -%}
 {%- include "neutron/files/pike/plugins/_n_g_s.conf" %}
 {% endif %}
+
+{%- if server.get('configmap', {}).neutron_server is defined %}
+{%- set _data = server.configmap.neutron_server %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/openvswitch_agent.ini b/neutron/files/pike/openvswitch_agent.ini
index 5c3545c..19ade98 100644
--- a/neutron/files/pike/openvswitch_agent.ini
+++ b/neutron/files/pike/openvswitch_agent.ini
@@ -385,3 +385,8 @@
 
 # Password for connection to XenServer/Xen Cloud Platform. (string value)
 #connection_password = <None>
+
+{%- if neutron.get('configmap', {}).openvswitch_agent is defined %}
+{%- set _data = neutron.configmap.openvswitch_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/pike/sriov_agent.ini b/neutron/files/pike/sriov_agent.ini
index 734c7bd..c0d26c9 100644
--- a/neutron/files/pike/sriov_agent.ini
+++ b/neutron/files/pike/sriov_agent.ini
@@ -163,3 +163,8 @@
 [securitygroup]
 firewall_driver = neutron.agent.firewall.NoopFirewallDriver
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).sriov_agent is defined %}
+{%- set _data = neutron.configmap.sriov_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/bagpipe-bgp.conf b/neutron/files/queens/bagpipe-bgp.conf
index 253191b..1cc3e5c 100644
--- a/neutron/files/queens/bagpipe-bgp.conf
+++ b/neutron/files/queens/bagpipe-bgp.conf
@@ -106,4 +106,9 @@
 # we will use to send)
 # Note: does not need to be specified if different than the BGP local_address
 # dataplane_local_address=eth1
-# dataplane_local_address=1.2.3.4
\ No newline at end of file
+# dataplane_local_address=1.2.3.4
+
+{%- if compute.get('configmap', {}).bagpipe_bgp is defined %}
+{%- set _data = compute.configmap.bagpipe_bgp %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/dhcp_agent.ini b/neutron/files/queens/dhcp_agent.ini
index 1c0ff9a..dab89ad 100644
--- a/neutron/files/queens/dhcp_agent.ini
+++ b/neutron/files/queens/dhcp_agent.ini
@@ -214,3 +214,8 @@
 # will fail with ALARMCLOCK error. (integer value)
 # Deprecated group/name - [DEFAULT]/ovs_vsctl_timeout
 #ovsdb_timeout = 10
+
+{%- if neutron.get('configmap', {}).dhcp_agent is defined %}
+{%- set _data = neutron.configmap.dhcp_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/l2gw/l2gateway_agent.ini b/neutron/files/queens/l2gw/l2gateway_agent.ini
index 59a62fb..3d9284c 100644
--- a/neutron/files/queens/l2gw/l2gateway_agent.ini
+++ b/neutron/files/queens/l2gw/l2gateway_agent.ini
@@ -66,3 +66,8 @@
 # safely assume that the connection with the remote OVSDB server is lost.
 socket_timeout = {{ gateway.l2gw.socket_timeout|default('30') }}
 # Example: socket_timeout = 30
+
+{%- if gateway.get('configmap', {}).l2gateway_agent is defined %}
+{%- set _data = gateway.configmap.l2gateway_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/l2gw/l2gw_plugin.ini b/neutron/files/queens/l2gw/l2gw_plugin.ini
index 8ea1bd7..9fe2895 100644
--- a/neutron/files/queens/l2gw/l2gw_plugin.ini
+++ b/neutron/files/queens/l2gw/l2gw_plugin.ini
@@ -24,3 +24,8 @@
 # Combination of <service type> and <name> must be unique; <driver> must also be unique
 # This is multiline option
 service_provider = {{ server.l2gw.service_provider|default('L2GW:l2gw:networking_l2gw.services.l2gateway.service_drivers.rpc_l2gw.L2gwRpcDriver:default') }}
+
+{%- if server.get('configmap', {}).l2gw_plugin is defined %}
+{%- set _data = server.configmap.l2gw_plugin %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/l3_agent.ini b/neutron/files/queens/l3_agent.ini
index b6f1960..339ab04 100644
--- a/neutron/files/queens/l3_agent.ini
+++ b/neutron/files/queens/l3_agent.ini
@@ -259,3 +259,8 @@
 # will fail with ALARMCLOCK error. (integer value)
 # Deprecated group/name - [DEFAULT]/ovs_vsctl_timeout
 #ovsdb_timeout = 10
+
+{%- if neutron.get('configmap', {}).l3_agent is defined %}
+{%- set _data = neutron.configmap.l3_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/linuxbridge_agent.ini b/neutron/files/queens/linuxbridge_agent.ini
index ceeb868..c0f04d3 100644
--- a/neutron/files/queens/linuxbridge_agent.ini
+++ b/neutron/files/queens/linuxbridge_agent.ini
@@ -290,3 +290,8 @@
 # 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 neutron.get('configmap', {}).linuxbridge_agent is defined %}
+{%- set _data = neutron.configmap.linuxbridge_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/metadata_agent.ini b/neutron/files/queens/metadata_agent.ini
index 20ca19c..fcee7ab 100644
--- a/neutron/files/queens/metadata_agent.ini
+++ b/neutron/files/queens/metadata_agent.ini
@@ -101,3 +101,8 @@
 {%- set _data = neutron.cache %}
 {%- include "oslo_templates/files/queens/oslo/_cache.conf" %}
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).metadata_agent is defined %}
+{%- set _data = neutron.configmap.metadata_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/ml2_conf.ini b/neutron/files/queens/ml2_conf.ini
index bb2f126..bb5b1b3 100644
--- a/neutron/files/queens/ml2_conf.ini
+++ b/neutron/files/queens/ml2_conf.ini
@@ -286,3 +286,8 @@
 # Service. (boolean value)
 enable_dhcp_service = {{ server.backend.enable_dhcp_service|default('false') }}
 {%- endif %}
+
+{%- if server.get('configmap', {}).ml2 is defined %}
+{%- set _data = server.configmap.ml2 %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/neutron-generic.conf b/neutron/files/queens/neutron-generic.conf
index 08b1fff..b1bb084 100644
--- a/neutron/files/queens/neutron-generic.conf
+++ b/neutron/files/queens/neutron-generic.conf
@@ -525,3 +525,8 @@
 {%- if neutron.backend.ovsdb_connection is defined %}
 ovsdb_connection = {{ neutron.backend.ovsdb_connection }}
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).neutron_generic is defined %}
+{%- set _data = neutron.configmap.neutron_generic %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/neutron-server.conf b/neutron/files/queens/neutron-server.conf
index 7aa7e4e..63a9c46 100644
--- a/neutron/files/queens/neutron-server.conf
+++ b/neutron/files/queens/neutron-server.conf
@@ -619,3 +619,8 @@
 {% if server.n_g_s is defined  -%}
 {%- include "neutron/files/queens/plugins/_n_g_s.conf" %}
 {% endif %}
+
+{%- if server.get('configmap', {}).neutron_server is defined %}
+{%- set _data = server.configmap.neutron_server %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/openvswitch_agent.ini b/neutron/files/queens/openvswitch_agent.ini
index 39a07cb..d642dec 100644
--- a/neutron/files/queens/openvswitch_agent.ini
+++ b/neutron/files/queens/openvswitch_agent.ini
@@ -305,3 +305,8 @@
 
 # Password for connection to XenServer/Xen Cloud Platform. (string value)
 #connection_password = <None>
+
+{%- if neutron.get('configmap', {}).openvswitch_agent is defined %}
+{%- set _data = neutron.configmap.openvswitch_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/ovn/metadata-agent.ini b/neutron/files/queens/ovn/metadata-agent.ini
index 8a65292..3a1e3a1 100644
--- a/neutron/files/queens/ovn/metadata-agent.ini
+++ b/neutron/files/queens/ovn/metadata-agent.ini
@@ -95,3 +95,8 @@
 [ovn]
 
 ovn_sb_connection = tcp:{{ compute.controller_vip }}:6642
+
+{%- if compute.get('configmap', {}).get('ovn', {}).metadata_agent is defined %}
+{%- set _data = compute.configmap.ovn.metadata_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/queens/sriov_agent.ini b/neutron/files/queens/sriov_agent.ini
index 734c7bd..c0d26c9 100644
--- a/neutron/files/queens/sriov_agent.ini
+++ b/neutron/files/queens/sriov_agent.ini
@@ -163,3 +163,8 @@
 [securitygroup]
 firewall_driver = neutron.agent.firewall.NoopFirewallDriver
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).sriov_agent is defined %}
+{%- set _data = neutron.configmap.sriov_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/bagpipe-bgp.conf b/neutron/files/rocky/bagpipe-bgp.conf
index d4f8b5c..3338f9b 100644
--- a/neutron/files/rocky/bagpipe-bgp.conf
+++ b/neutron/files/rocky/bagpipe-bgp.conf
@@ -106,4 +106,9 @@
 # we will use to send)
 # Note: does not need to be specified if different than the BGP local_address
 # dataplane_local_address=eth1
-# dataplane_local_address=1.2.3.4
\ No newline at end of file
+# dataplane_local_address=1.2.3.4
+
+{%- if compute.get('configmap', {}).bagpipe_bgp is defined %}
+{%- set _data = compute.configmap.bagpipe_bgp %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/dhcp_agent.ini b/neutron/files/rocky/dhcp_agent.ini
index 9c5a739..c915c23 100644
--- a/neutron/files/rocky/dhcp_agent.ini
+++ b/neutron/files/rocky/dhcp_agent.ini
@@ -214,3 +214,8 @@
 # Neutron OVS agent. Values outside a reasonable range (10 to 1,000,000) might
 # be overridden by Open vSwitch according to the documentation. (integer value)
 #bridge_mac_table_size = 50000
+
+{%- if neutron.get('configmap', {}).dhcp_agent is defined %}
+{%- set _data = neutron.configmap.dhcp_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/l2gw/l2gateway_agent.ini b/neutron/files/rocky/l2gw/l2gateway_agent.ini
index 59a62fb..3d9284c 100644
--- a/neutron/files/rocky/l2gw/l2gateway_agent.ini
+++ b/neutron/files/rocky/l2gw/l2gateway_agent.ini
@@ -66,3 +66,8 @@
 # safely assume that the connection with the remote OVSDB server is lost.
 socket_timeout = {{ gateway.l2gw.socket_timeout|default('30') }}
 # Example: socket_timeout = 30
+
+{%- if gateway.get('configmap', {}).l2gateway_agent is defined %}
+{%- set _data = gateway.configmap.l2gateway_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/l2gw/l2gw_plugin.ini b/neutron/files/rocky/l2gw/l2gw_plugin.ini
index 8ea1bd7..9fe2895 100644
--- a/neutron/files/rocky/l2gw/l2gw_plugin.ini
+++ b/neutron/files/rocky/l2gw/l2gw_plugin.ini
@@ -24,3 +24,8 @@
 # Combination of <service type> and <name> must be unique; <driver> must also be unique
 # This is multiline option
 service_provider = {{ server.l2gw.service_provider|default('L2GW:l2gw:networking_l2gw.services.l2gateway.service_drivers.rpc_l2gw.L2gwRpcDriver:default') }}
+
+{%- if server.get('configmap', {}).l2gw_plugin is defined %}
+{%- set _data = server.configmap.l2gw_plugin %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/l3_agent.ini b/neutron/files/rocky/l3_agent.ini
index 1cb9ad4..9a7b147 100644
--- a/neutron/files/rocky/l3_agent.ini
+++ b/neutron/files/rocky/l3_agent.ini
@@ -258,3 +258,8 @@
 # Neutron OVS agent. Values outside a reasonable range (10 to 1,000,000) might
 # be overridden by Open vSwitch according to the documentation. (integer value)
 #bridge_mac_table_size = 50000
+
+{%- if neutron.get('configmap', {}).l3_agent is defined %}
+{%- set _data = neutron.configmap.l3_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/linuxbridge_agent.ini b/neutron/files/rocky/linuxbridge_agent.ini
index 17f1a15..ad6e34f 100644
--- a/neutron/files/rocky/linuxbridge_agent.ini
+++ b/neutron/files/rocky/linuxbridge_agent.ini
@@ -215,3 +215,8 @@
 # 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 neutron.get('configmap', {}).linuxbridge_agent is defined %}
+{%- set _data = neutron.configmap.linuxbridge_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/metadata_agent.ini b/neutron/files/rocky/metadata_agent.ini
index dadb500..17d1640 100644
--- a/neutron/files/rocky/metadata_agent.ini
+++ b/neutron/files/rocky/metadata_agent.ini
@@ -104,3 +104,8 @@
 {%- set _data = neutron.cache %}
 {%- include "oslo_templates/files/" ~ neutron.version ~ "/oslo/_cache.conf" %}
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).metadata_agent is defined %}
+{%- set _data = neutron.configmap.metadata_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/ml2_conf.ini b/neutron/files/rocky/ml2_conf.ini
index 48ad7df..a9a598f 100644
--- a/neutron/files/rocky/ml2_conf.ini
+++ b/neutron/files/rocky/ml2_conf.ini
@@ -262,3 +262,8 @@
 # Service. (boolean value)
 enable_dhcp_service = {{ server.backend.enable_dhcp_service|default('false') }}
 {%- endif %}
+
+{%- if server.get('configmap', {}).ml2 is defined %}
+{%- set _data = server.configmap.ml2 %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/neutron-generic.conf b/neutron/files/rocky/neutron-generic.conf
index 08fa9b4..35c22d5 100644
--- a/neutron/files/rocky/neutron-generic.conf
+++ b/neutron/files/rocky/neutron-generic.conf
@@ -504,3 +504,8 @@
 {%- if neutron.backend.ovsdb_connection is defined %}
 ovsdb_connection = {{ neutron.backend.ovsdb_connection }}
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).neutron_generic is defined %}
+{%- set _data = neutron.configmap.neutron_generic %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/neutron-server.conf b/neutron/files/rocky/neutron-server.conf
index 97ed365..51b99b7 100644
--- a/neutron/files/rocky/neutron-server.conf
+++ b/neutron/files/rocky/neutron-server.conf
@@ -638,3 +638,8 @@
 {% if server.sfc is defined -%}
 {%- include "neutron/files/" ~ server.version ~ "/plugins/sfc.conf" %}
 {% endif %}
+
+{%- if server.get('configmap', {}).neutron_server is defined %}
+{%- set _data = server.configmap.neutron_server %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/openvswitch_agent.ini b/neutron/files/rocky/openvswitch_agent.ini
index 47a199e..957af4c 100644
--- a/neutron/files/rocky/openvswitch_agent.ini
+++ b/neutron/files/rocky/openvswitch_agent.ini
@@ -307,3 +307,8 @@
 
 # Password for connection to XenServer/Xen Cloud Platform. (string value)
 #connection_password = <None>
+
+{%- if neutron.get('configmap', {}).openvswitch_agent is defined %}
+{%- set _data = neutron.configmap.openvswitch_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/ovn/metadata-agent.ini b/neutron/files/rocky/ovn/metadata-agent.ini
index 8a65292..3a1e3a1 100644
--- a/neutron/files/rocky/ovn/metadata-agent.ini
+++ b/neutron/files/rocky/ovn/metadata-agent.ini
@@ -95,3 +95,8 @@
 [ovn]
 
 ovn_sb_connection = tcp:{{ compute.controller_vip }}:6642
+
+{%- if compute.get('configmap', {}).get('ovn', {}).metadata_agent is defined %}
+{%- set _data = compute.configmap.ovn.metadata_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/neutron/files/rocky/sriov_agent.ini b/neutron/files/rocky/sriov_agent.ini
index 388cec4..6956247 100644
--- a/neutron/files/rocky/sriov_agent.ini
+++ b/neutron/files/rocky/sriov_agent.ini
@@ -57,3 +57,8 @@
 [securitygroup]
 firewall_driver = noop
 {%- endif %}
+
+{%- if neutron.get('configmap', {}).sriov_agent is defined %}
+{%- set _data = neutron.configmap.sriov_agent %}
+{%- include "oslo_templates/files/configmap/configmap.conf" %}
+{%- endif %}
diff --git a/tests/pillar/control_cluster.sls b/tests/pillar/control_cluster.sls
index e8cf760..7e0628d 100644
--- a/tests/pillar/control_cluster.sls
+++ b/tests/pillar/control_cluster.sls
@@ -79,3 +79,17 @@
         enabled: true
         strategy: ENCRYPT
         secret_key: secret
+    configmap:
+      neutron_server:
+        DEFAULT:
+          max_subnet_host_routes: 30
+          max_routes: 60
+          debug_iptables_rules: True
+        quotas:
+          quota_network: 20
+          quota_subnet: 10
+          quota_port: 100
+        matchmaker_redis:
+          host: 127.0.0.1
+          port: 6379
+          password: pswd
diff --git a/tests/pillar/gateway_legacy.sls b/tests/pillar/gateway_legacy.sls
index 5776d69..aa65179 100644
--- a/tests/pillar/gateway_legacy.sls
+++ b/tests/pillar/gateway_legacy.sls
@@ -28,3 +28,21 @@
     agents:
       dhcp:
         ovs_use_veth: True
+    configmap:
+      metadata_agent:
+        DEFAULT:
+          metadata_workers: 10
+          debug: True
+        agent:
+          report_interval: 30
+      l3_agent:
+        DEFAULT:
+          agent_mode : dvr
+        agent:
+          report_interval: 40
+      dhcp_agent:
+        DEFAULT:
+          ovs_vsctl_timeout: 12
+          resync_interval: 60
+        agent:
+          report_interval: 60