diff --git a/ansible/roles/haproxy/tasks/config.yml b/ansible/roles/haproxy/tasks/config.yml
index d71ae7232b..633e96c6f6 100755
--- a/ansible/roles/haproxy/tasks/config.yml
+++ b/ansible/roles/haproxy/tasks/config.yml
@@ -10,6 +10,11 @@
     src: "haproxy.cfg.j2"
     dest: "{{ node_config_directory }}/haproxy/haproxy.cfg"
 
+- name: Copying haproxy JSON configuration file
+  template:
+    src: "haproxy.json.j2"
+    dest: "{{ node_config_directory }}/haproxy/config.json"
+
 - name: Allowing non-local IP binding
   sysctl: name="net.ipv4.ip_nonlocal_bind" value=1 sysctl_set=yes
 
@@ -19,6 +24,11 @@
     state: "directory"
     recurse: "yes"
 
+- name: Copying keepalived JSON configuration file
+  template:
+    src: "keepalived.json.j2"
+    dest: "{{ node_config_directory }}/keepalived/config.json"
+
 - name: Copying over config(s)
   template:
     src: "keepalived.conf.j2"
diff --git a/ansible/roles/haproxy/tasks/start.yml b/ansible/roles/haproxy/tasks/start.yml
index 317c497a19..84a545d2b4 100755
--- a/ansible/roles/haproxy/tasks/start.yml
+++ b/ansible/roles/haproxy/tasks/start.yml
@@ -15,7 +15,7 @@
     image: "{{ keepalived_image_full }}"
     privileged: True
     volumes:
-      - "{{ node_config_directory }}/keepalived/:/opt/kolla/keepalived/:ro"
+      - "{{ node_config_directory }}/keepalived/:/opt/kolla/config_files/:ro"
       - "/run:/run"
       - "/lib/modules:/lib/modules:ro"
     env:
@@ -37,7 +37,7 @@
     image: "{{ haproxy_image_full }}"
     privileged: True
     volumes:
-      - "{{ node_config_directory }}/haproxy/:/opt/kolla/haproxy/:ro"
+      - "{{ node_config_directory }}/haproxy/:/opt/kolla/config_files/:ro"
       - "/run:/run"
     env:
       KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
diff --git a/ansible/roles/haproxy/templates/haproxy.json.j2 b/ansible/roles/haproxy/templates/haproxy.json.j2
new file mode 100644
index 0000000000..62a30b3dd1
--- /dev/null
+++ b/ansible/roles/haproxy/templates/haproxy.json.j2
@@ -0,0 +1,11 @@
+{
+    "command": "/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid",
+    "config_files": [
+        {
+            "source": "/opt/kolla/config_files/haproxy.cfg",
+            "dest": "/etc/haproxy/haproxy.cfg",
+            "owner": "root",
+            "perm": "0644"
+        }
+    ]
+}
diff --git a/ansible/roles/haproxy/templates/keepalived.json.j2 b/ansible/roles/haproxy/templates/keepalived.json.j2
new file mode 100644
index 0000000000..27ebf7c96f
--- /dev/null
+++ b/ansible/roles/haproxy/templates/keepalived.json.j2
@@ -0,0 +1,11 @@
+{
+    "command": "/usr/sbin/keepalived -nld -p /run/keepalived.pid",
+    "config_files": [
+        {
+            "source": "/opt/kolla/config_files/keepalived.conf",
+            "dest": "/etc/keepalived/keepalived.conf",
+            "owner": "root",
+            "perm": "0644"
+        }
+    ]
+}
diff --git a/docker/haproxy/ensure_latest_config.sh b/docker/haproxy/ensure_latest_config.sh
index b91189ca57..af20175a6d 100755
--- a/docker/haproxy/ensure_latest_config.sh
+++ b/docker/haproxy/ensure_latest_config.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 CURRENT_CONFIG_HASH=$(sha1sum /etc/haproxy/haproxy.cfg | cut -f1 -d' ')
-NEW_CONFIG_HASH=$(sha1sum /opt/kolla/haproxy/haproxy.cfg | cut -f1 -d' ')
+NEW_CONFIG_HASH=$(sha1sum /opt/kolla/config_files/haproxy.cfg | cut -f1 -d' ')
 
 if [[ $CURRENT_CONFIG_HASH != $NEW_CONFIG_HASH ]]; then
     changed=changed
diff --git a/docker/haproxy/start.sh b/docker/haproxy/start.sh
index d1da4a607f..629c852544 100755
--- a/docker/haproxy/start.sh
+++ b/docker/haproxy/start.sh
@@ -1,17 +1,15 @@
 #!/bin/bash
 set -o errexit
 
-CMD='/usr/sbin/haproxy'
-ARGS="-f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid"
-
 # Loading common functions.
 source /opt/kolla/kolla-common.sh
 
-# Execute config strategy
-set_configs
+# Generate run command
+python /opt/kolla/set_configs.py
+CMD=$(cat /run_command)
 
 # We are intentionally not using exec so we can reload the haproxy config later
-$CMD $ARGS
+$CMD
 
 # TODO(SamYaple): This has the potential for a race condition triggered by a
 #                 config reload that could cause the container to exit
diff --git a/docker/keepalived/start.sh b/docker/keepalived/start.sh
index a122526e48..8c41a5f7de 100755
--- a/docker/keepalived/start.sh
+++ b/docker/keepalived/start.sh
@@ -1,14 +1,12 @@
 #!/bin/bash
 set -o errexit
 
-CMD="/usr/sbin/keepalived"
-ARGS="-nld -p /run/keepalived.pid"
-
 # Loading common functions.
 source /opt/kolla/kolla-common.sh
 
-# Execute config strategy
-set_configs
+# Generate run command
+python /opt/kolla/set_configs.py
+CMD=$(cat /run_command)
 
 modprobe ip_vs
 
@@ -17,4 +15,4 @@ if [ -f /run/keepalived.pid ]; then
     rm /run/keepalived.pid
 fi
 
-exec $CMD $ARGS
+exec $CMD