aosp12/external/autotest/server/control_segments/cleanup

58 lines
2.0 KiB
Python

import logging
import os
from autotest_lib.client.common_lib import error
from autotest_lib.server import utils
from autotest_lib.server.cros import provision
try:
from chromite.lib import metrics
except ImportError:
metrics = utils.metrics_mock
DURATION_METRIC = 'chromeos/autotest/autoserv/cleanup_duration'
# A string of the form 'label1,label2:value,label3'.
job_labels = locals().get('job_labels') or ','.join(args)
labels_list = [l.strip() for l in job_labels.split(',') if l]
def cleanup(machine):
try:
hostname = utils.get_hostname_from_machine(machine)
job.record('START', None, 'cleanup')
host = hosts.create_host(machine, try_lab_servo=True)
with metrics.SecondsTimer(DURATION_METRIC,
fields={'dut_host_name': hostname}):
# Try to save /var/log files. If the dut is not sshable, try to
# restart with servo, to collect logs for test failed with dut
# not returning from reboot.
# TODO: This is a temp fix and should no longer be necessary
# Depended on crbug.com/336985, fixed in 2015
try:
host.ssh_ping()
except error.AutoservSshPingHostError:
# Try to restart dut with servo.
host._servo_repair_power()
local_log_dir = os.path.join(job.resultdir, hostname)
host.collect_logs('/var/log', local_log_dir, ignore_errors=True)
host.cleanup()
provision.Cleanup.run_task_actions(job, host, labels_list)
except Exception:
logging.exception('Cleanup failed due to Exception.')
job.record('END FAIL', None, 'cleanup')
# See the provision control segment for the explanation of why we're
# doing this.
raise Exception('')
else:
job.record('END GOOD', None, 'cleanup',
'%s cleaned successfully' % hostname)
job.parallel_simple(cleanup, machines, log=False)
# vim: set syntax=python :