summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-03-29 13:05:47 +0300
committerLars Wirzenius <liw@liw.fi>2017-03-29 13:05:47 +0300
commit774909bc40c88b4842be86e71b2810c45edf2270 (patch)
treea73126da8fe5976362d6ff03c927d07a04fcfec7
parentd3a977f9d6625bc6f35c645060050c93ab3ae125 (diff)
downloadvmdb2-774909bc40c88b4842be86e71b2810c45edf2270.tar.gz
Run all teardowns even if one fails
-rw-r--r--vmdb/app.py36
1 files changed, 20 insertions, 16 deletions
diff --git a/vmdb/app.py b/vmdb/app.py
index 29b9816..534cfff 100644
--- a/vmdb/app.py
+++ b/vmdb/app.py
@@ -47,7 +47,7 @@ class Vmdb2(cliapp.Application):
self.run_teardowns(steps_taken, state)
if core_meltdown:
- logging.error('An error step was used, exiting with error')
+ logging.error('An error occurred, exiting with non-zero exit code')
sys.exit(1)
def load_spec_file(self, filename):
@@ -57,30 +57,34 @@ class Vmdb2(cliapp.Application):
return yaml.safe_load(f)
def run_steps(self, steps, state):
+ return self.run_steps_helper(
+ steps, state, 'Running step: %r', 'run', False)
+
+ def run_teardowns(self, steps, state):
+ return self.run_steps_helper(
+ reversed(steps), state, 'Running teardown: %r', 'teardown', True)
+
+ def run_steps_helper(self, steps, state, msg, method_name, keep_going):
core_meltdown = False
steps_taken = []
- try:
- for step in steps:
- logging.info('Running step: %r', step)
+ for step in steps:
+ try:
+ logging.info(msg, step)
steps_taken.append(step)
expanded_step = self.expand_step_spec(step, state)
runner = self.step_runners.find(step)
- runner.run(expanded_step, self.settings, state)
- except Exception as e:
- logging.error('ERROR: %s', str(e), exc_info=True)
- sys.stderr.write('ERROR: {}\n'.format(str(e)))
- core_meltdown = True
+ method = getattr(runner, method_name)
+ method(expanded_step, self.settings, state)
+ except Exception as e:
+ logging.error('ERROR: %s', str(e), exc_info=True)
+ sys.stderr.write('ERROR: {}\n'.format(str(e)))
+ core_meltdown = True
+ if not keep_going:
+ break
return steps_taken, core_meltdown
- def run_teardowns(self, steps_taken, state):
- for step in reversed(steps_taken):
- logging.info('Running teardown: %r', step)
- expanded_step = self.expand_step_spec(step, state)
- runner = self.step_runners.find(step)
- runner.teardown(expanded_step, self.settings, state)
-
def expand_step_spec(self, step, state):
expanded = {}
for key in step: