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:
parent
78d5b18182
commit
dc41af1f3f
@ -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
|
||||
|
||||
|
@ -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')
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user