diff options
author | Lars Wirzenius <liw@liw.fi> | 2017-03-29 13:05:47 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2017-03-29 13:05:47 +0300 |
commit | 774909bc40c88b4842be86e71b2810c45edf2270 (patch) | |
tree | a73126da8fe5976362d6ff03c927d07a04fcfec7 | |
parent | d3a977f9d6625bc6f35c645060050c93ab3ae125 (diff) | |
download | vmdb2-774909bc40c88b4842be86e71b2810c45edf2270.tar.gz |
Run all teardowns even if one fails
-rw-r--r-- | vmdb/app.py | 36 |
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: |