1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-03-21 01:59:13 +00:00

framework/tm: Ensure RebootPolicy is respected with unresponsive target

Expose the RebootPolicy as an attribute of the ExectionContext and ensure
that that the target is not automatically rebooted if the reboot
policy is set to "Never".
This commit is contained in:
Marc Bonnici 2018-05-22 17:45:59 +01:00 committed by setrofim
parent 78d5b18182
commit dc41af1f3f
3 changed files with 13 additions and 7 deletions

View File

@ -85,6 +85,10 @@ class ExecutionContext(object):
def output_directory(self):
return self.output.basepath
@property
def reboot_policy(self):
return self.cm.run_config.reboot_policy
def __init__(self, cm, tm, output):
self.logger = logging.getLogger('context')
self.cm = cm
@ -486,7 +490,7 @@ class Runner(object):
if isinstance(e, TargetNotRespondingError):
raise e
elif isinstance(e, TargetError):
context.tm.verify_target_responsive()
context.tm.verify_target_responsive(context.reboot_policy.can_reboot)
finally:
self.logger.info('Completing job {}'.format(job.id))
self.send(signal.JOB_COMPLETED)
@ -518,7 +522,7 @@ class Runner(object):
job.set_status(Status.FAILED)
log.log_error(e, self.logger)
if isinstance(e, TargetError) or isinstance(e, TimeoutError):
context.tm.verify_target_responsive()
context.tm.verify_target_responsive(context.reboot_policy.can_reboot)
self.context.record_ui_state('setup-error')
raise e
@ -535,7 +539,7 @@ class Runner(object):
job.set_status(Status.FAILED)
log.log_error(e, self.logger)
if isinstance(e, TargetError) or isinstance(e, TimeoutError):
context.tm.verify_target_responsive()
context.tm.verify_target_responsive(context.reboot_policy.can_reboot)
self.context.record_ui_state('run-error')
raise e
finally:
@ -547,7 +551,7 @@ class Runner(object):
except Exception as e:
job.set_status(Status.PARTIAL)
if isinstance(e, TargetError) or isinstance(e, TimeoutError):
context.tm.verify_target_responsive()
context.tm.verify_target_responsive(context.reboot_policy.can_reboot)
self.context.record_ui_state('output-error')
raise

View File

@ -278,7 +278,7 @@ class ManagedCallback(object):
if isinstance(e, WorkloadError):
context.set_status('FAILED')
elif isinstance(e, TargetError) or isinstance(e, TimeoutError):
context.tm.verify_target_responsive()
context.tm.verify_target_responsive(context.reboot_policy.can_reboot)
else:
if context.current_job:
context.set_status('PARTIAL')

View File

@ -83,10 +83,12 @@ class TargetManager(object):
def commit_runtime_parameters(self, parameters):
self.rpm.commit_runtime_parameters(parameters)
def verify_target_responsive(self):
def verify_target_responsive(self, can_reboot=True):
if not self.target.check_responsive(explode=False):
self.is_responsive = False
if self.target.has('hard_reset'):
if not can_reboot:
raise TargetNotRespondingError('Target unresponsive and is not allowed to reboot.')
elif self.target.has('hard_reset'):
self.logger.info('Target unresponsive; performing hard reset')
self.target.reboot(hard=True)
self.is_responsive = True