1*9c5db199SXin Liimport logging 2*9c5db199SXin Liimport os 3*9c5db199SXin Li 4*9c5db199SXin Lifrom autotest_lib.client.common_lib import error 5*9c5db199SXin Lifrom autotest_lib.server import utils 6*9c5db199SXin Lifrom autotest_lib.server.cros import provision 7*9c5db199SXin Li 8*9c5db199SXin Litry: 9*9c5db199SXin Li from autotest_lib.utils.frozen_chromite.lib import metrics 10*9c5db199SXin Liexcept ImportError: 11*9c5db199SXin Li metrics = utils.metrics_mock 12*9c5db199SXin Li 13*9c5db199SXin Li 14*9c5db199SXin LiDURATION_METRIC = 'chromeos/autotest/autoserv/cleanup_duration' 15*9c5db199SXin Li 16*9c5db199SXin Li 17*9c5db199SXin Li# A string of the form 'label1,label2:value,label3'. 18*9c5db199SXin Lijob_labels = locals().get('job_labels') or ','.join(args) 19*9c5db199SXin Lilabels_list = [l.strip() for l in job_labels.split(',') if l] 20*9c5db199SXin Li 21*9c5db199SXin Li 22*9c5db199SXin Lidef cleanup(machine): 23*9c5db199SXin Li try: 24*9c5db199SXin Li hostname = utils.get_hostname_from_machine(machine) 25*9c5db199SXin Li job.record('START', None, 'cleanup') 26*9c5db199SXin Li host = hosts.create_host(machine, try_lab_servo=True) 27*9c5db199SXin Li with metrics.SecondsTimer(DURATION_METRIC, 28*9c5db199SXin Li fields={'dut_host_name': hostname}): 29*9c5db199SXin Li # Try to save /var/log files. If the dut is not sshable, try to 30*9c5db199SXin Li # restart with servo, to collect logs for test failed with dut 31*9c5db199SXin Li # not returning from reboot. 32*9c5db199SXin Li # TODO: This is a temp fix and should no longer be necessary 33*9c5db199SXin Li # Depended on crbug.com/336985, fixed in 2015 34*9c5db199SXin Li try: 35*9c5db199SXin Li host.ssh_ping() 36*9c5db199SXin Li except error.AutoservSshPingHostError: 37*9c5db199SXin Li # Try to restart dut with servo. 38*9c5db199SXin Li host._servo_repair_power() 39*9c5db199SXin Li local_log_dir = os.path.join(job.resultdir, hostname) 40*9c5db199SXin Li host.collect_logs('/var/log', local_log_dir, ignore_errors=True) 41*9c5db199SXin Li 42*9c5db199SXin Li host.cleanup() 43*9c5db199SXin Li provision.Cleanup.run_task_actions(job, host, labels_list) 44*9c5db199SXin Li except Exception: 45*9c5db199SXin Li logging.exception('Cleanup failed due to Exception.') 46*9c5db199SXin Li job.record('END FAIL', None, 'cleanup') 47*9c5db199SXin Li # See the provision control segment for the explanation of why we're 48*9c5db199SXin Li # doing this. 49*9c5db199SXin Li raise Exception('') 50*9c5db199SXin Li else: 51*9c5db199SXin Li job.record('END GOOD', None, 'cleanup', 52*9c5db199SXin Li '%s cleaned successfully' % hostname) 53*9c5db199SXin Li 54*9c5db199SXin Li 55*9c5db199SXin Lijob.parallel_simple(cleanup, machines, log=False) 56*9c5db199SXin Li 57*9c5db199SXin Li# vim: set syntax=python : 58