diff --git a/ansible/roles/cinder/tasks/bootstrap.yml b/ansible/roles/cinder/tasks/bootstrap.yml
index 8a4383fa6c16c9e9be6a01b63b417c880250786f..0c6d8954f6a01bfc684e50b5dd9a8b901e256c28 100644
--- a/ansible/roles/cinder/tasks/bootstrap.yml
+++ b/ansible/roles/cinder/tasks/bootstrap.yml
@@ -71,8 +71,14 @@
 - name: Waiting for bootstrap container to exit
   command: docker wait bootstrap_cinder
   when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
+  register: bootstrap_result
   run_once: True
 
+- name: Checking for bootstrap failures
+  fail: msg="Bootstrapping failed"
+  run_once: True
+  when: bootstrap_result|changed and bootstrap_result.stdout != "0"
+
 - name: Cleaning up Cinder bootstrap container
   docker:
     name: bootstrap_cinder
diff --git a/ansible/roles/glance/tasks/bootstrap.yml b/ansible/roles/glance/tasks/bootstrap.yml
index ae7e50128f1978bef98957ddfaa3a2363dde252a..e69d1c27d6c5bc09dac3ee53bdb3db01bff97410 100644
--- a/ansible/roles/glance/tasks/bootstrap.yml
+++ b/ansible/roles/glance/tasks/bootstrap.yml
@@ -70,9 +70,15 @@
 # https://github.com/ansible/ansible-modules-core/pull/1031
 - name: Waiting for bootstrap container to exit
   command: docker wait bootstrap_glance
+  register: bootstrap_result
   run_once: True
   when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
 
+- name: Checking for bootstrap failures
+  fail: msg="Bootstrapping failed"
+  run_once: True
+  when: bootstrap_result|changed and bootstrap_result.stdout != "0"
+
 - name: Cleaning up Glance bootstrap container
   docker:
     name: bootstrap_glance
diff --git a/ansible/roles/heat/tasks/bootstrap.yml b/ansible/roles/heat/tasks/bootstrap.yml
index 55ca525a1f4f311281b7619947b0d2aa0074a665..ba79a360c52d4d730dcfa7bee9580aa8b2c71aa9 100644
--- a/ansible/roles/heat/tasks/bootstrap.yml
+++ b/ansible/roles/heat/tasks/bootstrap.yml
@@ -57,9 +57,15 @@
 # https://github.com/ansible/ansible-modules-core/pull/1031
 - name: Waiting for bootstrap container to exit
   command: docker wait bootstrap_heat
+  register: bootstrap_result
   run_once: True
   when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
 
+- name: Checking for bootstrap failures
+  fail: msg="Bootstrapping failed"
+  run_once: True
+  when: bootstrap_result|changed and bootstrap_result.stdout != "0"
+
 - name: Cleaning up Heat boostrap container
   docker:
     name: bootstrap_heat
diff --git a/ansible/roles/keystone/tasks/bootstrap.yml b/ansible/roles/keystone/tasks/bootstrap.yml
index 78da1f2f7c75da71e03d41c43b28fdaebd67be4c..5d58bdd502dca903e309c65eb7aadd441d124b07 100644
--- a/ansible/roles/keystone/tasks/bootstrap.yml
+++ b/ansible/roles/keystone/tasks/bootstrap.yml
@@ -60,9 +60,15 @@
 # https://github.com/ansible/ansible-modules-core/pull/1031
 - name: Waiting for Keystone bootstrap container to exit
   command: docker wait bootstrap_keystone
+  register: bootstrap_result
   run_once: True
   when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
 
+- name: Checking for bootstrap failures
+  fail: msg="Bootstrapping failed"
+  run_once: True
+  when: bootstrap_result|changed and bootstrap_result.stdout != "0"
+
 - name: Cleaning up Keystone bootstrap container
   docker:
     name: bootstrap_keystone
diff --git a/ansible/roles/neutron/tasks/bootstrap.yml b/ansible/roles/neutron/tasks/bootstrap.yml
index a422dfc82e0c12d9c66f92c309d14a124071ad94..c933e24322ed6cb7ef02d5b12766405b24a9952b 100644
--- a/ansible/roles/neutron/tasks/bootstrap.yml
+++ b/ansible/roles/neutron/tasks/bootstrap.yml
@@ -52,9 +52,15 @@
 
 - name: Waiting for bootstrap container to exit
   command: docker wait bootstrap_neutron
+  register: bootstrap_result
   run_once: True
   when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
 
+- name: Checking for bootstrap failures
+  fail: msg="Bootstrapping failed"
+  run_once: True
+  when: bootstrap_result|changed and bootstrap_result.stdout != "0"
+
 - name: Cleaning up Neutron bootstrap container
   docker:
     name: bootstrap_neutron
diff --git a/ansible/roles/nova/tasks/bootstrap.yml b/ansible/roles/nova/tasks/bootstrap.yml
index 273772f2bc57dfaadfea6aab17ef376905019f1d..2a95cb0283fa483587a5d33957c99a42be5fcd73 100644
--- a/ansible/roles/nova/tasks/bootstrap.yml
+++ b/ansible/roles/nova/tasks/bootstrap.yml
@@ -51,9 +51,15 @@
 # https://github.com/ansible/ansible-modules-core/pull/1031
 - name: Waiting for bootstrap container to exit
   command: docker wait bootstrap_nova
+  register: bootstrap_result
   run_once: True
   when: database.stdout.find('localhost | SUCCESS => ') != -1 and (database.stdout.split('localhost | SUCCESS => ')[1]|from_json).changed
 
+- name: Checking for bootstrap failures
+  fail: msg="Bootstrapping failed"
+  run_once: True
+  when: bootstrap_result|changed and bootstrap_result.stdout != "0"
+
 - name: Cleaning up Nova bootstrap container
   docker:
     name: bootstrap_nova
diff --git a/ansible/roles/rabbitmq/tasks/bootstrap.yml b/ansible/roles/rabbitmq/tasks/bootstrap.yml
index 876015b1bd258d7b4215a334d0bd4d1876b5d9ec..fc0d719403bedc22dd5eebdbe4c3bfe77fe9fdcb 100644
--- a/ansible/roles/rabbitmq/tasks/bootstrap.yml
+++ b/ansible/roles/rabbitmq/tasks/bootstrap.yml
@@ -48,8 +48,13 @@
 
 - name: Waiting for bootstrap container
   command: docker wait rabbitmq_bootstrap
+  register: bootstrap_result
   when: exists.rc != 0
 
+- name: Checking for bootstrap failures
+  fail: msg="Bootstrapping failed"
+  when: bootstrap_result|changed and bootstrap_result.stdout != "0"
+
 - name: Cleaning up bootstrap container
   docker:
     image: "{{ rabbitmq_image_full }}"