Fail cfg01 bootstrap if the bootstrap script is failed

Change-Id: I11f3f5c81257bdb0bf0ec5af36be0aaa92af5065
diff --git a/tcp_tests/helpers/exceptions.py b/tcp_tests/helpers/exceptions.py
index f6c2310..7bc4abc 100644
--- a/tcp_tests/helpers/exceptions.py
+++ b/tcp_tests/helpers/exceptions.py
@@ -133,3 +133,14 @@
     def __str__(self):
         return ("Salt pillar '{0}' error on minion {1}: {2}"
                 .format(self.minion_id, self.pillar, self.message))
+
+
+class EnvironmentNodeIsNotStarted(BaseException):
+    def __init__(self, node_name, message=''):
+        super(EnvironmentNodeIsNotStarted, self).__init__()
+        self.node_name = node_name
+        self.message = message
+
+    def __str__(self):
+        return ("Cloud-init failed on node {0} with error: \n{1}"
+                .format(self.node_name, self.message))
diff --git a/tcp_tests/managers/envmanager_devops.py b/tcp_tests/managers/envmanager_devops.py
index d02cff5..79bec94 100644
--- a/tcp_tests/managers/envmanager_devops.py
+++ b/tcp_tests/managers/envmanager_devops.py
@@ -309,6 +309,7 @@
         LOG.info('Environment "{0}" started'.format(self.__env.name))
         check_cloudinit_started = '[ -f /is_cloud_init_started ]'
         check_cloudinit_finished = '[ -f /is_cloud_init_finished ]'
+        check_cloudinit_failed = 'cat /is_cloud_init_failed'
         passed = {}
         for node in self.__env.get_nodes(role__in=underlay_node_roles):
             LOG.info("Waiting for SSH on node '{0}' / {1} ...".format(
@@ -329,6 +330,12 @@
                     # If '/is_cloud_init_started' exists, then wait for
                     # the flag /is_cloud_init_finished
                     if ssh.execute(check_cloudinit_started)['exit_code'] == 0:
+                        result = ssh.execute(check_cloudinit_failed)
+                        if result['exit_code'] == 0:
+                            raise exceptions.EnvironmentNodeIsNotStarted(
+                                "{0}:{1}".format(host, port),
+                                result.stdout_str)
+
                         status = ssh.execute(
                             check_cloudinit_finished)['exit_code'] == 0
                     # Else, just wait for SSH
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data-cfg01.yaml
index 77c18d1..4b134b7 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data-cfg01.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data-cfg01.yaml
@@ -61,19 +61,19 @@
    #- cp /root/config-drive/user-data /root/user-data
    #- sed -i '/^reboot$/d' /root/user-data
    #- set -x; cd /root && /bin/bash -xe ./user-data
-   - set -x; cd /root/config-drive && /bin/bash -xe ./user-data
-
-   #- echo "nameserver 172.18.208.44" >> /etc/resolv.conf;
+   - |
+     set -x
+     cd /root/config-drive
+     if /bin/bash -xe ./user-data > /var/log/cloud-init-user-data.log; then
+         touch /is_cloud_init_finished
+     else
+         set +x
+         echo "bootstrap script /root/config-drive/user-data failed. tail -n 10 /var/log/cloud-init-user-data.log:\n" > /is_cloud_init_failed
+         tail -n 10 /var/log/cloud-init-user-data.log >> /is_cloud_init_failed
+     fi
 
    # Enable root access (after reboot)
    - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   #- service sshd stop
-
-   ########################################################
-   # Node is ready, allow SSH access
-   - touch /is_cloud_init_finished
-   #- reboot
-   ########################################################
 
   write_files:
    - path: /etc/default/grub.d/97-enable-grub-menu.cfg
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data-cfg01.yaml
index 77c18d1..4b134b7 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data-cfg01.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data-cfg01.yaml
@@ -61,19 +61,19 @@
    #- cp /root/config-drive/user-data /root/user-data
    #- sed -i '/^reboot$/d' /root/user-data
    #- set -x; cd /root && /bin/bash -xe ./user-data
-   - set -x; cd /root/config-drive && /bin/bash -xe ./user-data
-
-   #- echo "nameserver 172.18.208.44" >> /etc/resolv.conf;
+   - |
+     set -x
+     cd /root/config-drive
+     if /bin/bash -xe ./user-data > /var/log/cloud-init-user-data.log; then
+         touch /is_cloud_init_finished
+     else
+         set +x
+         echo "bootstrap script /root/config-drive/user-data failed. tail -n 10 /var/log/cloud-init-user-data.log:\n" > /is_cloud_init_failed
+         tail -n 10 /var/log/cloud-init-user-data.log >> /is_cloud_init_failed
+     fi
 
    # Enable root access (after reboot)
    - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   #- service sshd stop
-
-   ########################################################
-   # Node is ready, allow SSH access
-   - touch /is_cloud_init_finished
-   #- reboot
-   ########################################################
 
   write_files:
    - path: /etc/default/grub.d/97-enable-grub-menu.cfg