diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml
index 3eb02f2938..d2a3cc99da 100644
--- a/ansible/group_vars/all.yml
+++ b/ansible/group_vars/all.yml
@@ -725,3 +725,5 @@ opendaylight_allowed_network_types: '"flat", "vlan", "vxlan"'
 xenserver_himn_ip: "169.254.0.1"
 xenserver_username: "root"
 xenserver_connect_protocol: "https"
+# File used to save XenAPI's facts variables formatted as json.
+xenapi_facts_file: "/etc/kolla/xenapi.json"
diff --git a/ansible/roles/nova/tasks/bootstrap.yml b/ansible/roles/nova/tasks/bootstrap.yml
index 0706e3a852..076ddca3d6 100644
--- a/ansible/roles/nova/tasks/bootstrap.yml
+++ b/ansible/roles/nova/tasks/bootstrap.yml
@@ -45,3 +45,8 @@
 
 - include: bootstrap_service.yml
   when: database.changed
+
+- include: bootstrap_xenapi.yml
+  when:
+    - inventory_hostname in groups['compute']
+    - nova_compute_virt_type == "xenapi"
diff --git a/ansible/roles/nova/tasks/bootstrap_xenapi.yml b/ansible/roles/nova/tasks/bootstrap_xenapi.yml
new file mode 100644
index 0000000000..7abb543d48
--- /dev/null
+++ b/ansible/roles/nova/tasks/bootstrap_xenapi.yml
@@ -0,0 +1,9 @@
+- name: Install package python-os-xenapi
+  package:
+    name: python-os-xenapi
+    state: present
+  become: True
+
+- name: Bootstrap XenAPI compute node
+  command: xenapi_bootstrap -i {{ xenserver_himn_ip }} -u {{ xenserver_username }} -p {{ xenserver_password }} -f {{ xenapi_facts_file }}
+  become: True