--- /dev/null
+import time
+
+from qa import utils
+from qa.Test import Test
+
+class check_boot_state(Test):
+ """
+ Continually checks the boot_state of the specified node until
+ either the node reaches boot, the node reaches debug or the
+ timeout is reached.
+
+ Timeout represents the ammout of time (in minutes) we should
+ continue trying before quitting.
+
+ Sleep represnet the ammount of time (in seconds) to wait in
+ between checks.
+
+ Returns the boot state of the node.
+ """
+ def call(self, hostname, timeout = 5, sleep = 30):
+ exit = False
+ api = self.config.api
+ auth = self.config.auth
+
+ # Validate hostname
+ nodes = api.GetNodes(auth, [hostname], ['hostname'])
+ if not nodes:
+ raise Exception, "No such hostname %(hostname)s" % locals()
+
+ start_time = time.time()
+ end_time = start_time + (timeout * 60)
+
+ while not exit:
+ nodes = api.GetNodes(auth, [hostname], ['boot_state'])
+ node = nodes[0]
+ boot_state = node['boot_state']
+ if self.config.verbose:
+ utils.header("%(hostname)s boot_state is %(boot_state)s" % locals())
+
+ if boot_state in ['boot', 'debug']:
+ exit = True
+ elif time.time() < end_time:
+ time.sleep(sleep)
+ else:
+ exit = True
+
+
+ if self.config.verbose:
+ if boot_state in ['boot']:
+ utils.header("%(hostname)s correctly installed and booted" % locals())
+ else:
+ utils.header("%(hostname)s not fully booted" % locals())
+
+ return boot_state