xref: /aosp_15_r20/external/autotest/server/control_segments/cleanup (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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