diff --git a/ansible/roles/nova/tasks/deploy.yml b/ansible/roles/nova/tasks/deploy.yml
new file mode 100644
index 0000000000..f72e6e2193
--- /dev/null
+++ b/ansible/roles/nova/tasks/deploy.yml
@@ -0,0 +1,38 @@
+---
+- include: ceph.yml
+  when:
+    - enable_ceph | bool
+    - inventory_hostname in groups['ceph-mon'] or
+        inventory_hostname in groups['compute'] or
+        inventory_hostname in groups['nova-api'] or
+        inventory_hostname in groups['nova-conductor'] or
+        inventory_hostname in groups['nova-consoleauth'] or
+        inventory_hostname in groups['nova-novncproxy'] or
+        inventory_hostname in groups['nova-scheduler']
+
+- include: register.yml
+  when: inventory_hostname in groups['nova-api']
+
+- include: config.yml
+  when: inventory_hostname in groups['compute'] or
+        inventory_hostname in groups['nova-api'] or
+        inventory_hostname in groups['nova-conductor'] or
+        inventory_hostname in groups['nova-consoleauth'] or
+        inventory_hostname in groups['nova-novncproxy'] or
+        inventory_hostname in groups['nova-scheduler']
+
+- include: config-nova-fake.yml
+  when:
+    - enable_nova_fake | bool
+    - inventory_hostname in groups['compute']
+
+- include: bootstrap.yml
+  when: inventory_hostname in groups['nova-api']
+
+- include: start.yml
+  when: inventory_hostname in groups['compute'] or
+        inventory_hostname in groups['nova-api'] or
+        inventory_hostname in groups['nova-conductor'] or
+        inventory_hostname in groups['nova-consoleauth'] or
+        inventory_hostname in groups['nova-novncproxy'] or
+        inventory_hostname in groups['nova-scheduler']
diff --git a/ansible/roles/nova/tasks/main.yml b/ansible/roles/nova/tasks/main.yml
index f72e6e2193..b017e8b4ad 100644
--- a/ansible/roles/nova/tasks/main.yml
+++ b/ansible/roles/nova/tasks/main.yml
@@ -1,38 +1,2 @@
 ---
-- include: ceph.yml
-  when:
-    - enable_ceph | bool
-    - inventory_hostname in groups['ceph-mon'] or
-        inventory_hostname in groups['compute'] or
-        inventory_hostname in groups['nova-api'] or
-        inventory_hostname in groups['nova-conductor'] or
-        inventory_hostname in groups['nova-consoleauth'] or
-        inventory_hostname in groups['nova-novncproxy'] or
-        inventory_hostname in groups['nova-scheduler']
-
-- include: register.yml
-  when: inventory_hostname in groups['nova-api']
-
-- include: config.yml
-  when: inventory_hostname in groups['compute'] or
-        inventory_hostname in groups['nova-api'] or
-        inventory_hostname in groups['nova-conductor'] or
-        inventory_hostname in groups['nova-consoleauth'] or
-        inventory_hostname in groups['nova-novncproxy'] or
-        inventory_hostname in groups['nova-scheduler']
-
-- include: config-nova-fake.yml
-  when:
-    - enable_nova_fake | bool
-    - inventory_hostname in groups['compute']
-
-- include: bootstrap.yml
-  when: inventory_hostname in groups['nova-api']
-
-- include: start.yml
-  when: inventory_hostname in groups['compute'] or
-        inventory_hostname in groups['nova-api'] or
-        inventory_hostname in groups['nova-conductor'] or
-        inventory_hostname in groups['nova-consoleauth'] or
-        inventory_hostname in groups['nova-novncproxy'] or
-        inventory_hostname in groups['nova-scheduler']
+- include: "{{ action }}.yml"
diff --git a/ansible/roles/nova/tasks/pull.yml b/ansible/roles/nova/tasks/pull.yml
new file mode 100644
index 0000000000..a8d0a9f52a
--- /dev/null
+++ b/ansible/roles/nova/tasks/pull.yml
@@ -0,0 +1,72 @@
+---
+- name: Pulling nova-api image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_api_image_full }}"
+  when: inventory_hostname in groups['nova-api']
+
+- name: Pulling nova-compute image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_compute_image_full }}"
+  when:
+    - inventory_hostname in groups['compute']
+    - not enable_nova_fake | bool
+
+- name: Pulling nova-compute-ironic image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_compute_ironic_image_full }}"
+  when:
+    - inventory_hostname in groups['nova-compute-ironic']
+    - enable_ironic | bool
+
+- name: Pulling nova-conductor image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_conductor_image_full }}"
+  when: inventory_hostname in groups['nova-conductor']
+
+- name: Pulling nova-consoleauth image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_consoleauth_image_full }}"
+  when: inventory_hostname in groups['nova-consoleauth']
+
+- name: Pulling nova-libvirt image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_libvirt_image_full }}"
+  when: inventory_hostname in groups['compute']
+
+- name: Pulling nova-novncproxy image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_novncproxy_image_full }}"
+  when:
+    - inventory_hostname in groups['nova-novncproxy']
+    - nova_console == 'novnc'
+
+- name: Pulling nova-scheduler image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_scheduler_image_full }}"
+  when: inventory_hostname in groups['nova-scheduler']
+
+- name: Pulling nova-spicehtml5proxy image
+  kolla_docker:
+    action: "pull_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ nova_spicehtml5proxy_image_full }}"
+  when:
+    - inventory_hostname in groups['nova-spicehtml5proxy']
+    - nova_console == 'spice'
+