diff --git a/ansible/kolla-openstack.yml b/ansible/kolla-openstack.yml
index 6be3e9ef7439d10b521772ca1cf087459311f7aa..36cf4daa171f89098d051faffabb5d456fd5cbdf 100644
--- a/ansible/kolla-openstack.yml
+++ b/ansible/kolla-openstack.yml
@@ -134,6 +134,7 @@
             - { name: neutron_ml2, file: neutron/ml2_conf.ini }
             - { name: nova, file: nova.conf }
             - { name: octavia, file: octavia.conf }
+            - { name: placement, file: placement.conf }
             - { name: sahara, file: sahara.conf }
             - { name: zookeeper, file: zookeeper.cfg }
 
@@ -244,6 +245,7 @@
       kolla_extra_neutron_ml2: "{{ kolla_extra_config.neutron_ml2 | default }}"
       kolla_extra_nova: "{{ kolla_extra_config.nova | default }}"
       kolla_extra_octavia: "{{ kolla_extra_config.octavia | default }}"
+      kolla_extra_placement: "{{ kolla_extra_config.placement | default }}"
       kolla_extra_sahara: "{{ kolla_extra_config.sahara | default }}"
       kolla_extra_zookeeper: "{{ kolla_extra_config.zookeeper | default }}"
       kolla_extra_config_path: "{{ kayobe_env_config_path }}/kolla/config"
diff --git a/ansible/roles/kolla-openstack/defaults/main.yml b/ansible/roles/kolla-openstack/defaults/main.yml
index 975eb78afd346f6c2e0f8ca4bf21a9425e55e1a5..ae32392a7fe206a1a62daff636721dde2d5d932e 100644
--- a/ansible/roles/kolla-openstack/defaults/main.yml
+++ b/ansible/roles/kolla-openstack/defaults/main.yml
@@ -456,6 +456,15 @@ kolla_extra_nova:
 # Whether to enable Octavia.
 kolla_enable_octavia:
 
+###############################################################################
+# Placement configuration.
+
+# Whether to enable placement.
+kolla_enable_placement:
+
+# Free form extra configuration to append to placement.conf.
+kolla_extra_placement:
+
 ###############################################################################
 # Prometheus configuration.
 
diff --git a/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml b/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
index 0309f8c2ae1322ca717f6999704df97dfc38027a..14b0bbc863b091e2385f3113277d5f5d235e0962 100644
--- a/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
+++ b/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
@@ -123,6 +123,10 @@ provisioner:
         kolla_extra_octavia: |
           [extra-octavia.conf]
           foo=bar
+        kolla_enable_placement: true
+        kolla_extra_placement: |
+          [extra-placement.conf]
+          foo=bar
         kolla_enable_prometheus: true
         kolla_enable_sahara: true
         kolla_extra_sahara: |
diff --git a/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py b/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
index 55c30179c306f9ce959172cf2f17f58ac9d79354..6d5f67fe5e0a64c18c18ab2e58fca8e747f31ae9 100644
--- a/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
+++ b/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
@@ -51,6 +51,7 @@ testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
      'neutron',
      'nova',
      'octavia',
+     'placement',
      'prometheus',
      'sahara',
      'storm',
@@ -84,6 +85,7 @@ def test_service_config_directory(host, path):
      'neutron.conf',
      'nova.conf',
      'octavia.conf',
+     'placement.conf',
      'sahara.conf',
      'backup.my.cnf',
      'zookeeper.cfg'])
diff --git a/ansible/roles/kolla-openstack/tasks/config.yml b/ansible/roles/kolla-openstack/tasks/config.yml
index 37c146760a183c618c8058198448b84c679a349f..b13a47099ed235283f3bd65cbde5472c1155bcc6 100644
--- a/ansible/roles/kolla-openstack/tasks/config.yml
+++ b/ansible/roles/kolla-openstack/tasks/config.yml
@@ -39,6 +39,7 @@
     - { src: neutron.conf.j2, dest: neutron.conf, enabled: "{{ kolla_enable_neutron }}" }
     - { src: nova.conf.j2, dest: nova.conf, enabled: "{{ kolla_enable_nova }}" }
     - { src: octavia.conf.j2, dest: octavia.conf, enabled: "{{ kolla_enable_octavia }}" }
+    - { src: placement.conf.j2, dest: placement.conf, enabled: "{{ kolla_enable_placement }}" }
     - { src: sahara.conf.j2, dest: sahara.conf, enabled: "{{ kolla_enable_sahara }}" }
     - { src: zookeeper.cfg.j2, dest: zookeeper.cfg, enabled: "{{ kolla_enable_zookeeper }}" }
   when: item.enabled | bool
diff --git a/ansible/roles/kolla-openstack/templates/placement.conf.j2 b/ansible/roles/kolla-openstack/templates/placement.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..287a13d034dac46ee9c3679d8e10b4633dc15603
--- /dev/null
+++ b/ansible/roles/kolla-openstack/templates/placement.conf.j2
@@ -0,0 +1,9 @@
+# {{ ansible_managed }}
+
+{% if kolla_extra_placement %}
+#######################
+# Extra configuration
+#######################
+
+{{ kolla_extra_placement }}
+{% endif %}
diff --git a/ansible/roles/kolla-openstack/vars/main.yml b/ansible/roles/kolla-openstack/vars/main.yml
index 207d3d9ad1d5728c2ef4869e82134e249a021c88..5a53c844f0aab8df78eecabdfba1ea7b0deffce4 100644
--- a/ansible/roles/kolla-openstack/vars/main.yml
+++ b/ansible/roles/kolla-openstack/vars/main.yml
@@ -180,6 +180,11 @@ kolla_openstack_custom_config:
     dest: "{{ kolla_node_custom_config_path }}/octavia"
     patterns: "*"
     enabled: "{{ kolla_enable_octavia }}"
+  # Placement
+  - src: "{{ kolla_extra_config_path }}/placement"
+    dest: "{{ kolla_node_custom_config_path }}/placement"
+    patterns: "*"
+    enabled: "{{ kolla_enable_placement }}"
   # Prometheus config
   - src: "{{ kolla_extra_config_path }}/prometheus"
     dest: "{{ kolla_node_custom_config_path }}/prometheus"
diff --git a/doc/source/configuration/reference/kolla-ansible.rst b/doc/source/configuration/reference/kolla-ansible.rst
index 4e6db4289d7dc5ba131d8907912d042d94dd7b83..f4ab06eede4bf82805cb76aa7c954c0110ebb2ff 100644
--- a/doc/source/configuration/reference/kolla-ansible.rst
+++ b/doc/source/configuration/reference/kolla-ansible.rst
@@ -720,6 +720,8 @@ which files are supported.
    ``nova/*``                      Extended nova configuration.
    ``octavia.conf``                Octavia configuration.
    ``octavia/*``                   Extended Octavia configuration.
+   ``placement.conf``              Placement configuration.
+   ``placement/*``                 Extended Placement configuration.
    ``prometheus/*``                Prometheus configuration.
    ``sahara.conf``                 Sahara configuration.
    ``sahara/*``                    Extended sahara configuration.
diff --git a/releasenotes/notes/add-extended-placement-conf-70a4b9a318c1b555.yaml b/releasenotes/notes/add-extended-placement-conf-70a4b9a318c1b555.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..96e016b1ff4d249504c939df1cec0bdcac8fb6e1
--- /dev/null
+++ b/releasenotes/notes/add-extended-placement-conf-70a4b9a318c1b555.yaml
@@ -0,0 +1,3 @@
+---
+features:
+  - Adds support for custom Placement configuration.