You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.5 KiB
69 lines
2.5 KiB
# Copyright (c) 2008 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import logging
|
|
import os
|
|
|
|
from autotest_lib.server import crashcollect
|
|
from autotest_lib.server import utils
|
|
from autotest_lib.server.cros import provision
|
|
|
|
|
|
# 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 repair(machine):
|
|
try:
|
|
hostname = utils.get_hostname_from_machine(machine)
|
|
job.record('START', None, 'repair')
|
|
target = hosts.create_target_machine(machine,
|
|
try_lab_servo=True,
|
|
try_servo_repair=True)
|
|
|
|
try:
|
|
# We don't need to collect logs or crash info if we're a
|
|
# testbed since they're not applicable (yet).
|
|
if (isinstance(target, hosts.CrosHost)
|
|
and target.is_up_fast()
|
|
and target.is_up()
|
|
and target.is_file_system_writable()):
|
|
# Collect logs before the repair, as it might destroy all
|
|
# useful logs.
|
|
local_log_dir = os.path.join(job.resultdir, hostname,
|
|
'before_repair')
|
|
target.collect_logs('/var/log',
|
|
local_log_dir,
|
|
ignore_errors=True)
|
|
# Collect crash info.
|
|
crashcollect.get_crashinfo(target, None)
|
|
except Exception:
|
|
logging.exception('Crash collection failed; crashes may be '
|
|
'lost. Sorry about that.')
|
|
|
|
target.repair()
|
|
logging.debug('Repair with labels list %s', labels_list)
|
|
|
|
try:
|
|
target.labels.update_labels(target,
|
|
task_name='repair',
|
|
keep_pool=True)
|
|
except Exception:
|
|
logging.exception('Exception while updating labels.')
|
|
except Exception:
|
|
logging.exception('Repair failed due to Exception.')
|
|
job.record('END FAIL', None, 'repair')
|
|
# See the provision control segment for the explanation of why we're
|
|
# doing this.
|
|
raise Exception('')
|
|
else:
|
|
job.record('END GOOD', None, 'repair',
|
|
'%s repaired successfully' % hostname)
|
|
|
|
|
|
job.parallel_simple(repair, machines)
|
|
|
|
# vim: set syntax=python :
|