1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-03-22 10:38:37 +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): def output_directory(self):
return self.output.basepath return self.output.basepath
@property
def reboot_policy(self):
return self.cm.run_config.reboot_policy
def __init__(self, cm, tm, output): def __init__(self, cm, tm, output):
self.logger = logging.getLogger('context') self.logger = logging.getLogger('context')
self.cm = cm self.cm = cm
@ -486,7 +490,7 @@ class Runner(object):
if isinstance(e, TargetNotRespondingError): if isinstance(e, TargetNotRespondingError):
raise e raise e
elif isinstance(e, TargetError): elif isinstance(e, TargetError):
context.tm.verify_target_responsive() context.tm.verify_target_responsive(context.reboot_policy.can_reboot)
finally: finally:
self.logger.info('Completing job {}'.format(job.id)) self.logger.info('Completing job {}'.format(job.id))
self.send(signal.JOB_COMPLETED) self.send(signal.JOB_COMPLETED)
@ -518,7 +522,7 @@ class Runner(object):
job.set_status(Status.FAILED) job.set_status(Status.FAILED)
log.log_error(e, self.logger) log.log_error(e, self.logger)
if isinstance(e, TargetError) or isinstance(e, TimeoutError): 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') self.context.record_ui_state('setup-error')
raise e raise e
@ -535,7 +539,7 @@ class Runner(object):
job.set_status(Status.FAILED) job.set_status(Status.FAILED)
log.log_error(e, self.logger) log.log_error(e, self.logger)
if isinstance(e, TargetError) or isinstance(e, TimeoutError): 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') self.context.record_ui_state('run-error')
raise e raise e
finally: finally:
@ -547,7 +551,7 @@ class Runner(object):
except Exception as e: except Exception as e:
job.set_status(Status.PARTIAL) job.set_status(Status.PARTIAL)
if isinstance(e, TargetError) or isinstance(e, TimeoutError): 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') self.context.record_ui_state('output-error')
raise raise

View File

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

View File

@ -83,10 +83,12 @@ class TargetManager(object):
def commit_runtime_parameters(self, parameters): def commit_runtime_parameters(self, parameters):
self.rpm.commit_runtime_parameters(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): if not self.target.check_responsive(explode=False):
self.is_responsive = 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.logger.info('Target unresponsive; performing hard reset')
self.target.reboot(hard=True) self.target.reboot(hard=True)
self.is_responsive = True self.is_responsive = True