1*800a58d9SAndroid Build Coastguard Worker#!/usr/bin/env python 2*800a58d9SAndroid Build Coastguard Worker# 3*800a58d9SAndroid Build Coastguard Worker# Copyright 2018 - The Android Open Source Project 4*800a58d9SAndroid Build Coastguard Worker# 5*800a58d9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*800a58d9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*800a58d9SAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*800a58d9SAndroid Build Coastguard Worker# 9*800a58d9SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*800a58d9SAndroid Build Coastguard Worker# 11*800a58d9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*800a58d9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*800a58d9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*800a58d9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*800a58d9SAndroid Build Coastguard Worker# limitations under the License. 16*800a58d9SAndroid Build Coastguard Workerr"""AVDSpec class. 17*800a58d9SAndroid Build Coastguard Worker 18*800a58d9SAndroid Build Coastguard WorkerAVDSpec will take in args from the user and be the main data type that will 19*800a58d9SAndroid Build Coastguard Workerget passed into the create classes. The inferring magic will happen within 20*800a58d9SAndroid Build Coastguard Workerinitialization of AVDSpec (like LKGB build id, image branch, etc). 21*800a58d9SAndroid Build Coastguard Worker""" 22*800a58d9SAndroid Build Coastguard Worker 23*800a58d9SAndroid Build Coastguard Workerimport glob 24*800a58d9SAndroid Build Coastguard Workerimport logging 25*800a58d9SAndroid Build Coastguard Workerimport os 26*800a58d9SAndroid Build Coastguard Workerimport re 27*800a58d9SAndroid Build Coastguard Workerimport subprocess 28*800a58d9SAndroid Build Coastguard Workerimport tempfile 29*800a58d9SAndroid Build Coastguard Workerimport threading 30*800a58d9SAndroid Build Coastguard Worker 31*800a58d9SAndroid Build Coastguard Workerfrom acloud import errors 32*800a58d9SAndroid Build Coastguard Workerfrom acloud.create import create_common 33*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal import constants 34*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import android_build_client 35*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import auth 36*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import utils 37*800a58d9SAndroid Build Coastguard Workerfrom acloud.list import list as list_instance 38*800a58d9SAndroid Build Coastguard Workerfrom acloud.public import config 39*800a58d9SAndroid Build Coastguard Worker 40*800a58d9SAndroid Build Coastguard Worker 41*800a58d9SAndroid Build Coastguard Workerlogger = logging.getLogger(__name__) 42*800a58d9SAndroid Build Coastguard Worker 43*800a58d9SAndroid Build Coastguard Worker# Default values for build target. 44*800a58d9SAndroid Build Coastguard Worker_BRANCH_RE = re.compile(r"^Manifest branch: (?P<branch>.+)") 45*800a58d9SAndroid Build Coastguard Worker_COMMAND_REPO_INFO = "repo info platform/tools/acloud" 46*800a58d9SAndroid Build Coastguard Worker_REPO_TIMEOUT = 3 47*800a58d9SAndroid Build Coastguard Worker_CF_ZIP_PATTERN = "*img*.zip" 48*800a58d9SAndroid Build Coastguard Worker_DEFAULT_BUILD_BITNESS = "x86_64" 49*800a58d9SAndroid Build Coastguard Worker_DEFAULT_BUILD_TYPE = "userdebug" 50*800a58d9SAndroid Build Coastguard Worker_ENV_ANDROID_PRODUCT_OUT = "ANDROID_PRODUCT_OUT" 51*800a58d9SAndroid Build Coastguard Worker_ENV_ANDROID_BUILD_TOP = "ANDROID_BUILD_TOP" 52*800a58d9SAndroid Build Coastguard Worker_GCE_LOCAL_IMAGE_CANDIDATES = ["avd-system.tar.gz", 53*800a58d9SAndroid Build Coastguard Worker "android_system_disk_syslinux.img"] 54*800a58d9SAndroid Build Coastguard Worker_LOCAL_ZIP_WARNING_MSG = "'adb sync' will take a long time if using images " \ 55*800a58d9SAndroid Build Coastguard Worker "built with `m dist`. Building with just `m` will " \ 56*800a58d9SAndroid Build Coastguard Worker "enable a faster 'adb sync' process." 57*800a58d9SAndroid Build Coastguard Worker_RE_ANSI_ESCAPE = re.compile(r"(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]") 58*800a58d9SAndroid Build Coastguard Worker_RE_FLAVOR = re.compile(r"^.+_(?P<flavor>.+)-img.+") 59*800a58d9SAndroid Build Coastguard Worker_RE_MEMORY = re.compile(r"(?P<gb_size>\d+)g$|(?P<mb_size>\d+)m$", 60*800a58d9SAndroid Build Coastguard Worker re.IGNORECASE) 61*800a58d9SAndroid Build Coastguard Worker_RE_INT = re.compile(r"^\d+$") 62*800a58d9SAndroid Build Coastguard Worker_RE_RES = re.compile(r"^(?P<x_res>\d+)x(?P<y_res>\d+)$") 63*800a58d9SAndroid Build Coastguard Worker_X_RES = "x_res" 64*800a58d9SAndroid Build Coastguard Worker_Y_RES = "y_res" 65*800a58d9SAndroid Build Coastguard Worker_COMMAND_GIT_REMOTE = ["git", "remote"] 66*800a58d9SAndroid Build Coastguard Worker 67*800a58d9SAndroid Build Coastguard Worker# The branch prefix is necessary for the Android Build system to know what we're 68*800a58d9SAndroid Build Coastguard Worker# talking about. For instance, on an aosp remote repo in the main branch, 69*800a58d9SAndroid Build Coastguard Worker# Android Build will recognize it as aosp-main. 70*800a58d9SAndroid Build Coastguard Worker_BRANCH_PREFIX = {"aosp": "aosp-"} 71*800a58d9SAndroid Build Coastguard Worker_DEFAULT_BRANCH_PREFIX = "git_" 72*800a58d9SAndroid Build Coastguard Worker_DEFAULT_BRANCH = "aosp-main" 73*800a58d9SAndroid Build Coastguard Worker 74*800a58d9SAndroid Build Coastguard Worker# The target prefix is needed to help concoct the lunch target name given a 75*800a58d9SAndroid Build Coastguard Worker# the branch, avd type and device flavor: 76*800a58d9SAndroid Build Coastguard Worker# aosp, cf and phone -> aosp_cf_x86_phone. 77*800a58d9SAndroid Build Coastguard Worker_BRANCH_TARGET_PREFIX = {"aosp": "aosp_"} 78*800a58d9SAndroid Build Coastguard Worker_BRANCH_TARGET_TRUNK_STAGEING = {"aosp-main": "-trunk_staging", 79*800a58d9SAndroid Build Coastguard Worker "git_main": "-trunk_staging"} 80*800a58d9SAndroid Build Coastguard Worker 81*800a58d9SAndroid Build Coastguard Worker 82*800a58d9SAndroid Build Coastguard Workerdef EscapeAnsi(line): 83*800a58d9SAndroid Build Coastguard Worker """Remove ANSI control sequences (e.g. temrinal color codes...) 84*800a58d9SAndroid Build Coastguard Worker 85*800a58d9SAndroid Build Coastguard Worker Args: 86*800a58d9SAndroid Build Coastguard Worker line: String, one line of command output. 87*800a58d9SAndroid Build Coastguard Worker 88*800a58d9SAndroid Build Coastguard Worker Returns: 89*800a58d9SAndroid Build Coastguard Worker String without ANSI code. 90*800a58d9SAndroid Build Coastguard Worker """ 91*800a58d9SAndroid Build Coastguard Worker return _RE_ANSI_ESCAPE.sub('', line) 92*800a58d9SAndroid Build Coastguard Worker 93*800a58d9SAndroid Build Coastguard Worker 94*800a58d9SAndroid Build Coastguard Worker# pylint: disable=too-many-public-methods,too-many-lines,too-many-statements 95*800a58d9SAndroid Build Coastguard Workerclass AVDSpec(): 96*800a58d9SAndroid Build Coastguard Worker """Class to store data on the type of AVD to create.""" 97*800a58d9SAndroid Build Coastguard Worker 98*800a58d9SAndroid Build Coastguard Worker def __init__(self, args): 99*800a58d9SAndroid Build Coastguard Worker """Process the args into class vars. 100*800a58d9SAndroid Build Coastguard Worker 101*800a58d9SAndroid Build Coastguard Worker Args: 102*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 103*800a58d9SAndroid Build Coastguard Worker """ 104*800a58d9SAndroid Build Coastguard Worker # Let's define the private class vars here and then process the user 105*800a58d9SAndroid Build Coastguard Worker # args afterwards. 106*800a58d9SAndroid Build Coastguard Worker self._client_adb_port = args.adb_port 107*800a58d9SAndroid Build Coastguard Worker self._autoconnect = None 108*800a58d9SAndroid Build Coastguard Worker self._cvd_host_package = None 109*800a58d9SAndroid Build Coastguard Worker self._instance_name_to_reuse = None 110*800a58d9SAndroid Build Coastguard Worker self._unlock_screen = None 111*800a58d9SAndroid Build Coastguard Worker self._report_internal_ip = None 112*800a58d9SAndroid Build Coastguard Worker self._disable_external_ip = None 113*800a58d9SAndroid Build Coastguard Worker self._extra_files = None 114*800a58d9SAndroid Build Coastguard Worker self._avd_type = None 115*800a58d9SAndroid Build Coastguard Worker self._flavor = None 116*800a58d9SAndroid Build Coastguard Worker self._force_sync = None 117*800a58d9SAndroid Build Coastguard Worker self._image_source = None 118*800a58d9SAndroid Build Coastguard Worker self._instance_type = None 119*800a58d9SAndroid Build Coastguard Worker self._launch_args = None 120*800a58d9SAndroid Build Coastguard Worker self._local_image_dir = None 121*800a58d9SAndroid Build Coastguard Worker self._local_image_artifact = None 122*800a58d9SAndroid Build Coastguard Worker self._local_instance_dir = None 123*800a58d9SAndroid Build Coastguard Worker self._local_kernel_image = None 124*800a58d9SAndroid Build Coastguard Worker self._local_system_image = None 125*800a58d9SAndroid Build Coastguard Worker self._local_system_dlkm_image = None 126*800a58d9SAndroid Build Coastguard Worker self._local_vendor_image = None 127*800a58d9SAndroid Build Coastguard Worker self._local_vendor_boot_image = None 128*800a58d9SAndroid Build Coastguard Worker self._local_tool_dirs = None 129*800a58d9SAndroid Build Coastguard Worker self._image_download_dir = None 130*800a58d9SAndroid Build Coastguard Worker self._num_of_instances = None 131*800a58d9SAndroid Build Coastguard Worker self._num_avds_per_instance = None 132*800a58d9SAndroid Build Coastguard Worker self._no_pull_log = None 133*800a58d9SAndroid Build Coastguard Worker self._mkcert = None 134*800a58d9SAndroid Build Coastguard Worker self._oxygen = None 135*800a58d9SAndroid Build Coastguard Worker self._openwrt = None 136*800a58d9SAndroid Build Coastguard Worker self._remote_image = {} 137*800a58d9SAndroid Build Coastguard Worker self._system_build_info = {} 138*800a58d9SAndroid Build Coastguard Worker self._kernel_build_info = {} 139*800a58d9SAndroid Build Coastguard Worker self._boot_build_info = {} 140*800a58d9SAndroid Build Coastguard Worker self._ota_build_info = {} 141*800a58d9SAndroid Build Coastguard Worker self._host_package_build_info = {} 142*800a58d9SAndroid Build Coastguard Worker self._bootloader_build_info = {} 143*800a58d9SAndroid Build Coastguard Worker self._android_efi_loader_build_info = {} 144*800a58d9SAndroid Build Coastguard Worker self._hw_property = None 145*800a58d9SAndroid Build Coastguard Worker self._hw_customize = False 146*800a58d9SAndroid Build Coastguard Worker self._remote_host = None 147*800a58d9SAndroid Build Coastguard Worker self._remote_image_dir = None 148*800a58d9SAndroid Build Coastguard Worker self._gce_metadata = None 149*800a58d9SAndroid Build Coastguard Worker self._gce_only = None 150*800a58d9SAndroid Build Coastguard Worker self._host_user = None 151*800a58d9SAndroid Build Coastguard Worker self._host_ssh_private_key_path = None 152*800a58d9SAndroid Build Coastguard Worker self._gpu = None 153*800a58d9SAndroid Build Coastguard Worker self._disk_type = None 154*800a58d9SAndroid Build Coastguard Worker self._base_instance_num = None 155*800a58d9SAndroid Build Coastguard Worker self._stable_host_image_name = None 156*800a58d9SAndroid Build Coastguard Worker self._use_launch_cvd = None 157*800a58d9SAndroid Build Coastguard Worker self._remote_fetch = None 158*800a58d9SAndroid Build Coastguard Worker self._webrtc_device_id = None 159*800a58d9SAndroid Build Coastguard Worker self._connect_hostname = None 160*800a58d9SAndroid Build Coastguard Worker self._fetch_cvd_wrapper = None 161*800a58d9SAndroid Build Coastguard Worker self._fetch_cvd_version = None 162*800a58d9SAndroid Build Coastguard Worker 163*800a58d9SAndroid Build Coastguard Worker # Create config instance for android_build_client to query build api. 164*800a58d9SAndroid Build Coastguard Worker self._cfg = config.GetAcloudConfig(args) 165*800a58d9SAndroid Build Coastguard Worker # Reporting args. 166*800a58d9SAndroid Build Coastguard Worker self._serial_log_file = None 167*800a58d9SAndroid Build Coastguard Worker # emulator_* are only used for goldfish avd_type. 168*800a58d9SAndroid Build Coastguard Worker self._emulator_build_id = None 169*800a58d9SAndroid Build Coastguard Worker self._emulator_build_target = None 170*800a58d9SAndroid Build Coastguard Worker self._emulator_zip = None 171*800a58d9SAndroid Build Coastguard Worker 172*800a58d9SAndroid Build Coastguard Worker # Fields only used for cheeps type. 173*800a58d9SAndroid Build Coastguard Worker self._stable_cheeps_host_image_name = None 174*800a58d9SAndroid Build Coastguard Worker self._stable_cheeps_host_image_project = None 175*800a58d9SAndroid Build Coastguard Worker self._username = None 176*800a58d9SAndroid Build Coastguard Worker self._password = None 177*800a58d9SAndroid Build Coastguard Worker self._cheeps_betty_image = None 178*800a58d9SAndroid Build Coastguard Worker self._cheeps_features = None 179*800a58d9SAndroid Build Coastguard Worker 180*800a58d9SAndroid Build Coastguard Worker # Fields only used for trusty type. 181*800a58d9SAndroid Build Coastguard Worker self._local_trusty_image = None 182*800a58d9SAndroid Build Coastguard Worker self._trusty_host_package = None 183*800a58d9SAndroid Build Coastguard Worker self._trusty_build_info = {} 184*800a58d9SAndroid Build Coastguard Worker 185*800a58d9SAndroid Build Coastguard Worker # The maximum time in seconds used to wait for the AVD to boot. 186*800a58d9SAndroid Build Coastguard Worker self._boot_timeout_secs = None 187*800a58d9SAndroid Build Coastguard Worker # The maximum time in seconds used to wait for the instance ready. 188*800a58d9SAndroid Build Coastguard Worker self._ins_timeout_secs = None 189*800a58d9SAndroid Build Coastguard Worker 190*800a58d9SAndroid Build Coastguard Worker # The local instance id 191*800a58d9SAndroid Build Coastguard Worker self._local_instance_id = None 192*800a58d9SAndroid Build Coastguard Worker 193*800a58d9SAndroid Build Coastguard Worker self._ProcessArgs(args) 194*800a58d9SAndroid Build Coastguard Worker 195*800a58d9SAndroid Build Coastguard Worker def __repr__(self): 196*800a58d9SAndroid Build Coastguard Worker """Let's make it easy to see what this class is holding.""" 197*800a58d9SAndroid Build Coastguard Worker # TODO: I'm pretty sure there's a better way to do this, but I'm not 198*800a58d9SAndroid Build Coastguard Worker # quite sure what that would be. 199*800a58d9SAndroid Build Coastguard Worker representation = [] 200*800a58d9SAndroid Build Coastguard Worker representation.append("") 201*800a58d9SAndroid Build Coastguard Worker representation.append(" - instance_type: %s" % self._instance_type) 202*800a58d9SAndroid Build Coastguard Worker representation.append(" - avd type: %s" % self._avd_type) 203*800a58d9SAndroid Build Coastguard Worker representation.append(" - flavor: %s" % self._flavor) 204*800a58d9SAndroid Build Coastguard Worker representation.append(" - autoconnect: %s" % self._autoconnect) 205*800a58d9SAndroid Build Coastguard Worker representation.append(" - num of instances requested: %s" % 206*800a58d9SAndroid Build Coastguard Worker self._num_of_instances) 207*800a58d9SAndroid Build Coastguard Worker representation.append(" - image source type: %s" % 208*800a58d9SAndroid Build Coastguard Worker self._image_source) 209*800a58d9SAndroid Build Coastguard Worker image_summary = None 210*800a58d9SAndroid Build Coastguard Worker image_details = None 211*800a58d9SAndroid Build Coastguard Worker if self._image_source == constants.IMAGE_SRC_LOCAL: 212*800a58d9SAndroid Build Coastguard Worker image_summary = "local image dir" 213*800a58d9SAndroid Build Coastguard Worker image_details = self._local_image_dir 214*800a58d9SAndroid Build Coastguard Worker representation.append(" - instance id: %s" % self._local_instance_id) 215*800a58d9SAndroid Build Coastguard Worker elif self._image_source == constants.IMAGE_SRC_REMOTE: 216*800a58d9SAndroid Build Coastguard Worker image_summary = "remote image details" 217*800a58d9SAndroid Build Coastguard Worker image_details = self._remote_image 218*800a58d9SAndroid Build Coastguard Worker representation.append(" - %s: %s" % (image_summary, image_details)) 219*800a58d9SAndroid Build Coastguard Worker representation.append(" - hw properties: %s" % 220*800a58d9SAndroid Build Coastguard Worker self._hw_property) 221*800a58d9SAndroid Build Coastguard Worker return "\n".join(representation) 222*800a58d9SAndroid Build Coastguard Worker 223*800a58d9SAndroid Build Coastguard Worker def _ProcessArgs(self, args): 224*800a58d9SAndroid Build Coastguard Worker """Main entry point to process args for the different type of args. 225*800a58d9SAndroid Build Coastguard Worker 226*800a58d9SAndroid Build Coastguard Worker Split up the arg processing into related areas (image, instance type, 227*800a58d9SAndroid Build Coastguard Worker etc) so that we don't have one huge monolilthic method that does 228*800a58d9SAndroid Build Coastguard Worker everything. It makes it easier to review, write tests, and maintain. 229*800a58d9SAndroid Build Coastguard Worker 230*800a58d9SAndroid Build Coastguard Worker Args: 231*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 232*800a58d9SAndroid Build Coastguard Worker """ 233*800a58d9SAndroid Build Coastguard Worker self._ProcessMiscArgs(args) 234*800a58d9SAndroid Build Coastguard Worker self._ProcessImageArgs(args) 235*800a58d9SAndroid Build Coastguard Worker self._ProcessHWPropertyArgs(args) 236*800a58d9SAndroid Build Coastguard Worker self._ProcessAutoconnect() 237*800a58d9SAndroid Build Coastguard Worker 238*800a58d9SAndroid Build Coastguard Worker def _ProcessAutoconnect(self): 239*800a58d9SAndroid Build Coastguard Worker """Process autoconnect. 240*800a58d9SAndroid Build Coastguard Worker 241*800a58d9SAndroid Build Coastguard Worker Only Cuttlefish AVD support 'webrtc' and need to default use 'webrtc'. 242*800a58d9SAndroid Build Coastguard Worker Other AVD types(goldfish, cheeps..etc.) still keep using ‘vnc’. 243*800a58d9SAndroid Build Coastguard Worker """ 244*800a58d9SAndroid Build Coastguard Worker if self._autoconnect == constants.INS_KEY_WEBRTC: 245*800a58d9SAndroid Build Coastguard Worker if self.avd_type != constants.TYPE_CF: 246*800a58d9SAndroid Build Coastguard Worker self._autoconnect = constants.INS_KEY_VNC 247*800a58d9SAndroid Build Coastguard Worker 248*800a58d9SAndroid Build Coastguard Worker def _ProcessImageArgs(self, args): 249*800a58d9SAndroid Build Coastguard Worker """ Process Image Args. 250*800a58d9SAndroid Build Coastguard Worker 251*800a58d9SAndroid Build Coastguard Worker Args: 252*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 253*800a58d9SAndroid Build Coastguard Worker """ 254*800a58d9SAndroid Build Coastguard Worker # If user didn't specify --local-image, infer remote image args 255*800a58d9SAndroid Build Coastguard Worker if args.local_image is None: 256*800a58d9SAndroid Build Coastguard Worker self._image_source = constants.IMAGE_SRC_REMOTE 257*800a58d9SAndroid Build Coastguard Worker self._ProcessRemoteBuildArgs(args) 258*800a58d9SAndroid Build Coastguard Worker else: 259*800a58d9SAndroid Build Coastguard Worker self._image_source = constants.IMAGE_SRC_LOCAL 260*800a58d9SAndroid Build Coastguard Worker self._ProcessLocalImageArgs(args) 261*800a58d9SAndroid Build Coastguard Worker 262*800a58d9SAndroid Build Coastguard Worker if args.local_kernel_image is not None: 263*800a58d9SAndroid Build Coastguard Worker self._local_kernel_image = self._GetLocalImagePath( 264*800a58d9SAndroid Build Coastguard Worker args.local_kernel_image) 265*800a58d9SAndroid Build Coastguard Worker 266*800a58d9SAndroid Build Coastguard Worker if args.local_system_image is not None: 267*800a58d9SAndroid Build Coastguard Worker self._local_system_image = self._GetLocalImagePath( 268*800a58d9SAndroid Build Coastguard Worker args.local_system_image) 269*800a58d9SAndroid Build Coastguard Worker 270*800a58d9SAndroid Build Coastguard Worker if args.local_system_dlkm_image is not None: 271*800a58d9SAndroid Build Coastguard Worker self._local_system_dlkm_image = self._GetLocalImagePath( 272*800a58d9SAndroid Build Coastguard Worker args.local_system_dlkm_image) 273*800a58d9SAndroid Build Coastguard Worker 274*800a58d9SAndroid Build Coastguard Worker if args.local_vendor_image is not None: 275*800a58d9SAndroid Build Coastguard Worker self._local_vendor_image = self._GetLocalImagePath( 276*800a58d9SAndroid Build Coastguard Worker args.local_vendor_image) 277*800a58d9SAndroid Build Coastguard Worker 278*800a58d9SAndroid Build Coastguard Worker if args.local_vendor_boot_image is not None: 279*800a58d9SAndroid Build Coastguard Worker self._local_vendor_boot_image = self._GetLocalImagePath( 280*800a58d9SAndroid Build Coastguard Worker args.local_vendor_boot_image) 281*800a58d9SAndroid Build Coastguard Worker 282*800a58d9SAndroid Build Coastguard Worker self.image_download_dir = ( 283*800a58d9SAndroid Build Coastguard Worker args.image_download_dir if args.image_download_dir 284*800a58d9SAndroid Build Coastguard Worker else tempfile.gettempdir()) 285*800a58d9SAndroid Build Coastguard Worker 286*800a58d9SAndroid Build Coastguard Worker @staticmethod 287*800a58d9SAndroid Build Coastguard Worker def _ParseHWPropertyStr(hw_property_str): 288*800a58d9SAndroid Build Coastguard Worker """Parse string to dict. 289*800a58d9SAndroid Build Coastguard Worker 290*800a58d9SAndroid Build Coastguard Worker Args: 291*800a58d9SAndroid Build Coastguard Worker hw_property_str: A hw properties string. 292*800a58d9SAndroid Build Coastguard Worker 293*800a58d9SAndroid Build Coastguard Worker Returns: 294*800a58d9SAndroid Build Coastguard Worker Dict converted from a string. 295*800a58d9SAndroid Build Coastguard Worker 296*800a58d9SAndroid Build Coastguard Worker Raises: 297*800a58d9SAndroid Build Coastguard Worker error.MalformedHWPropertyError: If hw_property_str is malformed. 298*800a58d9SAndroid Build Coastguard Worker """ 299*800a58d9SAndroid Build Coastguard Worker hw_dict = create_common.ParseKeyValuePairArgs(hw_property_str) 300*800a58d9SAndroid Build Coastguard Worker arg_hw_properties = {} 301*800a58d9SAndroid Build Coastguard Worker for key, value in hw_dict.items(): 302*800a58d9SAndroid Build Coastguard Worker # Parsing HW properties int to avdspec. 303*800a58d9SAndroid Build Coastguard Worker if key == constants.HW_ALIAS_RESOLUTION: 304*800a58d9SAndroid Build Coastguard Worker match = _RE_RES.match(value) 305*800a58d9SAndroid Build Coastguard Worker if match: 306*800a58d9SAndroid Build Coastguard Worker arg_hw_properties[_X_RES] = match.group("x_res") 307*800a58d9SAndroid Build Coastguard Worker arg_hw_properties[_Y_RES] = match.group("y_res") 308*800a58d9SAndroid Build Coastguard Worker else: 309*800a58d9SAndroid Build Coastguard Worker raise errors.InvalidHWPropertyError( 310*800a58d9SAndroid Build Coastguard Worker "[%s] is an invalid resolution. Example:1280x800" % value) 311*800a58d9SAndroid Build Coastguard Worker elif key in [constants.HW_ALIAS_MEMORY, constants.HW_ALIAS_DISK]: 312*800a58d9SAndroid Build Coastguard Worker match = _RE_MEMORY.match(value) 313*800a58d9SAndroid Build Coastguard Worker if match and match.group("gb_size"): 314*800a58d9SAndroid Build Coastguard Worker arg_hw_properties[key] = str( 315*800a58d9SAndroid Build Coastguard Worker int(match.group("gb_size")) * 1024) 316*800a58d9SAndroid Build Coastguard Worker elif match and match.group("mb_size"): 317*800a58d9SAndroid Build Coastguard Worker arg_hw_properties[key] = match.group("mb_size") 318*800a58d9SAndroid Build Coastguard Worker else: 319*800a58d9SAndroid Build Coastguard Worker raise errors.InvalidHWPropertyError( 320*800a58d9SAndroid Build Coastguard Worker "Expected gb size.[%s] is not allowed. Example:4g" % value) 321*800a58d9SAndroid Build Coastguard Worker elif key in [constants.HW_ALIAS_CPUS, constants.HW_ALIAS_DPI]: 322*800a58d9SAndroid Build Coastguard Worker if not _RE_INT.match(value): 323*800a58d9SAndroid Build Coastguard Worker raise errors.InvalidHWPropertyError( 324*800a58d9SAndroid Build Coastguard Worker "%s value [%s] is not an integer." % (key, value)) 325*800a58d9SAndroid Build Coastguard Worker arg_hw_properties[key] = value 326*800a58d9SAndroid Build Coastguard Worker 327*800a58d9SAndroid Build Coastguard Worker return arg_hw_properties 328*800a58d9SAndroid Build Coastguard Worker 329*800a58d9SAndroid Build Coastguard Worker def _ProcessHWPropertyArgs(self, args): 330*800a58d9SAndroid Build Coastguard Worker """Get the HW properties from argparse.parse_args. 331*800a58d9SAndroid Build Coastguard Worker 332*800a58d9SAndroid Build Coastguard Worker This method will initialize _hw_property in the following 333*800a58d9SAndroid Build Coastguard Worker manner: 334*800a58d9SAndroid Build Coastguard Worker 1. Get default hw properties from flavor. 335*800a58d9SAndroid Build Coastguard Worker 2. Override hw properties from config. 336*800a58d9SAndroid Build Coastguard Worker 3. Override by hw_property args. 337*800a58d9SAndroid Build Coastguard Worker 338*800a58d9SAndroid Build Coastguard Worker Args: 339*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 340*800a58d9SAndroid Build Coastguard Worker """ 341*800a58d9SAndroid Build Coastguard Worker self._hw_property = {} 342*800a58d9SAndroid Build Coastguard Worker default_property = self._cfg.GetDefaultHwProperty(self._flavor, 343*800a58d9SAndroid Build Coastguard Worker self._instance_type) 344*800a58d9SAndroid Build Coastguard Worker self._hw_property = self._ParseHWPropertyStr(default_property) 345*800a58d9SAndroid Build Coastguard Worker logger.debug("Default hw property for [%s] flavor: %s", self._flavor, 346*800a58d9SAndroid Build Coastguard Worker self._hw_property) 347*800a58d9SAndroid Build Coastguard Worker if self._cfg.hw_property: 348*800a58d9SAndroid Build Coastguard Worker self._hw_customize = True 349*800a58d9SAndroid Build Coastguard Worker cfg_hw_property = self._ParseHWPropertyStr(self._cfg.hw_property) 350*800a58d9SAndroid Build Coastguard Worker logger.debug("Hw property from config: %s", cfg_hw_property) 351*800a58d9SAndroid Build Coastguard Worker self._hw_property.update(cfg_hw_property) 352*800a58d9SAndroid Build Coastguard Worker 353*800a58d9SAndroid Build Coastguard Worker if args.hw_property: 354*800a58d9SAndroid Build Coastguard Worker self._hw_customize = True 355*800a58d9SAndroid Build Coastguard Worker arg_hw_property = self._ParseHWPropertyStr(args.hw_property) 356*800a58d9SAndroid Build Coastguard Worker logger.debug("Use custom hw property: %s", arg_hw_property) 357*800a58d9SAndroid Build Coastguard Worker self._hw_property.update(arg_hw_property) 358*800a58d9SAndroid Build Coastguard Worker 359*800a58d9SAndroid Build Coastguard Worker def _ProcessMiscArgs(self, args): 360*800a58d9SAndroid Build Coastguard Worker """These args we can take as and don't belong to a group of args. 361*800a58d9SAndroid Build Coastguard Worker 362*800a58d9SAndroid Build Coastguard Worker Args: 363*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 364*800a58d9SAndroid Build Coastguard Worker """ 365*800a58d9SAndroid Build Coastguard Worker self._autoconnect = args.autoconnect 366*800a58d9SAndroid Build Coastguard Worker self._unlock_screen = args.unlock_screen 367*800a58d9SAndroid Build Coastguard Worker self._report_internal_ip = args.report_internal_ip 368*800a58d9SAndroid Build Coastguard Worker self._disable_external_ip = args.disable_external_ip 369*800a58d9SAndroid Build Coastguard Worker self._avd_type = args.avd_type 370*800a58d9SAndroid Build Coastguard Worker self._extra_files = create_common.ParseExtraFilesArgs(args.extra_files) 371*800a58d9SAndroid Build Coastguard Worker self._flavor = args.flavor or constants.FLAVOR_PHONE 372*800a58d9SAndroid Build Coastguard Worker self._force_sync = args.force_sync 373*800a58d9SAndroid Build Coastguard Worker if args.remote_host: 374*800a58d9SAndroid Build Coastguard Worker self._instance_type = constants.INSTANCE_TYPE_HOST 375*800a58d9SAndroid Build Coastguard Worker else: 376*800a58d9SAndroid Build Coastguard Worker self._instance_type = (constants.INSTANCE_TYPE_REMOTE 377*800a58d9SAndroid Build Coastguard Worker if args.local_instance is None else 378*800a58d9SAndroid Build Coastguard Worker constants.INSTANCE_TYPE_LOCAL) 379*800a58d9SAndroid Build Coastguard Worker self._remote_host = args.remote_host 380*800a58d9SAndroid Build Coastguard Worker self._remote_image_dir = args.remote_image_dir 381*800a58d9SAndroid Build Coastguard Worker self._host_user = args.host_user 382*800a58d9SAndroid Build Coastguard Worker self._host_ssh_private_key_path = args.host_ssh_private_key_path 383*800a58d9SAndroid Build Coastguard Worker self._local_instance_id = args.local_instance 384*800a58d9SAndroid Build Coastguard Worker self._local_instance_dir = args.local_instance_dir 385*800a58d9SAndroid Build Coastguard Worker self._local_tool_dirs = args.local_tool 386*800a58d9SAndroid Build Coastguard Worker self._cvd_host_package = args.cvd_host_package 387*800a58d9SAndroid Build Coastguard Worker self._trusty_host_package = args.trusty_host_package 388*800a58d9SAndroid Build Coastguard Worker self._num_of_instances = args.num 389*800a58d9SAndroid Build Coastguard Worker self._num_avds_per_instance = args.num_avds_per_instance 390*800a58d9SAndroid Build Coastguard Worker self._no_pull_log = args.no_pull_log 391*800a58d9SAndroid Build Coastguard Worker self._mkcert = args.mkcert 392*800a58d9SAndroid Build Coastguard Worker self._oxygen = args.oxygen 393*800a58d9SAndroid Build Coastguard Worker self._openwrt = args.openwrt 394*800a58d9SAndroid Build Coastguard Worker self._use_launch_cvd = args.use_launch_cvd 395*800a58d9SAndroid Build Coastguard Worker self._serial_log_file = args.serial_log_file 396*800a58d9SAndroid Build Coastguard Worker self._emulator_build_id = args.emulator_build_id 397*800a58d9SAndroid Build Coastguard Worker self._emulator_build_target = (args.emulator_build_target 398*800a58d9SAndroid Build Coastguard Worker or self._cfg.emulator_build_target) 399*800a58d9SAndroid Build Coastguard Worker self._emulator_zip = args.emulator_zip 400*800a58d9SAndroid Build Coastguard Worker self._gpu = args.gpu 401*800a58d9SAndroid Build Coastguard Worker self._disk_type = (args.disk_type or self._cfg.disk_type) 402*800a58d9SAndroid Build Coastguard Worker self._base_instance_num = args.base_instance_num 403*800a58d9SAndroid Build Coastguard Worker self._gce_only = args.gce_only 404*800a58d9SAndroid Build Coastguard Worker self._gce_metadata = create_common.ParseKeyValuePairArgs(args.gce_metadata) 405*800a58d9SAndroid Build Coastguard Worker self._stable_host_image_name = ( 406*800a58d9SAndroid Build Coastguard Worker args.stable_host_image_name or self._cfg.stable_host_image_name) 407*800a58d9SAndroid Build Coastguard Worker 408*800a58d9SAndroid Build Coastguard Worker self._stable_cheeps_host_image_name = args.stable_cheeps_host_image_name 409*800a58d9SAndroid Build Coastguard Worker self._stable_cheeps_host_image_project = args.stable_cheeps_host_image_project 410*800a58d9SAndroid Build Coastguard Worker self._username = args.username 411*800a58d9SAndroid Build Coastguard Worker self._password = args.password 412*800a58d9SAndroid Build Coastguard Worker self._cheeps_betty_image = ( 413*800a58d9SAndroid Build Coastguard Worker args.cheeps_betty_image or self._cfg.betty_image) 414*800a58d9SAndroid Build Coastguard Worker self._cheeps_features = args.cheeps_features 415*800a58d9SAndroid Build Coastguard Worker 416*800a58d9SAndroid Build Coastguard Worker self._boot_timeout_secs = args.boot_timeout_secs 417*800a58d9SAndroid Build Coastguard Worker self._ins_timeout_secs = args.ins_timeout_secs 418*800a58d9SAndroid Build Coastguard Worker self._launch_args = " ".join( 419*800a58d9SAndroid Build Coastguard Worker list(filter(None, [self._cfg.launch_args, args.launch_args]))) 420*800a58d9SAndroid Build Coastguard Worker self._remote_fetch = args.remote_fetch 421*800a58d9SAndroid Build Coastguard Worker self._webrtc_device_id = args.webrtc_device_id 422*800a58d9SAndroid Build Coastguard Worker self._connect_hostname = args.connect_hostname or self._cfg.connect_hostname 423*800a58d9SAndroid Build Coastguard Worker self._fetch_cvd_wrapper = args.fetch_cvd_wrapper 424*800a58d9SAndroid Build Coastguard Worker self._fetch_cvd_version = self._GetFetchCVDVersion(args) 425*800a58d9SAndroid Build Coastguard Worker 426*800a58d9SAndroid Build Coastguard Worker if args.reuse_gce: 427*800a58d9SAndroid Build Coastguard Worker if args.reuse_gce != constants.SELECT_ONE_GCE_INSTANCE: 428*800a58d9SAndroid Build Coastguard Worker if list_instance.GetInstancesFromInstanceNames( 429*800a58d9SAndroid Build Coastguard Worker self._cfg, [args.reuse_gce]): 430*800a58d9SAndroid Build Coastguard Worker self._instance_name_to_reuse = args.reuse_gce 431*800a58d9SAndroid Build Coastguard Worker if self._instance_name_to_reuse is None: 432*800a58d9SAndroid Build Coastguard Worker instance = list_instance.ChooseOneRemoteInstance(self._cfg) 433*800a58d9SAndroid Build Coastguard Worker self._instance_name_to_reuse = instance.name 434*800a58d9SAndroid Build Coastguard Worker 435*800a58d9SAndroid Build Coastguard Worker self._local_trusty_image = args.local_trusty_image 436*800a58d9SAndroid Build Coastguard Worker self._trusty_build_info = { 437*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: args.trusty_build_id, 438*800a58d9SAndroid Build Coastguard Worker constants.BUILD_BRANCH: args.trusty_branch, 439*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: args.trusty_build_target} 440*800a58d9SAndroid Build Coastguard Worker 441*800a58d9SAndroid Build Coastguard Worker def _GetFetchCVDVersion(self, args): 442*800a58d9SAndroid Build Coastguard Worker """Get the fetch_cvd version. 443*800a58d9SAndroid Build Coastguard Worker 444*800a58d9SAndroid Build Coastguard Worker Acloud will get the LKGB of fetch_cvd if no version specified. 445*800a58d9SAndroid Build Coastguard Worker 446*800a58d9SAndroid Build Coastguard Worker Args: 447*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 448*800a58d9SAndroid Build Coastguard Worker 449*800a58d9SAndroid Build Coastguard Worker Returns: 450*800a58d9SAndroid Build Coastguard Worker The build id of fetch_cvd. 451*800a58d9SAndroid Build Coastguard Worker """ 452*800a58d9SAndroid Build Coastguard Worker if args.fetch_cvd_build_id: 453*800a58d9SAndroid Build Coastguard Worker return args.fetch_cvd_build_id 454*800a58d9SAndroid Build Coastguard Worker return constants.LKGB 455*800a58d9SAndroid Build Coastguard Worker 456*800a58d9SAndroid Build Coastguard Worker @staticmethod 457*800a58d9SAndroid Build Coastguard Worker def _GetFlavorFromString(flavor_string): 458*800a58d9SAndroid Build Coastguard Worker """Get flavor name from flavor string. 459*800a58d9SAndroid Build Coastguard Worker 460*800a58d9SAndroid Build Coastguard Worker Flavor string can come from the zipped image name or the lunch target. 461*800a58d9SAndroid Build Coastguard Worker e.g. 462*800a58d9SAndroid Build Coastguard Worker If flavor_string come from zipped name:aosp_cf_x86_phone-img-5455843.zip 463*800a58d9SAndroid Build Coastguard Worker , then "phone" is the flavor. 464*800a58d9SAndroid Build Coastguard Worker If flavor_string come from a lunch'd target:aosp_cf_x86_auto-userdebug, 465*800a58d9SAndroid Build Coastguard Worker then "auto" is the flavor. 466*800a58d9SAndroid Build Coastguard Worker 467*800a58d9SAndroid Build Coastguard Worker Args: 468*800a58d9SAndroid Build Coastguard Worker flavor_string: String which contains flavor.It can be a 469*800a58d9SAndroid Build Coastguard Worker build target or filename. 470*800a58d9SAndroid Build Coastguard Worker 471*800a58d9SAndroid Build Coastguard Worker Returns: 472*800a58d9SAndroid Build Coastguard Worker String of flavor name. None if flavor can't be determined. 473*800a58d9SAndroid Build Coastguard Worker """ 474*800a58d9SAndroid Build Coastguard Worker for flavor in constants.ALL_FLAVORS: 475*800a58d9SAndroid Build Coastguard Worker if re.match(r"(.*_)?%s" % flavor, flavor_string): 476*800a58d9SAndroid Build Coastguard Worker return flavor 477*800a58d9SAndroid Build Coastguard Worker 478*800a58d9SAndroid Build Coastguard Worker logger.debug("Unable to determine flavor from build target: %s", 479*800a58d9SAndroid Build Coastguard Worker flavor_string) 480*800a58d9SAndroid Build Coastguard Worker return None 481*800a58d9SAndroid Build Coastguard Worker 482*800a58d9SAndroid Build Coastguard Worker def _ProcessLocalImageArgs(self, args): 483*800a58d9SAndroid Build Coastguard Worker """Get local image path. 484*800a58d9SAndroid Build Coastguard Worker 485*800a58d9SAndroid Build Coastguard Worker Args: 486*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 487*800a58d9SAndroid Build Coastguard Worker """ 488*800a58d9SAndroid Build Coastguard Worker if self._avd_type == constants.TYPE_CF: 489*800a58d9SAndroid Build Coastguard Worker self._ProcessCFLocalImageArgs(args.local_image, args.flavor) 490*800a58d9SAndroid Build Coastguard Worker elif self._avd_type == constants.TYPE_FVP: 491*800a58d9SAndroid Build Coastguard Worker self._ProcessFVPLocalImageArgs() 492*800a58d9SAndroid Build Coastguard Worker elif self._avd_type == constants.TYPE_TRUSTY: 493*800a58d9SAndroid Build Coastguard Worker self._ProcessTrustyLocalImageArgs(args.local_image) 494*800a58d9SAndroid Build Coastguard Worker elif self._avd_type == constants.TYPE_GF: 495*800a58d9SAndroid Build Coastguard Worker local_image_path = self._GetLocalImagePath(args.local_image) 496*800a58d9SAndroid Build Coastguard Worker if os.path.isdir(local_image_path): 497*800a58d9SAndroid Build Coastguard Worker self._local_image_dir = local_image_path 498*800a58d9SAndroid Build Coastguard Worker else: 499*800a58d9SAndroid Build Coastguard Worker self._local_image_artifact = local_image_path 500*800a58d9SAndroid Build Coastguard Worker elif self._avd_type == constants.TYPE_GCE: 501*800a58d9SAndroid Build Coastguard Worker self._local_image_artifact = self._GetGceLocalImagePath( 502*800a58d9SAndroid Build Coastguard Worker args.local_image) 503*800a58d9SAndroid Build Coastguard Worker else: 504*800a58d9SAndroid Build Coastguard Worker raise errors.CreateError( 505*800a58d9SAndroid Build Coastguard Worker "Local image doesn't support the AVD type: %s" % self._avd_type 506*800a58d9SAndroid Build Coastguard Worker ) 507*800a58d9SAndroid Build Coastguard Worker 508*800a58d9SAndroid Build Coastguard Worker @staticmethod 509*800a58d9SAndroid Build Coastguard Worker def _GetGceLocalImagePath(local_image_dir): 510*800a58d9SAndroid Build Coastguard Worker """Get gce local image path. 511*800a58d9SAndroid Build Coastguard Worker 512*800a58d9SAndroid Build Coastguard Worker Choose image file in local_image_dir over $ANDROID_PRODUCT_OUT. 513*800a58d9SAndroid Build Coastguard Worker There are various img files so we prioritize returning the one we find 514*800a58d9SAndroid Build Coastguard Worker first based in the specified order in _GCE_LOCAL_IMAGE_CANDIDATES. 515*800a58d9SAndroid Build Coastguard Worker 516*800a58d9SAndroid Build Coastguard Worker Args: 517*800a58d9SAndroid Build Coastguard Worker local_image_dir: A string to specify local image dir. 518*800a58d9SAndroid Build Coastguard Worker 519*800a58d9SAndroid Build Coastguard Worker Returns: 520*800a58d9SAndroid Build Coastguard Worker String, image file path if exists. 521*800a58d9SAndroid Build Coastguard Worker 522*800a58d9SAndroid Build Coastguard Worker Raises: 523*800a58d9SAndroid Build Coastguard Worker errors.ImgDoesNotExist if image doesn't exist. 524*800a58d9SAndroid Build Coastguard Worker """ 525*800a58d9SAndroid Build Coastguard Worker # IF the user specified a file, return it 526*800a58d9SAndroid Build Coastguard Worker if local_image_dir and os.path.isfile(local_image_dir): 527*800a58d9SAndroid Build Coastguard Worker return local_image_dir 528*800a58d9SAndroid Build Coastguard Worker 529*800a58d9SAndroid Build Coastguard Worker # If the user didn't specify a dir, assume $ANDROID_PRODUCT_OUT 530*800a58d9SAndroid Build Coastguard Worker if not local_image_dir: 531*800a58d9SAndroid Build Coastguard Worker local_image_dir = utils.GetBuildEnvironmentVariable( 532*800a58d9SAndroid Build Coastguard Worker _ENV_ANDROID_PRODUCT_OUT) 533*800a58d9SAndroid Build Coastguard Worker 534*800a58d9SAndroid Build Coastguard Worker for img_name in _GCE_LOCAL_IMAGE_CANDIDATES: 535*800a58d9SAndroid Build Coastguard Worker full_file_path = os.path.join(local_image_dir, img_name) 536*800a58d9SAndroid Build Coastguard Worker if os.path.exists(full_file_path): 537*800a58d9SAndroid Build Coastguard Worker return full_file_path 538*800a58d9SAndroid Build Coastguard Worker 539*800a58d9SAndroid Build Coastguard Worker raise errors.ImgDoesNotExist("Could not find any GCE images (%s), you " 540*800a58d9SAndroid Build Coastguard Worker "can build them via \"m dist\"" % 541*800a58d9SAndroid Build Coastguard Worker ", ".join(_GCE_LOCAL_IMAGE_CANDIDATES)) 542*800a58d9SAndroid Build Coastguard Worker 543*800a58d9SAndroid Build Coastguard Worker @staticmethod 544*800a58d9SAndroid Build Coastguard Worker def _GetLocalImagePath(local_image_arg): 545*800a58d9SAndroid Build Coastguard Worker """Get local image path from argument or environment variable. 546*800a58d9SAndroid Build Coastguard Worker 547*800a58d9SAndroid Build Coastguard Worker Args: 548*800a58d9SAndroid Build Coastguard Worker local_image_arg: The path to the unzipped image package. If the 549*800a58d9SAndroid Build Coastguard Worker value is empty, this method returns 550*800a58d9SAndroid Build Coastguard Worker ANDROID_PRODUCT_OUT in build environment. 551*800a58d9SAndroid Build Coastguard Worker 552*800a58d9SAndroid Build Coastguard Worker Returns: 553*800a58d9SAndroid Build Coastguard Worker String, the path to the image file or directory. 554*800a58d9SAndroid Build Coastguard Worker 555*800a58d9SAndroid Build Coastguard Worker Raises: 556*800a58d9SAndroid Build Coastguard Worker errors.GetLocalImageError if the path does not exist. 557*800a58d9SAndroid Build Coastguard Worker """ 558*800a58d9SAndroid Build Coastguard Worker if local_image_arg == constants.FIND_IN_BUILD_ENV: 559*800a58d9SAndroid Build Coastguard Worker image_path = utils.GetBuildEnvironmentVariable( 560*800a58d9SAndroid Build Coastguard Worker constants.ENV_ANDROID_PRODUCT_OUT) 561*800a58d9SAndroid Build Coastguard Worker else: 562*800a58d9SAndroid Build Coastguard Worker image_path = local_image_arg 563*800a58d9SAndroid Build Coastguard Worker 564*800a58d9SAndroid Build Coastguard Worker if not os.path.exists(image_path): 565*800a58d9SAndroid Build Coastguard Worker raise errors.GetLocalImageError("%s does not exist." % 566*800a58d9SAndroid Build Coastguard Worker local_image_arg) 567*800a58d9SAndroid Build Coastguard Worker return image_path 568*800a58d9SAndroid Build Coastguard Worker 569*800a58d9SAndroid Build Coastguard Worker def _ProcessCFLocalImageArgs(self, local_image_arg, flavor_arg): 570*800a58d9SAndroid Build Coastguard Worker """Get local built image path for cuttlefish-type AVD. 571*800a58d9SAndroid Build Coastguard Worker 572*800a58d9SAndroid Build Coastguard Worker Two scenarios of using --local-image: 573*800a58d9SAndroid Build Coastguard Worker - Without a following argument 574*800a58d9SAndroid Build Coastguard Worker Set flavor string if the required images are in $ANDROID_PRODUCT_OUT, 575*800a58d9SAndroid Build Coastguard Worker - With a following filename/dirname 576*800a58d9SAndroid Build Coastguard Worker Set flavor string from the specified image/dir name. 577*800a58d9SAndroid Build Coastguard Worker 578*800a58d9SAndroid Build Coastguard Worker Args: 579*800a58d9SAndroid Build Coastguard Worker local_image_arg: String of local image args. 580*800a58d9SAndroid Build Coastguard Worker flavor_arg: String of flavor arg 581*800a58d9SAndroid Build Coastguard Worker 582*800a58d9SAndroid Build Coastguard Worker """ 583*800a58d9SAndroid Build Coastguard Worker flavor_from_build_string = None 584*800a58d9SAndroid Build Coastguard Worker if local_image_arg == constants.FIND_IN_BUILD_ENV: 585*800a58d9SAndroid Build Coastguard Worker self._CheckCFBuildTarget(self._instance_type) 586*800a58d9SAndroid Build Coastguard Worker local_image_path = utils.GetBuildEnvironmentVariable( 587*800a58d9SAndroid Build Coastguard Worker _ENV_ANDROID_PRODUCT_OUT) 588*800a58d9SAndroid Build Coastguard Worker # Since dir is provided, check that any images exist to ensure user 589*800a58d9SAndroid Build Coastguard Worker # didn't forget to 'make' before launch AVD. 590*800a58d9SAndroid Build Coastguard Worker image_list = glob.glob(os.path.join(local_image_path, "*.img")) 591*800a58d9SAndroid Build Coastguard Worker if not image_list: 592*800a58d9SAndroid Build Coastguard Worker raise errors.GetLocalImageError( 593*800a58d9SAndroid Build Coastguard Worker "No image found(Did you choose a lunch target and run `m`?)" 594*800a58d9SAndroid Build Coastguard Worker ": %s.\n " % local_image_path) 595*800a58d9SAndroid Build Coastguard Worker else: 596*800a58d9SAndroid Build Coastguard Worker local_image_path = local_image_arg 597*800a58d9SAndroid Build Coastguard Worker 598*800a58d9SAndroid Build Coastguard Worker if os.path.isfile(local_image_path): 599*800a58d9SAndroid Build Coastguard Worker self._local_image_artifact = local_image_arg 600*800a58d9SAndroid Build Coastguard Worker flavor_from_build_string = self._GetFlavorFromString( 601*800a58d9SAndroid Build Coastguard Worker self._local_image_artifact) 602*800a58d9SAndroid Build Coastguard Worker # Since file is provided and I assume it's a zip, so print the 603*800a58d9SAndroid Build Coastguard Worker # warning message. 604*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString(_LOCAL_ZIP_WARNING_MSG, 605*800a58d9SAndroid Build Coastguard Worker utils.TextColors.WARNING) 606*800a58d9SAndroid Build Coastguard Worker else: 607*800a58d9SAndroid Build Coastguard Worker self._local_image_dir = local_image_path 608*800a58d9SAndroid Build Coastguard Worker try: 609*800a58d9SAndroid Build Coastguard Worker flavor_from_build_string = self._GetFlavorFromString( 610*800a58d9SAndroid Build Coastguard Worker utils.GetBuildEnvironmentVariable(constants.ENV_BUILD_TARGET)) 611*800a58d9SAndroid Build Coastguard Worker except errors.GetAndroidBuildEnvVarError: 612*800a58d9SAndroid Build Coastguard Worker logger.debug("Unable to determine flavor from env variable: %s", 613*800a58d9SAndroid Build Coastguard Worker constants.ENV_BUILD_TARGET) 614*800a58d9SAndroid Build Coastguard Worker 615*800a58d9SAndroid Build Coastguard Worker if flavor_from_build_string and not flavor_arg: 616*800a58d9SAndroid Build Coastguard Worker self._flavor = flavor_from_build_string 617*800a58d9SAndroid Build Coastguard Worker 618*800a58d9SAndroid Build Coastguard Worker def _ProcessFVPLocalImageArgs(self): 619*800a58d9SAndroid Build Coastguard Worker """Get local built image path for FVP-type AVD.""" 620*800a58d9SAndroid Build Coastguard Worker build_target = utils.GetBuildEnvironmentVariable( 621*800a58d9SAndroid Build Coastguard Worker constants.ENV_BUILD_TARGET) 622*800a58d9SAndroid Build Coastguard Worker if build_target != "fvp": 623*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString( 624*800a58d9SAndroid Build Coastguard Worker "%s is not an fvp target (Try lunching fvp-eng " 625*800a58d9SAndroid Build Coastguard Worker "and running 'm')" % build_target, 626*800a58d9SAndroid Build Coastguard Worker utils.TextColors.WARNING) 627*800a58d9SAndroid Build Coastguard Worker self._local_image_dir = utils.GetBuildEnvironmentVariable( 628*800a58d9SAndroid Build Coastguard Worker _ENV_ANDROID_PRODUCT_OUT) 629*800a58d9SAndroid Build Coastguard Worker 630*800a58d9SAndroid Build Coastguard Worker # Since dir is provided, so checking that any images exist to ensure 631*800a58d9SAndroid Build Coastguard Worker # user didn't forget to 'make' before launch AVD. 632*800a58d9SAndroid Build Coastguard Worker image_list = glob.glob(os.path.join(self.local_image_dir, "*.img")) 633*800a58d9SAndroid Build Coastguard Worker if not image_list: 634*800a58d9SAndroid Build Coastguard Worker raise errors.GetLocalImageError( 635*800a58d9SAndroid Build Coastguard Worker "No image found(Did you choose a lunch target and run `m`?)" 636*800a58d9SAndroid Build Coastguard Worker ": %s.\n " % self._local_image_dir) 637*800a58d9SAndroid Build Coastguard Worker 638*800a58d9SAndroid Build Coastguard Worker def _ProcessTrustyLocalImageArgs(self, local_image_arg): 639*800a58d9SAndroid Build Coastguard Worker """Get local built image path for Trusty-type AVD.""" 640*800a58d9SAndroid Build Coastguard Worker if local_image_arg == constants.FIND_IN_BUILD_ENV: 641*800a58d9SAndroid Build Coastguard Worker build_target = utils.GetBuildEnvironmentVariable( 642*800a58d9SAndroid Build Coastguard Worker constants.ENV_BUILD_TARGET) 643*800a58d9SAndroid Build Coastguard Worker if build_target != "qemu_trusty_arm64": 644*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString( 645*800a58d9SAndroid Build Coastguard Worker f"{build_target} is not a trusty target (Try lunching " 646*800a58d9SAndroid Build Coastguard Worker "qemu_trusty_arm64-trunk_staging-userdebug " 647*800a58d9SAndroid Build Coastguard Worker "and running 'm')", 648*800a58d9SAndroid Build Coastguard Worker utils.TextColors.WARNING) 649*800a58d9SAndroid Build Coastguard Worker local_image_path = utils.GetBuildEnvironmentVariable( 650*800a58d9SAndroid Build Coastguard Worker _ENV_ANDROID_PRODUCT_OUT) 651*800a58d9SAndroid Build Coastguard Worker # Since dir is provided, check that any images exist to ensure user 652*800a58d9SAndroid Build Coastguard Worker # didn't forget to 'make' before launch AVD. 653*800a58d9SAndroid Build Coastguard Worker image_list = glob.glob(os.path.join(local_image_path, "*.img")) 654*800a58d9SAndroid Build Coastguard Worker if not image_list: 655*800a58d9SAndroid Build Coastguard Worker raise errors.GetLocalImageError( 656*800a58d9SAndroid Build Coastguard Worker "No image found(Did you choose a lunch target and run `m`?)" + 657*800a58d9SAndroid Build Coastguard Worker f": {local_image_path}.\n ") 658*800a58d9SAndroid Build Coastguard Worker else: 659*800a58d9SAndroid Build Coastguard Worker local_image_path = local_image_arg 660*800a58d9SAndroid Build Coastguard Worker 661*800a58d9SAndroid Build Coastguard Worker if os.path.isfile(local_image_path): 662*800a58d9SAndroid Build Coastguard Worker self._local_image_artifact = local_image_arg 663*800a58d9SAndroid Build Coastguard Worker # Since file is provided and I assume it's a zip, so print the 664*800a58d9SAndroid Build Coastguard Worker # warning message. 665*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString(_LOCAL_ZIP_WARNING_MSG, 666*800a58d9SAndroid Build Coastguard Worker utils.TextColors.WARNING) 667*800a58d9SAndroid Build Coastguard Worker else: 668*800a58d9SAndroid Build Coastguard Worker self._local_image_dir = local_image_path 669*800a58d9SAndroid Build Coastguard Worker 670*800a58d9SAndroid Build Coastguard Worker def _ProcessRemoteBuildArgs(self, args): 671*800a58d9SAndroid Build Coastguard Worker """Get the remote build args. 672*800a58d9SAndroid Build Coastguard Worker 673*800a58d9SAndroid Build Coastguard Worker Some of the acloud magic happens here, we will infer some of these 674*800a58d9SAndroid Build Coastguard Worker values if the user hasn't specified them. 675*800a58d9SAndroid Build Coastguard Worker 676*800a58d9SAndroid Build Coastguard Worker Args: 677*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 678*800a58d9SAndroid Build Coastguard Worker """ 679*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_BRANCH] = args.branch 680*800a58d9SAndroid Build Coastguard Worker if not self._remote_image[constants.BUILD_BRANCH]: 681*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_BRANCH] = self._GetBuildBranch( 682*800a58d9SAndroid Build Coastguard Worker args.build_id, args.build_target) 683*800a58d9SAndroid Build Coastguard Worker 684*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_TARGET] = args.build_target 685*800a58d9SAndroid Build Coastguard Worker if not self._remote_image[constants.BUILD_TARGET]: 686*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_TARGET] = self._GetBuildTarget( 687*800a58d9SAndroid Build Coastguard Worker args, self._remote_image[constants.BUILD_BRANCH]) 688*800a58d9SAndroid Build Coastguard Worker else: 689*800a58d9SAndroid Build Coastguard Worker # If flavor isn't specified, try to infer it from build target, 690*800a58d9SAndroid Build Coastguard Worker # if we can't, just default to phone flavor. 691*800a58d9SAndroid Build Coastguard Worker self._flavor = args.flavor or self._GetFlavorFromString( 692*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_TARGET]) or constants.FLAVOR_PHONE 693*800a58d9SAndroid Build Coastguard Worker # infer avd_type from build_target. 694*800a58d9SAndroid Build Coastguard Worker for avd_type, avd_type_abbr in constants.AVD_TYPES_MAPPING.items(): 695*800a58d9SAndroid Build Coastguard Worker if re.match(r"(.*_)?%s_" % avd_type_abbr, 696*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_TARGET]): 697*800a58d9SAndroid Build Coastguard Worker self._avd_type = avd_type 698*800a58d9SAndroid Build Coastguard Worker break 699*800a58d9SAndroid Build Coastguard Worker 700*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_ID] = args.build_id 701*800a58d9SAndroid Build Coastguard Worker if not self._remote_image[constants.BUILD_ID]: 702*800a58d9SAndroid Build Coastguard Worker build_client = android_build_client.AndroidBuildClient( 703*800a58d9SAndroid Build Coastguard Worker auth.CreateCredentials(self._cfg)) 704*800a58d9SAndroid Build Coastguard Worker 705*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_ID] = build_client.GetLKGB( 706*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_TARGET], 707*800a58d9SAndroid Build Coastguard Worker self._remote_image[constants.BUILD_BRANCH]) 708*800a58d9SAndroid Build Coastguard Worker 709*800a58d9SAndroid Build Coastguard Worker # Process system image, kernel image, bootloader, and otatools. 710*800a58d9SAndroid Build Coastguard Worker self._system_build_info = {constants.BUILD_ID: args.system_build_id, 711*800a58d9SAndroid Build Coastguard Worker constants.BUILD_BRANCH: args.system_branch, 712*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: args.system_build_target} 713*800a58d9SAndroid Build Coastguard Worker self._ota_build_info = {constants.BUILD_ID: args.ota_build_id, 714*800a58d9SAndroid Build Coastguard Worker constants.BUILD_BRANCH: args.ota_branch, 715*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: args.ota_build_target} 716*800a58d9SAndroid Build Coastguard Worker self._kernel_build_info = {constants.BUILD_ID: args.kernel_build_id, 717*800a58d9SAndroid Build Coastguard Worker constants.BUILD_BRANCH: args.kernel_branch, 718*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: args.kernel_build_target} 719*800a58d9SAndroid Build Coastguard Worker self._boot_build_info = {constants.BUILD_ID: args.boot_build_id, 720*800a58d9SAndroid Build Coastguard Worker constants.BUILD_BRANCH: args.boot_branch, 721*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: args.boot_build_target, 722*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ARTIFACT: args.boot_artifact} 723*800a58d9SAndroid Build Coastguard Worker self._bootloader_build_info = { 724*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: args.bootloader_build_id, 725*800a58d9SAndroid Build Coastguard Worker constants.BUILD_BRANCH: args.bootloader_branch, 726*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: args.bootloader_build_target} 727*800a58d9SAndroid Build Coastguard Worker self._android_efi_loader_build_info = { 728*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: args.android_efi_loader_build_id, 729*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ARTIFACT: args.android_efi_loader_artifact} 730*800a58d9SAndroid Build Coastguard Worker self._host_package_build_info = { 731*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: args.host_package_build_id, 732*800a58d9SAndroid Build Coastguard Worker constants.BUILD_BRANCH: args.host_package_branch, 733*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: args.host_package_build_target} 734*800a58d9SAndroid Build Coastguard Worker 735*800a58d9SAndroid Build Coastguard Worker @staticmethod 736*800a58d9SAndroid Build Coastguard Worker def _CheckCFBuildTarget(instance_type): 737*800a58d9SAndroid Build Coastguard Worker """Check build target for the given instance type 738*800a58d9SAndroid Build Coastguard Worker 739*800a58d9SAndroid Build Coastguard Worker Args: 740*800a58d9SAndroid Build Coastguard Worker instance_type: String of instance type 741*800a58d9SAndroid Build Coastguard Worker 742*800a58d9SAndroid Build Coastguard Worker Raises: 743*800a58d9SAndroid Build Coastguard Worker errors.GetLocalImageError if the pattern is not match with 744*800a58d9SAndroid Build Coastguard Worker current build target. 745*800a58d9SAndroid Build Coastguard Worker """ 746*800a58d9SAndroid Build Coastguard Worker build_target = utils.GetBuildEnvironmentVariable( 747*800a58d9SAndroid Build Coastguard Worker constants.ENV_BUILD_TARGET) 748*800a58d9SAndroid Build Coastguard Worker pattern = constants.CF_AVD_BUILD_TARGET_PATTERN_MAPPING[instance_type] 749*800a58d9SAndroid Build Coastguard Worker if pattern not in build_target: 750*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString( 751*800a58d9SAndroid Build Coastguard Worker "%s is not a %s target (Try lunching a proper cuttlefish " 752*800a58d9SAndroid Build Coastguard Worker "target and running 'm')" % (build_target, pattern), 753*800a58d9SAndroid Build Coastguard Worker utils.TextColors.WARNING) 754*800a58d9SAndroid Build Coastguard Worker 755*800a58d9SAndroid Build Coastguard Worker @staticmethod 756*800a58d9SAndroid Build Coastguard Worker def _GetGitRemote(): 757*800a58d9SAndroid Build Coastguard Worker """Get the remote repo. 758*800a58d9SAndroid Build Coastguard Worker 759*800a58d9SAndroid Build Coastguard Worker We'll go to a project we know exists (tools/acloud) and grab the git 760*800a58d9SAndroid Build Coastguard Worker remote output from there. 761*800a58d9SAndroid Build Coastguard Worker 762*800a58d9SAndroid Build Coastguard Worker Returns: 763*800a58d9SAndroid Build Coastguard Worker remote: String, git remote (e.g. "aosp"). 764*800a58d9SAndroid Build Coastguard Worker """ 765*800a58d9SAndroid Build Coastguard Worker try: 766*800a58d9SAndroid Build Coastguard Worker android_build_top = os.environ[constants.ENV_ANDROID_BUILD_TOP] 767*800a58d9SAndroid Build Coastguard Worker except KeyError as e: 768*800a58d9SAndroid Build Coastguard Worker raise errors.GetAndroidBuildEnvVarError( 769*800a58d9SAndroid Build Coastguard Worker "Could not get environment var: %s\n" 770*800a58d9SAndroid Build Coastguard Worker "Try to run '#source build/envsetup.sh && lunch <target>'" 771*800a58d9SAndroid Build Coastguard Worker % _ENV_ANDROID_BUILD_TOP) from e 772*800a58d9SAndroid Build Coastguard Worker 773*800a58d9SAndroid Build Coastguard Worker acloud_project = os.path.join(android_build_top, "tools", "acloud") 774*800a58d9SAndroid Build Coastguard Worker return EscapeAnsi(utils.CheckOutput(_COMMAND_GIT_REMOTE, 775*800a58d9SAndroid Build Coastguard Worker cwd=acloud_project).strip()) 776*800a58d9SAndroid Build Coastguard Worker 777*800a58d9SAndroid Build Coastguard Worker def _GetBuildBranch(self, build_id, build_target): 778*800a58d9SAndroid Build Coastguard Worker """Infer build branch if user didn't specify branch name. 779*800a58d9SAndroid Build Coastguard Worker 780*800a58d9SAndroid Build Coastguard Worker Args: 781*800a58d9SAndroid Build Coastguard Worker build_id: String, Build id, e.g. "2263051", "P2804227" 782*800a58d9SAndroid Build Coastguard Worker build_target: String, the build target, e.g. cf_x86_phone-userdebug 783*800a58d9SAndroid Build Coastguard Worker 784*800a58d9SAndroid Build Coastguard Worker Returns: 785*800a58d9SAndroid Build Coastguard Worker String, name of build branch. 786*800a58d9SAndroid Build Coastguard Worker """ 787*800a58d9SAndroid Build Coastguard Worker # Infer branch from build_target and build_id 788*800a58d9SAndroid Build Coastguard Worker if build_id and build_target: 789*800a58d9SAndroid Build Coastguard Worker build_client = android_build_client.AndroidBuildClient( 790*800a58d9SAndroid Build Coastguard Worker auth.CreateCredentials(self._cfg)) 791*800a58d9SAndroid Build Coastguard Worker return build_client.GetBranch(build_target, build_id) 792*800a58d9SAndroid Build Coastguard Worker 793*800a58d9SAndroid Build Coastguard Worker return self._GetBranchFromRepo() 794*800a58d9SAndroid Build Coastguard Worker 795*800a58d9SAndroid Build Coastguard Worker def _GetBranchFromRepo(self): 796*800a58d9SAndroid Build Coastguard Worker """Get branch information from command "repo info". 797*800a58d9SAndroid Build Coastguard Worker 798*800a58d9SAndroid Build Coastguard Worker If branch can't get from "repo info", it will be set as default branch 799*800a58d9SAndroid Build Coastguard Worker "aosp-main". 800*800a58d9SAndroid Build Coastguard Worker 801*800a58d9SAndroid Build Coastguard Worker Returns: 802*800a58d9SAndroid Build Coastguard Worker branch: String, git branch name. e.g. "aosp-main" 803*800a58d9SAndroid Build Coastguard Worker """ 804*800a58d9SAndroid Build Coastguard Worker branch = None 805*800a58d9SAndroid Build Coastguard Worker # TODO(149460014): Migrate acloud to py3, then remove this 806*800a58d9SAndroid Build Coastguard Worker # workaround. 807*800a58d9SAndroid Build Coastguard Worker env = os.environ.copy() 808*800a58d9SAndroid Build Coastguard Worker env.pop("PYTHONPATH", None) 809*800a58d9SAndroid Build Coastguard Worker logger.info("Running command \"%s\"", _COMMAND_REPO_INFO) 810*800a58d9SAndroid Build Coastguard Worker # TODO(154173071): Migrate acloud to py3, then apply Popen to append with encoding 811*800a58d9SAndroid Build Coastguard Worker process = subprocess.Popen(_COMMAND_REPO_INFO, shell=True, stdin=None, 812*800a58d9SAndroid Build Coastguard Worker stdout=subprocess.PIPE, 813*800a58d9SAndroid Build Coastguard Worker stderr=subprocess.STDOUT, env=env, 814*800a58d9SAndroid Build Coastguard Worker universal_newlines=True) 815*800a58d9SAndroid Build Coastguard Worker timer = threading.Timer(_REPO_TIMEOUT, process.kill) 816*800a58d9SAndroid Build Coastguard Worker timer.start() 817*800a58d9SAndroid Build Coastguard Worker stdout, _ = process.communicate() 818*800a58d9SAndroid Build Coastguard Worker if stdout: 819*800a58d9SAndroid Build Coastguard Worker for line in stdout.splitlines(): 820*800a58d9SAndroid Build Coastguard Worker match = _BRANCH_RE.match(EscapeAnsi(line)) 821*800a58d9SAndroid Build Coastguard Worker if match: 822*800a58d9SAndroid Build Coastguard Worker branch_prefix = _BRANCH_PREFIX.get(self._GetGitRemote(), 823*800a58d9SAndroid Build Coastguard Worker _DEFAULT_BRANCH_PREFIX) 824*800a58d9SAndroid Build Coastguard Worker branch = branch_prefix + match.group("branch") 825*800a58d9SAndroid Build Coastguard Worker timer.cancel() 826*800a58d9SAndroid Build Coastguard Worker if branch: 827*800a58d9SAndroid Build Coastguard Worker return branch 828*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString( 829*800a58d9SAndroid Build Coastguard Worker "Unable to determine your repo branch, defaulting to %s" 830*800a58d9SAndroid Build Coastguard Worker % _DEFAULT_BRANCH, utils.TextColors.WARNING) 831*800a58d9SAndroid Build Coastguard Worker return _DEFAULT_BRANCH 832*800a58d9SAndroid Build Coastguard Worker 833*800a58d9SAndroid Build Coastguard Worker def _GetBuildTarget(self, args, branch): 834*800a58d9SAndroid Build Coastguard Worker """Infer build target if user doesn't specified target name. 835*800a58d9SAndroid Build Coastguard Worker 836*800a58d9SAndroid Build Coastguard Worker Target = {REPO_PREFIX}{avd_type}_{bitness}_{flavor}- 837*800a58d9SAndroid Build Coastguard Worker {DEFAULT_BUILD_TARGET_TYPE}. 838*800a58d9SAndroid Build Coastguard Worker Example target: aosp_cf_x86_64_phone-userdebug 839*800a58d9SAndroid Build Coastguard Worker 840*800a58d9SAndroid Build Coastguard Worker Args: 841*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 842*800a58d9SAndroid Build Coastguard Worker branch: String, name of build branch. 843*800a58d9SAndroid Build Coastguard Worker 844*800a58d9SAndroid Build Coastguard Worker Returns: 845*800a58d9SAndroid Build Coastguard Worker build_target: String, name of build target. 846*800a58d9SAndroid Build Coastguard Worker """ 847*800a58d9SAndroid Build Coastguard Worker branch_prefix = re.split("-|_", branch)[0] 848*800a58d9SAndroid Build Coastguard Worker return "%s%s_%s_%s%s-%s" % ( 849*800a58d9SAndroid Build Coastguard Worker _BRANCH_TARGET_PREFIX.get(branch_prefix, ""), 850*800a58d9SAndroid Build Coastguard Worker constants.AVD_TYPES_MAPPING[args.avd_type], 851*800a58d9SAndroid Build Coastguard Worker _DEFAULT_BUILD_BITNESS, self._flavor, 852*800a58d9SAndroid Build Coastguard Worker _BRANCH_TARGET_TRUNK_STAGEING.get(branch, ""), 853*800a58d9SAndroid Build Coastguard Worker _DEFAULT_BUILD_TYPE) 854*800a58d9SAndroid Build Coastguard Worker 855*800a58d9SAndroid Build Coastguard Worker @property 856*800a58d9SAndroid Build Coastguard Worker def instance_type(self): 857*800a58d9SAndroid Build Coastguard Worker """Return the instance type.""" 858*800a58d9SAndroid Build Coastguard Worker return self._instance_type 859*800a58d9SAndroid Build Coastguard Worker 860*800a58d9SAndroid Build Coastguard Worker @property 861*800a58d9SAndroid Build Coastguard Worker def image_source(self): 862*800a58d9SAndroid Build Coastguard Worker """Return the image type.""" 863*800a58d9SAndroid Build Coastguard Worker return self._image_source 864*800a58d9SAndroid Build Coastguard Worker 865*800a58d9SAndroid Build Coastguard Worker @property 866*800a58d9SAndroid Build Coastguard Worker def hw_property(self): 867*800a58d9SAndroid Build Coastguard Worker """Return the hw_property.""" 868*800a58d9SAndroid Build Coastguard Worker return self._hw_property 869*800a58d9SAndroid Build Coastguard Worker 870*800a58d9SAndroid Build Coastguard Worker @property 871*800a58d9SAndroid Build Coastguard Worker def hw_customize(self): 872*800a58d9SAndroid Build Coastguard Worker """Return the hw_customize.""" 873*800a58d9SAndroid Build Coastguard Worker return self._hw_customize 874*800a58d9SAndroid Build Coastguard Worker 875*800a58d9SAndroid Build Coastguard Worker @property 876*800a58d9SAndroid Build Coastguard Worker def local_image_dir(self): 877*800a58d9SAndroid Build Coastguard Worker """Return local image dir.""" 878*800a58d9SAndroid Build Coastguard Worker return self._local_image_dir 879*800a58d9SAndroid Build Coastguard Worker 880*800a58d9SAndroid Build Coastguard Worker @property 881*800a58d9SAndroid Build Coastguard Worker def local_image_artifact(self): 882*800a58d9SAndroid Build Coastguard Worker """Return local image artifact.""" 883*800a58d9SAndroid Build Coastguard Worker return self._local_image_artifact 884*800a58d9SAndroid Build Coastguard Worker 885*800a58d9SAndroid Build Coastguard Worker @property 886*800a58d9SAndroid Build Coastguard Worker def local_instance_dir(self): 887*800a58d9SAndroid Build Coastguard Worker """Return local instance directory.""" 888*800a58d9SAndroid Build Coastguard Worker return self._local_instance_dir 889*800a58d9SAndroid Build Coastguard Worker 890*800a58d9SAndroid Build Coastguard Worker @property 891*800a58d9SAndroid Build Coastguard Worker def local_kernel_image(self): 892*800a58d9SAndroid Build Coastguard Worker """Return local kernel image path.""" 893*800a58d9SAndroid Build Coastguard Worker return self._local_kernel_image 894*800a58d9SAndroid Build Coastguard Worker 895*800a58d9SAndroid Build Coastguard Worker @property 896*800a58d9SAndroid Build Coastguard Worker def local_system_image(self): 897*800a58d9SAndroid Build Coastguard Worker """Return local system image path.""" 898*800a58d9SAndroid Build Coastguard Worker return self._local_system_image 899*800a58d9SAndroid Build Coastguard Worker 900*800a58d9SAndroid Build Coastguard Worker @property 901*800a58d9SAndroid Build Coastguard Worker def local_system_dlkm_image(self): 902*800a58d9SAndroid Build Coastguard Worker """Return local system_dlkm image path.""" 903*800a58d9SAndroid Build Coastguard Worker return self._local_system_dlkm_image 904*800a58d9SAndroid Build Coastguard Worker 905*800a58d9SAndroid Build Coastguard Worker @property 906*800a58d9SAndroid Build Coastguard Worker def local_vendor_image(self): 907*800a58d9SAndroid Build Coastguard Worker """Return local vendor image path.""" 908*800a58d9SAndroid Build Coastguard Worker return self._local_vendor_image 909*800a58d9SAndroid Build Coastguard Worker 910*800a58d9SAndroid Build Coastguard Worker @property 911*800a58d9SAndroid Build Coastguard Worker def local_vendor_boot_image(self): 912*800a58d9SAndroid Build Coastguard Worker """Return local vendor boot image path.""" 913*800a58d9SAndroid Build Coastguard Worker return self._local_vendor_boot_image 914*800a58d9SAndroid Build Coastguard Worker 915*800a58d9SAndroid Build Coastguard Worker @property 916*800a58d9SAndroid Build Coastguard Worker def local_trusty_image(self): 917*800a58d9SAndroid Build Coastguard Worker """Return local trusty qemu package path.""" 918*800a58d9SAndroid Build Coastguard Worker return self._local_trusty_image 919*800a58d9SAndroid Build Coastguard Worker 920*800a58d9SAndroid Build Coastguard Worker @property 921*800a58d9SAndroid Build Coastguard Worker def local_tool_dirs(self): 922*800a58d9SAndroid Build Coastguard Worker """Return a list of local tool directories.""" 923*800a58d9SAndroid Build Coastguard Worker return self._local_tool_dirs 924*800a58d9SAndroid Build Coastguard Worker 925*800a58d9SAndroid Build Coastguard Worker @property 926*800a58d9SAndroid Build Coastguard Worker def avd_type(self): 927*800a58d9SAndroid Build Coastguard Worker """Return the avd type.""" 928*800a58d9SAndroid Build Coastguard Worker return self._avd_type 929*800a58d9SAndroid Build Coastguard Worker 930*800a58d9SAndroid Build Coastguard Worker @property 931*800a58d9SAndroid Build Coastguard Worker def autoconnect(self): 932*800a58d9SAndroid Build Coastguard Worker """autoconnect. 933*800a58d9SAndroid Build Coastguard Worker 934*800a58d9SAndroid Build Coastguard Worker args.autoconnect could pass as Boolean or String. 935*800a58d9SAndroid Build Coastguard Worker 936*800a58d9SAndroid Build Coastguard Worker Return: Boolean, True only if self._autoconnect is not False. 937*800a58d9SAndroid Build Coastguard Worker """ 938*800a58d9SAndroid Build Coastguard Worker return self._autoconnect is not False 939*800a58d9SAndroid Build Coastguard Worker 940*800a58d9SAndroid Build Coastguard Worker @property 941*800a58d9SAndroid Build Coastguard Worker def connect_adb(self): 942*800a58d9SAndroid Build Coastguard Worker """Auto-connect to adb. 943*800a58d9SAndroid Build Coastguard Worker 944*800a58d9SAndroid Build Coastguard Worker Return: Boolean, whether autoconnect is enabled. 945*800a58d9SAndroid Build Coastguard Worker """ 946*800a58d9SAndroid Build Coastguard Worker return self._autoconnect is not False 947*800a58d9SAndroid Build Coastguard Worker 948*800a58d9SAndroid Build Coastguard Worker @property 949*800a58d9SAndroid Build Coastguard Worker def connect_vnc(self): 950*800a58d9SAndroid Build Coastguard Worker """Launch vnc. 951*800a58d9SAndroid Build Coastguard Worker 952*800a58d9SAndroid Build Coastguard Worker Return: Boolean, True if self._autoconnect is 'vnc'. 953*800a58d9SAndroid Build Coastguard Worker """ 954*800a58d9SAndroid Build Coastguard Worker return self._autoconnect == constants.INS_KEY_VNC 955*800a58d9SAndroid Build Coastguard Worker 956*800a58d9SAndroid Build Coastguard Worker @property 957*800a58d9SAndroid Build Coastguard Worker def connect_webrtc(self): 958*800a58d9SAndroid Build Coastguard Worker """Auto-launch webRTC AVD on the browser. 959*800a58d9SAndroid Build Coastguard Worker 960*800a58d9SAndroid Build Coastguard Worker Return: Boolean, True if args.autoconnect is "webrtc". 961*800a58d9SAndroid Build Coastguard Worker """ 962*800a58d9SAndroid Build Coastguard Worker return self._autoconnect == constants.INS_KEY_WEBRTC 963*800a58d9SAndroid Build Coastguard Worker 964*800a58d9SAndroid Build Coastguard Worker @property 965*800a58d9SAndroid Build Coastguard Worker def unlock_screen(self): 966*800a58d9SAndroid Build Coastguard Worker """Return unlock_screen.""" 967*800a58d9SAndroid Build Coastguard Worker return self._unlock_screen 968*800a58d9SAndroid Build Coastguard Worker 969*800a58d9SAndroid Build Coastguard Worker @property 970*800a58d9SAndroid Build Coastguard Worker def remote_image(self): 971*800a58d9SAndroid Build Coastguard Worker """Return the remote image.""" 972*800a58d9SAndroid Build Coastguard Worker return self._remote_image 973*800a58d9SAndroid Build Coastguard Worker 974*800a58d9SAndroid Build Coastguard Worker @property 975*800a58d9SAndroid Build Coastguard Worker def remote_fetch(self): 976*800a58d9SAndroid Build Coastguard Worker """Fetch cvd in remote host. 977*800a58d9SAndroid Build Coastguard Worker 978*800a58d9SAndroid Build Coastguard Worker Return: Boolean, whether fetch cvd in remote host. 979*800a58d9SAndroid Build Coastguard Worker """ 980*800a58d9SAndroid Build Coastguard Worker return self._remote_fetch is True 981*800a58d9SAndroid Build Coastguard Worker 982*800a58d9SAndroid Build Coastguard Worker @property 983*800a58d9SAndroid Build Coastguard Worker def fetch_cvd_wrapper(self): 984*800a58d9SAndroid Build Coastguard Worker """use fetch_cvd wrapper 985*800a58d9SAndroid Build Coastguard Worker 986*800a58d9SAndroid Build Coastguard Worker Return: Boolean, whether fetch cvd in remote host. 987*800a58d9SAndroid Build Coastguard Worker """ 988*800a58d9SAndroid Build Coastguard Worker return self._fetch_cvd_wrapper 989*800a58d9SAndroid Build Coastguard Worker 990*800a58d9SAndroid Build Coastguard Worker @property 991*800a58d9SAndroid Build Coastguard Worker def fetch_cvd_version(self): 992*800a58d9SAndroid Build Coastguard Worker """Return fetch_cvd_version.""" 993*800a58d9SAndroid Build Coastguard Worker return self._fetch_cvd_version 994*800a58d9SAndroid Build Coastguard Worker 995*800a58d9SAndroid Build Coastguard Worker @property 996*800a58d9SAndroid Build Coastguard Worker def num(self): 997*800a58d9SAndroid Build Coastguard Worker """Return num of instances.""" 998*800a58d9SAndroid Build Coastguard Worker return self._num_of_instances 999*800a58d9SAndroid Build Coastguard Worker 1000*800a58d9SAndroid Build Coastguard Worker @property 1001*800a58d9SAndroid Build Coastguard Worker def num_avds_per_instance(self): 1002*800a58d9SAndroid Build Coastguard Worker """Return num_avds_per_instance.""" 1003*800a58d9SAndroid Build Coastguard Worker return self._num_avds_per_instance 1004*800a58d9SAndroid Build Coastguard Worker 1005*800a58d9SAndroid Build Coastguard Worker @property 1006*800a58d9SAndroid Build Coastguard Worker def report_internal_ip(self): 1007*800a58d9SAndroid Build Coastguard Worker """Return report internal ip.""" 1008*800a58d9SAndroid Build Coastguard Worker return self._report_internal_ip 1009*800a58d9SAndroid Build Coastguard Worker 1010*800a58d9SAndroid Build Coastguard Worker @property 1011*800a58d9SAndroid Build Coastguard Worker def disable_external_ip(self): 1012*800a58d9SAndroid Build Coastguard Worker """Return disable_external_ip.""" 1013*800a58d9SAndroid Build Coastguard Worker return self._disable_external_ip 1014*800a58d9SAndroid Build Coastguard Worker 1015*800a58d9SAndroid Build Coastguard Worker @property 1016*800a58d9SAndroid Build Coastguard Worker def kernel_build_info(self): 1017*800a58d9SAndroid Build Coastguard Worker """Return kernel build info.""" 1018*800a58d9SAndroid Build Coastguard Worker return self._kernel_build_info 1019*800a58d9SAndroid Build Coastguard Worker 1020*800a58d9SAndroid Build Coastguard Worker @property 1021*800a58d9SAndroid Build Coastguard Worker def boot_build_info(self): 1022*800a58d9SAndroid Build Coastguard Worker """Return boot build info.""" 1023*800a58d9SAndroid Build Coastguard Worker return self._boot_build_info 1024*800a58d9SAndroid Build Coastguard Worker 1025*800a58d9SAndroid Build Coastguard Worker @property 1026*800a58d9SAndroid Build Coastguard Worker def bootloader_build_info(self): 1027*800a58d9SAndroid Build Coastguard Worker """Return bootloader build info.""" 1028*800a58d9SAndroid Build Coastguard Worker return self._bootloader_build_info 1029*800a58d9SAndroid Build Coastguard Worker 1030*800a58d9SAndroid Build Coastguard Worker @property 1031*800a58d9SAndroid Build Coastguard Worker def android_efi_loader_build_info(self): 1032*800a58d9SAndroid Build Coastguard Worker """Return android efi loader build info.""" 1033*800a58d9SAndroid Build Coastguard Worker return self._android_efi_loader_build_info 1034*800a58d9SAndroid Build Coastguard Worker 1035*800a58d9SAndroid Build Coastguard Worker @property 1036*800a58d9SAndroid Build Coastguard Worker def flavor(self): 1037*800a58d9SAndroid Build Coastguard Worker """Return flavor.""" 1038*800a58d9SAndroid Build Coastguard Worker return self._flavor 1039*800a58d9SAndroid Build Coastguard Worker 1040*800a58d9SAndroid Build Coastguard Worker @property 1041*800a58d9SAndroid Build Coastguard Worker def cfg(self): 1042*800a58d9SAndroid Build Coastguard Worker """Return cfg instance.""" 1043*800a58d9SAndroid Build Coastguard Worker return self._cfg 1044*800a58d9SAndroid Build Coastguard Worker 1045*800a58d9SAndroid Build Coastguard Worker @property 1046*800a58d9SAndroid Build Coastguard Worker def image_download_dir(self): 1047*800a58d9SAndroid Build Coastguard Worker """Return image download dir.""" 1048*800a58d9SAndroid Build Coastguard Worker return self._image_download_dir 1049*800a58d9SAndroid Build Coastguard Worker 1050*800a58d9SAndroid Build Coastguard Worker @image_download_dir.setter 1051*800a58d9SAndroid Build Coastguard Worker def image_download_dir(self, value): 1052*800a58d9SAndroid Build Coastguard Worker """Set image download dir.""" 1053*800a58d9SAndroid Build Coastguard Worker self._image_download_dir = value 1054*800a58d9SAndroid Build Coastguard Worker 1055*800a58d9SAndroid Build Coastguard Worker @property 1056*800a58d9SAndroid Build Coastguard Worker def serial_log_file(self): 1057*800a58d9SAndroid Build Coastguard Worker """Return serial log file path.""" 1058*800a58d9SAndroid Build Coastguard Worker return self._serial_log_file 1059*800a58d9SAndroid Build Coastguard Worker 1060*800a58d9SAndroid Build Coastguard Worker @property 1061*800a58d9SAndroid Build Coastguard Worker def disk_type(self): 1062*800a58d9SAndroid Build Coastguard Worker """Return disk type.""" 1063*800a58d9SAndroid Build Coastguard Worker return self._disk_type 1064*800a58d9SAndroid Build Coastguard Worker 1065*800a58d9SAndroid Build Coastguard Worker @property 1066*800a58d9SAndroid Build Coastguard Worker def base_instance_num(self): 1067*800a58d9SAndroid Build Coastguard Worker """Return base instance num.""" 1068*800a58d9SAndroid Build Coastguard Worker return self._base_instance_num 1069*800a58d9SAndroid Build Coastguard Worker 1070*800a58d9SAndroid Build Coastguard Worker @property 1071*800a58d9SAndroid Build Coastguard Worker def gpu(self): 1072*800a58d9SAndroid Build Coastguard Worker """Return gpu.""" 1073*800a58d9SAndroid Build Coastguard Worker return self._gpu 1074*800a58d9SAndroid Build Coastguard Worker 1075*800a58d9SAndroid Build Coastguard Worker @property 1076*800a58d9SAndroid Build Coastguard Worker def emulator_build_id(self): 1077*800a58d9SAndroid Build Coastguard Worker """Return emulator_build_id.""" 1078*800a58d9SAndroid Build Coastguard Worker return self._emulator_build_id 1079*800a58d9SAndroid Build Coastguard Worker 1080*800a58d9SAndroid Build Coastguard Worker @property 1081*800a58d9SAndroid Build Coastguard Worker def emulator_build_target(self): 1082*800a58d9SAndroid Build Coastguard Worker """Return emulator_build_target.""" 1083*800a58d9SAndroid Build Coastguard Worker return self._emulator_build_target 1084*800a58d9SAndroid Build Coastguard Worker 1085*800a58d9SAndroid Build Coastguard Worker @property 1086*800a58d9SAndroid Build Coastguard Worker def emulator_zip(self): 1087*800a58d9SAndroid Build Coastguard Worker """Return emulator_zip.""" 1088*800a58d9SAndroid Build Coastguard Worker return self._emulator_zip 1089*800a58d9SAndroid Build Coastguard Worker 1090*800a58d9SAndroid Build Coastguard Worker @property 1091*800a58d9SAndroid Build Coastguard Worker def client_adb_port(self): 1092*800a58d9SAndroid Build Coastguard Worker """Return the client adb port.""" 1093*800a58d9SAndroid Build Coastguard Worker return self._client_adb_port 1094*800a58d9SAndroid Build Coastguard Worker 1095*800a58d9SAndroid Build Coastguard Worker @property 1096*800a58d9SAndroid Build Coastguard Worker def stable_host_image_name(self): 1097*800a58d9SAndroid Build Coastguard Worker """Return the Cuttlefish host image name.""" 1098*800a58d9SAndroid Build Coastguard Worker return self._stable_host_image_name 1099*800a58d9SAndroid Build Coastguard Worker 1100*800a58d9SAndroid Build Coastguard Worker @property 1101*800a58d9SAndroid Build Coastguard Worker def stable_cheeps_host_image_name(self): 1102*800a58d9SAndroid Build Coastguard Worker """Return the Cheeps host image name.""" 1103*800a58d9SAndroid Build Coastguard Worker return self._stable_cheeps_host_image_name 1104*800a58d9SAndroid Build Coastguard Worker 1105*800a58d9SAndroid Build Coastguard Worker # pylint: disable=invalid-name 1106*800a58d9SAndroid Build Coastguard Worker @property 1107*800a58d9SAndroid Build Coastguard Worker def stable_cheeps_host_image_project(self): 1108*800a58d9SAndroid Build Coastguard Worker """Return the project hosting the Cheeps host image.""" 1109*800a58d9SAndroid Build Coastguard Worker return self._stable_cheeps_host_image_project 1110*800a58d9SAndroid Build Coastguard Worker 1111*800a58d9SAndroid Build Coastguard Worker @property 1112*800a58d9SAndroid Build Coastguard Worker def username(self): 1113*800a58d9SAndroid Build Coastguard Worker """Return username.""" 1114*800a58d9SAndroid Build Coastguard Worker return self._username 1115*800a58d9SAndroid Build Coastguard Worker 1116*800a58d9SAndroid Build Coastguard Worker @property 1117*800a58d9SAndroid Build Coastguard Worker def password(self): 1118*800a58d9SAndroid Build Coastguard Worker """Return password.""" 1119*800a58d9SAndroid Build Coastguard Worker return self._password 1120*800a58d9SAndroid Build Coastguard Worker 1121*800a58d9SAndroid Build Coastguard Worker @property 1122*800a58d9SAndroid Build Coastguard Worker def cheeps_betty_image(self): 1123*800a58d9SAndroid Build Coastguard Worker """Return cheeps_betty_image.""" 1124*800a58d9SAndroid Build Coastguard Worker return self._cheeps_betty_image 1125*800a58d9SAndroid Build Coastguard Worker 1126*800a58d9SAndroid Build Coastguard Worker @property 1127*800a58d9SAndroid Build Coastguard Worker def cheeps_features(self): 1128*800a58d9SAndroid Build Coastguard Worker """Return cheeps_features.""" 1129*800a58d9SAndroid Build Coastguard Worker return self._cheeps_features 1130*800a58d9SAndroid Build Coastguard Worker 1131*800a58d9SAndroid Build Coastguard Worker @property 1132*800a58d9SAndroid Build Coastguard Worker def boot_timeout_secs(self): 1133*800a58d9SAndroid Build Coastguard Worker """Return boot_timeout_secs.""" 1134*800a58d9SAndroid Build Coastguard Worker return self._boot_timeout_secs 1135*800a58d9SAndroid Build Coastguard Worker 1136*800a58d9SAndroid Build Coastguard Worker @property 1137*800a58d9SAndroid Build Coastguard Worker def ins_timeout_secs(self): 1138*800a58d9SAndroid Build Coastguard Worker """Return ins_timeout_secs.""" 1139*800a58d9SAndroid Build Coastguard Worker return self._ins_timeout_secs 1140*800a58d9SAndroid Build Coastguard Worker 1141*800a58d9SAndroid Build Coastguard Worker @property 1142*800a58d9SAndroid Build Coastguard Worker def ota_build_info(self): 1143*800a58d9SAndroid Build Coastguard Worker """Return ota_build_info.""" 1144*800a58d9SAndroid Build Coastguard Worker return self._ota_build_info 1145*800a58d9SAndroid Build Coastguard Worker 1146*800a58d9SAndroid Build Coastguard Worker @property 1147*800a58d9SAndroid Build Coastguard Worker def host_package_build_info(self): 1148*800a58d9SAndroid Build Coastguard Worker """Return host_package_build_info.""" 1149*800a58d9SAndroid Build Coastguard Worker return self._host_package_build_info 1150*800a58d9SAndroid Build Coastguard Worker 1151*800a58d9SAndroid Build Coastguard Worker @property 1152*800a58d9SAndroid Build Coastguard Worker def system_build_info(self): 1153*800a58d9SAndroid Build Coastguard Worker """Return system_build_info.""" 1154*800a58d9SAndroid Build Coastguard Worker return self._system_build_info 1155*800a58d9SAndroid Build Coastguard Worker 1156*800a58d9SAndroid Build Coastguard Worker @property 1157*800a58d9SAndroid Build Coastguard Worker def local_instance_id(self): 1158*800a58d9SAndroid Build Coastguard Worker """Return local_instance_id.""" 1159*800a58d9SAndroid Build Coastguard Worker return self._local_instance_id 1160*800a58d9SAndroid Build Coastguard Worker 1161*800a58d9SAndroid Build Coastguard Worker @property 1162*800a58d9SAndroid Build Coastguard Worker def instance_name_to_reuse(self): 1163*800a58d9SAndroid Build Coastguard Worker """Return instance_name_to_reuse.""" 1164*800a58d9SAndroid Build Coastguard Worker return self._instance_name_to_reuse 1165*800a58d9SAndroid Build Coastguard Worker 1166*800a58d9SAndroid Build Coastguard Worker @property 1167*800a58d9SAndroid Build Coastguard Worker def remote_host(self): 1168*800a58d9SAndroid Build Coastguard Worker """Return host.""" 1169*800a58d9SAndroid Build Coastguard Worker return self._remote_host 1170*800a58d9SAndroid Build Coastguard Worker 1171*800a58d9SAndroid Build Coastguard Worker @property 1172*800a58d9SAndroid Build Coastguard Worker def remote_image_dir(self): 1173*800a58d9SAndroid Build Coastguard Worker """Return remote_image_dir.""" 1174*800a58d9SAndroid Build Coastguard Worker return self._remote_image_dir 1175*800a58d9SAndroid Build Coastguard Worker 1176*800a58d9SAndroid Build Coastguard Worker @property 1177*800a58d9SAndroid Build Coastguard Worker def host_user(self): 1178*800a58d9SAndroid Build Coastguard Worker """Return host_user.""" 1179*800a58d9SAndroid Build Coastguard Worker return self._host_user 1180*800a58d9SAndroid Build Coastguard Worker 1181*800a58d9SAndroid Build Coastguard Worker @property 1182*800a58d9SAndroid Build Coastguard Worker def host_ssh_private_key_path(self): 1183*800a58d9SAndroid Build Coastguard Worker """Return host_ssh_private_key_path.""" 1184*800a58d9SAndroid Build Coastguard Worker return self._host_ssh_private_key_path 1185*800a58d9SAndroid Build Coastguard Worker 1186*800a58d9SAndroid Build Coastguard Worker @property 1187*800a58d9SAndroid Build Coastguard Worker def no_pull_log(self): 1188*800a58d9SAndroid Build Coastguard Worker """Return no_pull_log.""" 1189*800a58d9SAndroid Build Coastguard Worker return self._no_pull_log 1190*800a58d9SAndroid Build Coastguard Worker 1191*800a58d9SAndroid Build Coastguard Worker @property 1192*800a58d9SAndroid Build Coastguard Worker def mkcert(self): 1193*800a58d9SAndroid Build Coastguard Worker """Return mkcert.""" 1194*800a58d9SAndroid Build Coastguard Worker return self._mkcert 1195*800a58d9SAndroid Build Coastguard Worker 1196*800a58d9SAndroid Build Coastguard Worker @property 1197*800a58d9SAndroid Build Coastguard Worker def gce_metadata(self): 1198*800a58d9SAndroid Build Coastguard Worker """Return gce_metadata.""" 1199*800a58d9SAndroid Build Coastguard Worker return self._gce_metadata 1200*800a58d9SAndroid Build Coastguard Worker 1201*800a58d9SAndroid Build Coastguard Worker @property 1202*800a58d9SAndroid Build Coastguard Worker def gce_only(self): 1203*800a58d9SAndroid Build Coastguard Worker """Return gce_only.""" 1204*800a58d9SAndroid Build Coastguard Worker return self._gce_only 1205*800a58d9SAndroid Build Coastguard Worker 1206*800a58d9SAndroid Build Coastguard Worker @property 1207*800a58d9SAndroid Build Coastguard Worker def oxygen(self): 1208*800a58d9SAndroid Build Coastguard Worker """Return oxygen.""" 1209*800a58d9SAndroid Build Coastguard Worker return self._oxygen 1210*800a58d9SAndroid Build Coastguard Worker 1211*800a58d9SAndroid Build Coastguard Worker @property 1212*800a58d9SAndroid Build Coastguard Worker def openwrt(self): 1213*800a58d9SAndroid Build Coastguard Worker """Return openwrt.""" 1214*800a58d9SAndroid Build Coastguard Worker return self._openwrt 1215*800a58d9SAndroid Build Coastguard Worker 1216*800a58d9SAndroid Build Coastguard Worker @property 1217*800a58d9SAndroid Build Coastguard Worker def use_launch_cvd(self): 1218*800a58d9SAndroid Build Coastguard Worker """Return use_launch_cvd.""" 1219*800a58d9SAndroid Build Coastguard Worker return self._use_launch_cvd 1220*800a58d9SAndroid Build Coastguard Worker 1221*800a58d9SAndroid Build Coastguard Worker @property 1222*800a58d9SAndroid Build Coastguard Worker def launch_args(self): 1223*800a58d9SAndroid Build Coastguard Worker """Return launch_args.""" 1224*800a58d9SAndroid Build Coastguard Worker return self._launch_args 1225*800a58d9SAndroid Build Coastguard Worker 1226*800a58d9SAndroid Build Coastguard Worker @property 1227*800a58d9SAndroid Build Coastguard Worker def cvd_host_package(self): 1228*800a58d9SAndroid Build Coastguard Worker """Return cvd_host_package.""" 1229*800a58d9SAndroid Build Coastguard Worker return self._cvd_host_package 1230*800a58d9SAndroid Build Coastguard Worker 1231*800a58d9SAndroid Build Coastguard Worker @property 1232*800a58d9SAndroid Build Coastguard Worker def trusty_host_package(self): 1233*800a58d9SAndroid Build Coastguard Worker """Return trusty_host_package.""" 1234*800a58d9SAndroid Build Coastguard Worker return self._trusty_host_package 1235*800a58d9SAndroid Build Coastguard Worker 1236*800a58d9SAndroid Build Coastguard Worker @property 1237*800a58d9SAndroid Build Coastguard Worker def trusty_build_info(self): 1238*800a58d9SAndroid Build Coastguard Worker """Return trusty_build_info.""" 1239*800a58d9SAndroid Build Coastguard Worker return self._trusty_build_info 1240*800a58d9SAndroid Build Coastguard Worker 1241*800a58d9SAndroid Build Coastguard Worker @property 1242*800a58d9SAndroid Build Coastguard Worker def extra_files(self): 1243*800a58d9SAndroid Build Coastguard Worker """Return extra_files.""" 1244*800a58d9SAndroid Build Coastguard Worker return self._extra_files 1245*800a58d9SAndroid Build Coastguard Worker 1246*800a58d9SAndroid Build Coastguard Worker @property 1247*800a58d9SAndroid Build Coastguard Worker def force_sync(self): 1248*800a58d9SAndroid Build Coastguard Worker """Return force_sync.""" 1249*800a58d9SAndroid Build Coastguard Worker return self._force_sync 1250*800a58d9SAndroid Build Coastguard Worker 1251*800a58d9SAndroid Build Coastguard Worker @property 1252*800a58d9SAndroid Build Coastguard Worker def webrtc_device_id(self): 1253*800a58d9SAndroid Build Coastguard Worker """Return webrtc_device_id.""" 1254*800a58d9SAndroid Build Coastguard Worker return self._webrtc_device_id 1255*800a58d9SAndroid Build Coastguard Worker 1256*800a58d9SAndroid Build Coastguard Worker @property 1257*800a58d9SAndroid Build Coastguard Worker def connect_hostname(self): 1258*800a58d9SAndroid Build Coastguard Worker """Return connect_hostname""" 1259*800a58d9SAndroid Build Coastguard Worker return self._connect_hostname 1260