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 :