diff --git a/ansible/roles/kolla-openstack/tasks/config.yml b/ansible/roles/kolla-openstack/tasks/config.yml
index b13a47099ed235283f3bd65cbde5472c1155bcc6..5123bcda036f81c4d9c7632cc3ab9b3d7a787e96 100644
--- a/ansible/roles/kolla-openstack/tasks/config.yml
+++ b/ansible/roles/kolla-openstack/tasks/config.yml
@@ -115,6 +115,7 @@
     - item.0.item.enabled | bool
     - item.1.path | basename not in item.0.item.ignore | default([])
     - item.1.path | basename not in item.0.item.untemplated | default([])
+    - (item.1.path | dirname | relpath(item.0.item.src)).split("/")[0] not in item.0.item.untemplated_dirs | default([])
 
 - name: Ensure untemplated extra configuration files exist
   copy:
@@ -128,7 +129,8 @@
   when:
     - item.0.item.enabled | bool
     - item.1.path | basename not in item.0.item.ignore | default([])
-    - item.1.path | basename in item.0.item.untemplated | default([])
+    - (item.1.path | basename in item.0.item.untemplated | default([])) or
+      ((item.1.path | dirname | relpath(item.0.item.src)).split("/")[0] in item.0.item.untemplated_dirs | default([]))
 
 - name: Ensure unnecessary extra configuration files are absent
   file:
diff --git a/ansible/roles/kolla-openstack/vars/main.yml b/ansible/roles/kolla-openstack/vars/main.yml
index 5a53c844f0aab8df78eecabdfba1ea7b0deffce4..e7252a1373dedd17345b57ea1d2f4e57c11db132 100644
--- a/ansible/roles/kolla-openstack/vars/main.yml
+++ b/ansible/roles/kolla-openstack/vars/main.yml
@@ -98,6 +98,9 @@ kolla_openstack_custom_config:
     dest: "{{ kolla_node_custom_config_path }}/horizon"
     patterns: "*"
     enabled: "{{ kolla_enable_horizon }}"
+    untemplated_dirs:
+    # Do not attempt to template themes directory.
+      - "themes"
   # InfluxDB.
   - src: "{{ kolla_extra_config_path }}/"
     dest: "{{ kolla_node_custom_config_path }}/"
diff --git a/releasenotes/notes/add-support-for-custom-horizon-themes-5da1d99c1b8107b9.yaml b/releasenotes/notes/add-support-for-custom-horizon-themes-5da1d99c1b8107b9.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a422a837f7ceafb46730baa317cc0bbdcb3cbc9a
--- /dev/null
+++ b/releasenotes/notes/add-support-for-custom-horizon-themes-5da1d99c1b8107b9.yaml
@@ -0,0 +1,3 @@
+---
+features:
+  - Adds support for custom Horizon themes.