diff --git a/ansible/roles/nova/tasks/config.yml b/ansible/roles/nova/tasks/config.yml
index dd75b5af70e8a590e1413dd01ec5e69fea744524..48094c3f9628df5c2095612db7e126490961e402 100644
--- a/ansible/roles/nova/tasks/config.yml
+++ b/ansible/roles/nova/tasks/config.yml
@@ -31,6 +31,19 @@
   when:
     - nova_policy.results
 
+- name: Check for vendordata file
+  stat:
+    path: "{{ node_custom_config }}/nova/vendordata.json"
+  delegate_to: localhost
+  run_once: True
+  register: vendordata_file
+
+- name: Set vendordata file path
+  set_fact:
+    vendordata_file_path: "{{ vendordata_file.stat.path }}"
+  when:
+    - vendordata_file.stat.exists
+
 - include_tasks: copy-certs.yml
   when:
     - kolla_copy_ca_into_containers | bool or nova_enable_tls_backend | bool
@@ -94,3 +107,18 @@
     - nova_services["nova-api"].enabled | bool
   notify:
     - "Restart nova-api container"
+
+- name: Copying over vendordata file
+  vars:
+    service: "{{ nova_services['nova-api'] }}"
+  copy:
+    src: "{{ vendordata_file_path }}"
+    dest: "{{ node_config_directory }}/nova-api/vendordata.json"
+    mode: "0660"
+  become: True
+  when:
+    - vendordata_file_path is defined
+    - inventory_hostname in groups[service['group']]
+    - service.enabled | bool
+  notify:
+    - "Restart nova-api container"
diff --git a/ansible/roles/nova/templates/nova-api.json.j2 b/ansible/roles/nova/templates/nova-api.json.j2
index ea392fcbd958612318129113dd7a5fbad441cbdf..8a3bffa801f2d913da858defae7263af9f88621d 100644
--- a/ansible/roles/nova/templates/nova-api.json.j2
+++ b/ansible/roles/nova/templates/nova-api.json.j2
@@ -32,6 +32,12 @@
             "dest": "/etc/nova/certs/nova-key.pem",
             "owner": "nova",
             "perm": "0600"
+        }{% endif %}{% if vendordata_file_path is defined %},
+        {
+            "source": "{{ container_config_directory }}/vendordata.json",
+            "dest": "/etc/nova/vendordata.json",
+            "owner": "nova",
+            "perm": "0600"
         }{% endif %}
     ],
     "permissions": [
diff --git a/ansible/roles/nova/templates/nova.conf.j2 b/ansible/roles/nova/templates/nova.conf.j2
index 6f828cd81619c09b30960d1f15723c21490b9381..1032aaec43c9d463ba9bbc7cf7dbb2b0b34a84db 100644
--- a/ansible/roles/nova/templates/nova.conf.j2
+++ b/ansible/roles/nova/templates/nova.conf.j2
@@ -41,6 +41,10 @@ track_instance_changes = False
 [api]
 use_forwarded_for = true
 
+{% if vendordata_file_path is defined %}
+vendordata_jsonfile_path = /etc/nova/vendordata.json
+{% endif %}
+
 # Super conductor
 [conductor]
 workers = {{ openstack_service_workers }}
diff --git a/doc/source/reference/compute/nova-guide.rst b/doc/source/reference/compute/nova-guide.rst
index ecb2c8732fa216223385b5bc0b5cffc0d0c748d4..4905169099fee692b1f79044b0d4726044e7100e 100644
--- a/doc/source/reference/compute/nova-guide.rst
+++ b/doc/source/reference/compute/nova-guide.rst
@@ -56,3 +56,12 @@ Cells
 
 Information on using Nova Cells V2 to scale out can be found in
 :doc:`nova-cells-guide`.
+
+Vendordata
+==========
+
+Nova supports passing deployer provided data to instances using a
+concept known as Vendordata. If a Vendordata file is located in the
+following path within the Kolla configuration, Kolla will
+automatically use it when the Nova service is deployed or
+reconfigured: ``/etc/kolla/config/nova/vendordata.json``.
diff --git a/releasenotes/notes/support-setting-vendordata-34f78d9004fa369a.yaml b/releasenotes/notes/support-setting-vendordata-34f78d9004fa369a.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a539e503d684818bc7774baa36e9d9e77ec227f6
--- /dev/null
+++ b/releasenotes/notes/support-setting-vendordata-34f78d9004fa369a.yaml
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    Support for configuring a Vendordata file for Nova has been
+    added. This allows users to pass through arbitrary data to
+    instances.