diff --git a/docker/heat/heat-api/Dockerfile.j2 b/docker/heat/heat-api/Dockerfile.j2
index 990d8df51329fad225e7b7dad323a50ca1a60d77..22cae4177b3be6604292e7f12c8e4a27541106d2 100644
--- a/docker/heat/heat-api/Dockerfile.j2
+++ b/docker/heat/heat-api/Dockerfile.j2
@@ -1,25 +1,21 @@
 FROM {{ namespace }}/{{ image_prefix }}heat-base:{{ tag }}
 MAINTAINER {{ maintainer }}
+{% import "macros.j2" as macros with context %}
 
 {% if install_type == 'binary' %}
     {% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
-
-RUN yum -y install \
-        openstack-heat-api \
-    && yum clean all
-
+       {% set heat_api_packages = ['openstack-heat-api'] %}
     {% elif base_distro in ['ubuntu'] %}
-
-RUN apt-get -y install --no-install-recommends \
-        heat-api \
-    && apt-get clean
-
+        {% set heat_api_packages = ['heat-api'] %}
     {% endif %}
+RUN {{ macros.install_packages(heat_api_packages | customizable("packages")) }}
 {% endif %}
 
 COPY extend_start.sh /usr/local/bin/kolla_heat_extend_start
 RUN chmod 755 /usr/local/bin/kolla_heat_extend_start
 
+{% block heat_api_footer %}{% endblock %}
+{% block footer %}{% endblock %}
 {{ include_footer }}
 
 USER heat
diff --git a/docker/heat/heat-base/Dockerfile.j2 b/docker/heat/heat-base/Dockerfile.j2
index 0085eb545eb192e16d63dbd788b329352db6a925..23287ee09df152043acabe1bed55449e3b8a0890 100644
--- a/docker/heat/heat-base/Dockerfile.j2
+++ b/docker/heat/heat-base/Dockerfile.j2
@@ -1,20 +1,17 @@
 FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
 MAINTAINER {{ maintainer }}
 
-{% if install_type == 'binary' %}
-    {% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
-
-RUN yum -y install \
-        openstack-heat-common \
-    && yum clean all
+{% import "macros.j2" as macros with context %}
 
-    {% elif base_distro in ['ubuntu'] %}
+{% if install_type == 'binary' %}
 
-RUN apt-get -y install --no-install-recommends \
-        heat-common \
-    && apt-get clean
+{% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
+    {% set heat_base_packages = ['openstack-heat-common'] %}
+{% elif base_distro in ['ubuntu'] %}
+    {% set heat_base_packages = ['heat-common'] %}
+{% endif %}
+RUN {{ macros.install_packages(heat_base_packages | customizable("packages")) }}
 
-    {% endif %}
 {% elif install_type == 'source' %}
 
 ADD heat-base-archive /heat-base-source
diff --git a/docker/heat/heat-engine/Dockerfile.j2 b/docker/heat/heat-engine/Dockerfile.j2
index 4c7335f6825bc02b3c0027c6d45152967bc28f47..e0d5ede5468d6b29c5caf37a157f3bc807753ac6 100644
--- a/docker/heat/heat-engine/Dockerfile.j2
+++ b/docker/heat/heat-engine/Dockerfile.j2
@@ -1,25 +1,23 @@
 FROM {{ namespace }}/{{ image_prefix }}heat-base:{{ tag }}
 MAINTAINER {{ maintainer }}
 
+{% import "macros.j2" as macros with context %}
+
 {% if install_type == 'binary' %}
     {% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
-
-# TODO(SamYaple): until packaging is fixed, all of the python clients below are required
-# http://pkgs.fedoraproject.org/cgit/openstack-heat.git/tree/openstack-heat.spec#n248
-RUN yum -y install \
-        python-barbicanclient \
-        python-zaqarclient \
-        openstack-heat-engine \
-    && yum clean all
-
-   {% elif base_distro in ['ubuntu'] %}
-
-RUN apt-get -y install --no-install-recommends \
-        heat-engine \
-    && apt-get clean
-
+       {% set heat_engine_packages = [
+            'python-barbicanclient',
+            'python-zaqarclient',
+            'openstack-heat-engine'
+        ] %}
+    {% elif base_distro in ['ubuntu'] %}
+        {% set heat_engine_packages = ['heat-engine'] %}
     {% endif %}
+RUN {{ macros.install_packages(heat_engine_packages | customizable("packages")) }}
+
 {% endif %}
+{% block heat_engine_footer %}{% endblock %}
+{% block footer %}{% endblock %}
 
 {{ include_footer }}