blob: 1c033bba546f9f39593efe85ad45ea5fc28fd131 [file] [log] [blame]
# 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)