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.
134 lines
4.6 KiB
134 lines
4.6 KiB
# Lint as: python2, python3
|
|
# Copyright 2016 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Utility functions for AFE-based interactions.
|
|
|
|
NOTE: This module should only be used in the context of a running test. Any
|
|
utilities that require accessing the AFE, should do so by creating
|
|
their own instance of the AFE client and interact with it directly.
|
|
"""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
|
|
import logging
|
|
import traceback
|
|
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.server.cros import provision
|
|
from autotest_lib.server.cros import provisioner
|
|
from autotest_lib.server import site_utils as server_utils
|
|
|
|
|
|
def _log_image_name(image_name):
|
|
try:
|
|
logging.debug("_log_image_name: image (%s)", image_name)
|
|
server_utils.ParseBuildName(name=image_name)
|
|
except Exception:
|
|
logging.error(traceback.format_exc())
|
|
|
|
|
|
def _format_image_name(board, version):
|
|
return "%s-release/%s" % (board, version)
|
|
|
|
|
|
def get_stable_cros_image_name_v2(host_info):
|
|
"""Retrieve the Chrome OS stable image name for a given board.
|
|
|
|
@param host_info: a host_info_store object.
|
|
|
|
@returns Name of a Chrome OS image to be installed in order to
|
|
repair the given board.
|
|
"""
|
|
if not host_info.cros_stable_version:
|
|
raise error.AutoservError("No cros stable_version found"
|
|
" in host_info_store.")
|
|
|
|
logging.debug("Get cros stable_version for board: %s",
|
|
getattr(host_info, "board", None))
|
|
out = _format_image_name(board=host_info.board,
|
|
version=host_info.cros_stable_version)
|
|
_log_image_name(out)
|
|
return out
|
|
|
|
|
|
def get_stable_firmware_version_v2(host_info):
|
|
"""Retrieve the stable firmware version for a given model.
|
|
|
|
@param host_info: a host_info_store object.
|
|
|
|
@returns A version of firmware to be installed via
|
|
`chromeos-firmwareupdate` from a repair build.
|
|
"""
|
|
logging.debug("Get firmware stable_version for model: %s",
|
|
getattr(host_info, "model", None))
|
|
return host_info.firmware_stable_version
|
|
|
|
|
|
def get_stable_faft_version_v2(host_info):
|
|
"""Retrieve the stable firmware version for FAFT DUTs.
|
|
|
|
@param host_info: a host_info_store object.
|
|
|
|
@returns A version of firmware to be installed in order to
|
|
repair firmware on a DUT used for FAFT testing.
|
|
"""
|
|
logging.debug("Get faft stable_version for model: %s",
|
|
getattr(host_info, "model", None))
|
|
return host_info.faft_stable_version
|
|
|
|
|
|
def clean_provision_labels(host):
|
|
"""Clean provision-related labels.
|
|
|
|
@param host: Host object.
|
|
"""
|
|
info = host.host_info_store.get()
|
|
info.clear_version_labels()
|
|
attributes = host.get_attributes_to_clear_before_provision()
|
|
for key in attributes:
|
|
info.attributes.pop(key, None)
|
|
|
|
host.host_info_store.commit(info)
|
|
|
|
|
|
def add_provision_labels(host, version_prefix, image_name,
|
|
provision_attributes={}):
|
|
"""Add provision labels for host.
|
|
|
|
@param host: Host object.
|
|
@param version_prefix: a string version prefix, e.g. "cros-version:"
|
|
@param image_name: a string image name, e.g. peppy-release/R70-11011.0.0.
|
|
@param provision_attributes: a map, including attributes for provisioning,
|
|
e.g. {"job_repo_url": "http://..."}
|
|
"""
|
|
info = host.host_info_store.get()
|
|
info.attributes.update(provision_attributes)
|
|
info.set_version_label(version_prefix, image_name)
|
|
host.host_info_store.commit(info)
|
|
|
|
|
|
def machine_install_and_update_labels(host, update_url, with_cheets=False,
|
|
staging_server=None):
|
|
"""Install a build and update the version labels on a host.
|
|
|
|
@param host: Host object where the build is to be installed.
|
|
@param update_url: URL of the build to install.
|
|
@param with_cheets: If true, installation is for a specific, custom
|
|
version of Android for a target running ARC.
|
|
@param staging_server: Server where images have been staged. Typically,
|
|
an instance of dev_server.ImageServer.
|
|
"""
|
|
clean_provision_labels(host)
|
|
|
|
logging.debug('Attempting to provision with quick-provision.')
|
|
cros_provisioner = provisioner.ChromiumOSProvisioner(update_url, host=host)
|
|
image_name, host_attributes = cros_provisioner.run_provision()
|
|
|
|
if with_cheets:
|
|
image_name += provision.CHEETS_SUFFIX
|
|
add_provision_labels(host, host.VERSION_PREFIX, image_name, host_attributes)
|