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 Worker"""Action to create goldfish device instances. 17*800a58d9SAndroid Build Coastguard Worker 18*800a58d9SAndroid Build Coastguard WorkerA Goldfish device is an emulated android device based on the android 19*800a58d9SAndroid Build Coastguard Workeremulator. 20*800a58d9SAndroid Build Coastguard Worker""" 21*800a58d9SAndroid Build Coastguard Workerimport logging 22*800a58d9SAndroid Build Coastguard Workerimport os 23*800a58d9SAndroid Build Coastguard Workerimport re 24*800a58d9SAndroid Build Coastguard Worker 25*800a58d9SAndroid Build Coastguard Workerfrom acloud import errors 26*800a58d9SAndroid Build Coastguard Workerfrom acloud.public.actions import base_device_factory 27*800a58d9SAndroid Build Coastguard Workerfrom acloud.public.actions import common_operations 28*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal import constants 29*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import android_build_client 30*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import auth 31*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import goldfish_compute_client 32*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import utils 33*800a58d9SAndroid Build Coastguard Worker 34*800a58d9SAndroid Build Coastguard Worker 35*800a58d9SAndroid Build Coastguard Workerlogger = logging.getLogger(__name__) 36*800a58d9SAndroid Build Coastguard Worker 37*800a58d9SAndroid Build Coastguard Worker_EMULATOR_INFO_FILENAME = "emulator-info.txt" 38*800a58d9SAndroid Build Coastguard Worker_SYSIMAGE_INFO_FILENAME = "android-info.txt" 39*800a58d9SAndroid Build Coastguard Worker_VERSION_PATTERN = r"version-.*=(\d+)" 40*800a58d9SAndroid Build Coastguard Worker 41*800a58d9SAndroid Build Coastguard Worker 42*800a58d9SAndroid Build Coastguard Workerclass GoldfishDeviceFactory(base_device_factory.BaseDeviceFactory): 43*800a58d9SAndroid Build Coastguard Worker """A class that can produce a goldfish device. 44*800a58d9SAndroid Build Coastguard Worker 45*800a58d9SAndroid Build Coastguard Worker Attributes: 46*800a58d9SAndroid Build Coastguard Worker _cfg: An AcloudConfig instance. 47*800a58d9SAndroid Build Coastguard Worker _build_target: String, the build target, e.g. aosp_x86-eng. 48*800a58d9SAndroid Build Coastguard Worker _build_id: String, Build id, e.g. "2263051", "P2804227" 49*800a58d9SAndroid Build Coastguard Worker _emulator_build_target: String, the emulator build target, e.g. aosp_x86-eng. 50*800a58d9SAndroid Build Coastguard Worker _emulator_build_id: String, emulator build id. 51*800a58d9SAndroid Build Coastguard Worker _gpu: String, GPU to attach to the device or None. e.g. "nvidia-tesla-k80" 52*800a58d9SAndroid Build Coastguard Worker _blank_data_disk_size_gb: Integer, extra disk size 53*800a58d9SAndroid Build Coastguard Worker _build_client: An AndroidBuildClient instance 54*800a58d9SAndroid Build Coastguard Worker _branch: String, android branch name, e.g. git_master 55*800a58d9SAndroid Build Coastguard Worker _emulator_branch: String, emulator branch name, e.g. "aosp-emu-master-dev" 56*800a58d9SAndroid Build Coastguard Worker """ 57*800a58d9SAndroid Build Coastguard Worker LOG_FILES = ["/home/vsoc-01/emulator.log", 58*800a58d9SAndroid Build Coastguard Worker "/home/vsoc-01/log/logcat.log", 59*800a58d9SAndroid Build Coastguard Worker "/home/vsoc-01/log/adb.log", 60*800a58d9SAndroid Build Coastguard Worker "/var/log/daemon.log"] 61*800a58d9SAndroid Build Coastguard Worker 62*800a58d9SAndroid Build Coastguard Worker def __init__(self, 63*800a58d9SAndroid Build Coastguard Worker cfg, 64*800a58d9SAndroid Build Coastguard Worker build_target, 65*800a58d9SAndroid Build Coastguard Worker build_id, 66*800a58d9SAndroid Build Coastguard Worker emulator_build_target, 67*800a58d9SAndroid Build Coastguard Worker emulator_build_id, 68*800a58d9SAndroid Build Coastguard Worker kernel_build_id=None, 69*800a58d9SAndroid Build Coastguard Worker kernel_branch=None, 70*800a58d9SAndroid Build Coastguard Worker kernel_build_target=None, 71*800a58d9SAndroid Build Coastguard Worker gpu=None, 72*800a58d9SAndroid Build Coastguard Worker avd_spec=None, 73*800a58d9SAndroid Build Coastguard Worker tags=None, 74*800a58d9SAndroid Build Coastguard Worker branch=None, 75*800a58d9SAndroid Build Coastguard Worker emulator_branch=None): 76*800a58d9SAndroid Build Coastguard Worker 77*800a58d9SAndroid Build Coastguard Worker """Initialize. 78*800a58d9SAndroid Build Coastguard Worker 79*800a58d9SAndroid Build Coastguard Worker Args: 80*800a58d9SAndroid Build Coastguard Worker cfg: An AcloudConfig instance. 81*800a58d9SAndroid Build Coastguard Worker build_target: String, the build target, e.g. aosp_x86-eng. 82*800a58d9SAndroid Build Coastguard Worker build_id: String, Build id, e.g. "2263051", "P2804227" 83*800a58d9SAndroid Build Coastguard Worker emulator_build_target: String, the emulator build target, e.g. aosp_x86-eng. 84*800a58d9SAndroid Build Coastguard Worker emulator_build_id: String, emulator build id. 85*800a58d9SAndroid Build Coastguard Worker gpu: String, GPU to attach to the device or None. e.g. "nvidia-tesla-k80" 86*800a58d9SAndroid Build Coastguard Worker avd_spec: An AVDSpec instance. 87*800a58d9SAndroid Build Coastguard Worker tags: A list of tags to associate with the instance. e.g. 88*800a58d9SAndroid Build Coastguard Worker ["http-server", "https-server"] 89*800a58d9SAndroid Build Coastguard Worker branch: String, branch of the emulator build target. 90*800a58d9SAndroid Build Coastguard Worker emulator_branch: String, branch of the emulator. 91*800a58d9SAndroid Build Coastguard Worker """ 92*800a58d9SAndroid Build Coastguard Worker 93*800a58d9SAndroid Build Coastguard Worker self.credentials = auth.CreateCredentials(cfg) 94*800a58d9SAndroid Build Coastguard Worker 95*800a58d9SAndroid Build Coastguard Worker compute_client = goldfish_compute_client.GoldfishComputeClient( 96*800a58d9SAndroid Build Coastguard Worker cfg, self.credentials) 97*800a58d9SAndroid Build Coastguard Worker super().__init__(compute_client) 98*800a58d9SAndroid Build Coastguard Worker 99*800a58d9SAndroid Build Coastguard Worker # Private creation parameters 100*800a58d9SAndroid Build Coastguard Worker self._cfg = cfg 101*800a58d9SAndroid Build Coastguard Worker self._gpu = gpu 102*800a58d9SAndroid Build Coastguard Worker self._avd_spec = avd_spec 103*800a58d9SAndroid Build Coastguard Worker self._blank_data_disk_size_gb = cfg.extra_data_disk_size_gb 104*800a58d9SAndroid Build Coastguard Worker self._extra_scopes = cfg.extra_scopes 105*800a58d9SAndroid Build Coastguard Worker self._tags = tags 106*800a58d9SAndroid Build Coastguard Worker 107*800a58d9SAndroid Build Coastguard Worker # Configure clients 108*800a58d9SAndroid Build Coastguard Worker self._build_client = android_build_client.AndroidBuildClient( 109*800a58d9SAndroid Build Coastguard Worker self.credentials) 110*800a58d9SAndroid Build Coastguard Worker 111*800a58d9SAndroid Build Coastguard Worker # Get build info 112*800a58d9SAndroid Build Coastguard Worker self.build_info = self._build_client.GetBuildInfo( 113*800a58d9SAndroid Build Coastguard Worker build_target, build_id, branch) 114*800a58d9SAndroid Build Coastguard Worker self.emulator_build_info = self._build_client.GetBuildInfo( 115*800a58d9SAndroid Build Coastguard Worker emulator_build_target, emulator_build_id, emulator_branch) 116*800a58d9SAndroid Build Coastguard Worker self.kernel_build_info = self._build_client.GetBuildInfo( 117*800a58d9SAndroid Build Coastguard Worker kernel_build_target or cfg.kernel_build_target, kernel_build_id, 118*800a58d9SAndroid Build Coastguard Worker kernel_branch) 119*800a58d9SAndroid Build Coastguard Worker 120*800a58d9SAndroid Build Coastguard Worker def GetBuildInfoDict(self): 121*800a58d9SAndroid Build Coastguard Worker """Get build info dictionary. 122*800a58d9SAndroid Build Coastguard Worker 123*800a58d9SAndroid Build Coastguard Worker Returns: 124*800a58d9SAndroid Build Coastguard Worker A build info dictionary 125*800a58d9SAndroid Build Coastguard Worker """ 126*800a58d9SAndroid Build Coastguard Worker build_info_dict = { 127*800a58d9SAndroid Build Coastguard Worker key: val for key, val in utils.GetDictItems(self.build_info) if val} 128*800a58d9SAndroid Build Coastguard Worker 129*800a58d9SAndroid Build Coastguard Worker build_info_dict.update( 130*800a58d9SAndroid Build Coastguard Worker {"emulator_%s" % key: val 131*800a58d9SAndroid Build Coastguard Worker for key, val in utils.GetDictItems(self.emulator_build_info) if val} 132*800a58d9SAndroid Build Coastguard Worker ) 133*800a58d9SAndroid Build Coastguard Worker 134*800a58d9SAndroid Build Coastguard Worker build_info_dict.update( 135*800a58d9SAndroid Build Coastguard Worker {"kernel_%s" % key: val 136*800a58d9SAndroid Build Coastguard Worker for key, val in utils.GetDictItems(self.kernel_build_info) if val} 137*800a58d9SAndroid Build Coastguard Worker ) 138*800a58d9SAndroid Build Coastguard Worker 139*800a58d9SAndroid Build Coastguard Worker return build_info_dict 140*800a58d9SAndroid Build Coastguard Worker 141*800a58d9SAndroid Build Coastguard Worker def CreateInstance(self): 142*800a58d9SAndroid Build Coastguard Worker """Creates single configured goldfish device. 143*800a58d9SAndroid Build Coastguard Worker 144*800a58d9SAndroid Build Coastguard Worker Override method from parent class. 145*800a58d9SAndroid Build Coastguard Worker 146*800a58d9SAndroid Build Coastguard Worker Returns: 147*800a58d9SAndroid Build Coastguard Worker String, the name of the created instance. 148*800a58d9SAndroid Build Coastguard Worker """ 149*800a58d9SAndroid Build Coastguard Worker instance = self._compute_client.GenerateInstanceName( 150*800a58d9SAndroid Build Coastguard Worker build_id=self.build_info.build_id, 151*800a58d9SAndroid Build Coastguard Worker build_target=self.build_info.build_target) 152*800a58d9SAndroid Build Coastguard Worker 153*800a58d9SAndroid Build Coastguard Worker self._compute_client.CreateInstance( 154*800a58d9SAndroid Build Coastguard Worker instance=instance, 155*800a58d9SAndroid Build Coastguard Worker image_name=self._cfg.stable_goldfish_host_image_name, 156*800a58d9SAndroid Build Coastguard Worker image_project=self._cfg.stable_goldfish_host_image_project, 157*800a58d9SAndroid Build Coastguard Worker build_target=self.build_info.build_target, 158*800a58d9SAndroid Build Coastguard Worker branch=self.build_info.branch, 159*800a58d9SAndroid Build Coastguard Worker build_id=self.build_info.build_id, 160*800a58d9SAndroid Build Coastguard Worker emulator_branch=self.emulator_build_info.branch, 161*800a58d9SAndroid Build Coastguard Worker emulator_build_id=self.emulator_build_info.build_id, 162*800a58d9SAndroid Build Coastguard Worker emulator_build_target=self.emulator_build_info.build_target, 163*800a58d9SAndroid Build Coastguard Worker kernel_branch=self.kernel_build_info.branch, 164*800a58d9SAndroid Build Coastguard Worker kernel_build_id=self.kernel_build_info.build_id, 165*800a58d9SAndroid Build Coastguard Worker kernel_build_target=self.kernel_build_info.build_target, 166*800a58d9SAndroid Build Coastguard Worker gpu=self._gpu, 167*800a58d9SAndroid Build Coastguard Worker blank_data_disk_size_gb=self._blank_data_disk_size_gb, 168*800a58d9SAndroid Build Coastguard Worker avd_spec=self._avd_spec, 169*800a58d9SAndroid Build Coastguard Worker tags=self._tags, 170*800a58d9SAndroid Build Coastguard Worker extra_scopes=self._extra_scopes, 171*800a58d9SAndroid Build Coastguard Worker launch_args=self._cfg.launch_args) 172*800a58d9SAndroid Build Coastguard Worker 173*800a58d9SAndroid Build Coastguard Worker return instance 174*800a58d9SAndroid Build Coastguard Worker 175*800a58d9SAndroid Build Coastguard Worker 176*800a58d9SAndroid Build Coastguard Workerdef ParseBuildInfo(filename): 177*800a58d9SAndroid Build Coastguard Worker """Parse build id based on a substring. 178*800a58d9SAndroid Build Coastguard Worker 179*800a58d9SAndroid Build Coastguard Worker This will parse a file which contains build information to be used. For an 180*800a58d9SAndroid Build Coastguard Worker emulator build, the file will contain the information about the 181*800a58d9SAndroid Build Coastguard Worker corresponding stable system image build id. In emulator-info.txt, the file 182*800a58d9SAndroid Build Coastguard Worker will contains the information about the corresponding stable emulator 183*800a58d9SAndroid Build Coastguard Worker build id, for example "require version-emulator=5292001". In 184*800a58d9SAndroid Build Coastguard Worker android-info.txt, the file will contains the information about a stable 185*800a58d9SAndroid Build Coastguard Worker system image build id, for example 186*800a58d9SAndroid Build Coastguard Worker "version-sysimage-git_pi-dev-sdk_gphone_x86_64-userdebug=4833817" 187*800a58d9SAndroid Build Coastguard Worker 188*800a58d9SAndroid Build Coastguard Worker Args: 189*800a58d9SAndroid Build Coastguard Worker filename: Name of file to parse. 190*800a58d9SAndroid Build Coastguard Worker 191*800a58d9SAndroid Build Coastguard Worker Returns: 192*800a58d9SAndroid Build Coastguard Worker Build id parsed from the file based on pattern 193*800a58d9SAndroid Build Coastguard Worker Returns None if pattern not found in file 194*800a58d9SAndroid Build Coastguard Worker """ 195*800a58d9SAndroid Build Coastguard Worker with open(filename) as build_info_file: 196*800a58d9SAndroid Build Coastguard Worker for line in build_info_file: 197*800a58d9SAndroid Build Coastguard Worker match = re.search(_VERSION_PATTERN, line) 198*800a58d9SAndroid Build Coastguard Worker if match: 199*800a58d9SAndroid Build Coastguard Worker return match.group(1) 200*800a58d9SAndroid Build Coastguard Worker return None 201*800a58d9SAndroid Build Coastguard Worker 202*800a58d9SAndroid Build Coastguard Worker 203*800a58d9SAndroid Build Coastguard Workerdef _FetchBuildIdFromFile(cfg, build_target, build_id, filename): 204*800a58d9SAndroid Build Coastguard Worker """Parse and fetch build id from a file based on a pattern. 205*800a58d9SAndroid Build Coastguard Worker 206*800a58d9SAndroid Build Coastguard Worker Verify if one of the system image or emulator binary build id is missing. 207*800a58d9SAndroid Build Coastguard Worker If found missing, then update according to the resource file. 208*800a58d9SAndroid Build Coastguard Worker 209*800a58d9SAndroid Build Coastguard Worker Args: 210*800a58d9SAndroid Build Coastguard Worker cfg: An AcloudConfig instance. 211*800a58d9SAndroid Build Coastguard Worker build_target: Target name. 212*800a58d9SAndroid Build Coastguard Worker build_id: Build id, a string, e.g. "2263051", "P2804227" 213*800a58d9SAndroid Build Coastguard Worker filename: Name of file containing the build info. 214*800a58d9SAndroid Build Coastguard Worker 215*800a58d9SAndroid Build Coastguard Worker Returns: 216*800a58d9SAndroid Build Coastguard Worker A build id or None 217*800a58d9SAndroid Build Coastguard Worker """ 218*800a58d9SAndroid Build Coastguard Worker build_client = android_build_client.AndroidBuildClient( 219*800a58d9SAndroid Build Coastguard Worker auth.CreateCredentials(cfg)) 220*800a58d9SAndroid Build Coastguard Worker 221*800a58d9SAndroid Build Coastguard Worker with utils.TempDir() as tempdir: 222*800a58d9SAndroid Build Coastguard Worker temp_filename = os.path.join(tempdir, filename) 223*800a58d9SAndroid Build Coastguard Worker build_client.DownloadArtifact(build_target, 224*800a58d9SAndroid Build Coastguard Worker build_id, 225*800a58d9SAndroid Build Coastguard Worker filename, 226*800a58d9SAndroid Build Coastguard Worker temp_filename) 227*800a58d9SAndroid Build Coastguard Worker 228*800a58d9SAndroid Build Coastguard Worker return ParseBuildInfo(temp_filename) 229*800a58d9SAndroid Build Coastguard Worker 230*800a58d9SAndroid Build Coastguard Worker 231*800a58d9SAndroid Build Coastguard Worker#pylint: disable=too-many-locals 232*800a58d9SAndroid Build Coastguard Workerdef CreateDevices(avd_spec=None, 233*800a58d9SAndroid Build Coastguard Worker cfg=None, 234*800a58d9SAndroid Build Coastguard Worker build_target=None, 235*800a58d9SAndroid Build Coastguard Worker build_id=None, 236*800a58d9SAndroid Build Coastguard Worker emulator_build_id=None, 237*800a58d9SAndroid Build Coastguard Worker emulator_branch=None, 238*800a58d9SAndroid Build Coastguard Worker emulator_build_target=None, 239*800a58d9SAndroid Build Coastguard Worker kernel_build_id=None, 240*800a58d9SAndroid Build Coastguard Worker kernel_branch=None, 241*800a58d9SAndroid Build Coastguard Worker kernel_build_target=None, 242*800a58d9SAndroid Build Coastguard Worker gpu=None, 243*800a58d9SAndroid Build Coastguard Worker num=1, 244*800a58d9SAndroid Build Coastguard Worker serial_log_file=None, 245*800a58d9SAndroid Build Coastguard Worker autoconnect=False, 246*800a58d9SAndroid Build Coastguard Worker branch=None, 247*800a58d9SAndroid Build Coastguard Worker tags=None, 248*800a58d9SAndroid Build Coastguard Worker report_internal_ip=False, 249*800a58d9SAndroid Build Coastguard Worker boot_timeout_secs=None): 250*800a58d9SAndroid Build Coastguard Worker """Create one or multiple Goldfish devices. 251*800a58d9SAndroid Build Coastguard Worker 252*800a58d9SAndroid Build Coastguard Worker Args: 253*800a58d9SAndroid Build Coastguard Worker avd_spec: An AVDSpec instance. 254*800a58d9SAndroid Build Coastguard Worker cfg: An AcloudConfig instance. 255*800a58d9SAndroid Build Coastguard Worker build_target: String, the build target, e.g. aosp_x86-eng. 256*800a58d9SAndroid Build Coastguard Worker build_id: String, Build id, e.g. "2263051", "P2804227" 257*800a58d9SAndroid Build Coastguard Worker branch: String, Branch name for system image. 258*800a58d9SAndroid Build Coastguard Worker emulator_build_id: String, emulator build id. 259*800a58d9SAndroid Build Coastguard Worker emulator_branch: String, emulator branch name. 260*800a58d9SAndroid Build Coastguard Worker emulator_build_target: String, emulator build target. 261*800a58d9SAndroid Build Coastguard Worker gpu: String, GPU to attach to the device or None. e.g. "nvidia-k80" 262*800a58d9SAndroid Build Coastguard Worker kernel_build_id: Kernel build id, a string. 263*800a58d9SAndroid Build Coastguard Worker kernel_branch: Kernel branch name, a string. 264*800a58d9SAndroid Build Coastguard Worker kernel_build_target: Kernel build artifact, a string. 265*800a58d9SAndroid Build Coastguard Worker num: Integer, Number of devices to create. 266*800a58d9SAndroid Build Coastguard Worker serial_log_file: String, A path to a file where serial output should 267*800a58d9SAndroid Build Coastguard Worker be saved to. 268*800a58d9SAndroid Build Coastguard Worker autoconnect: Boolean, Create ssh tunnel(s) and adb connect after device 269*800a58d9SAndroid Build Coastguard Worker creation. 270*800a58d9SAndroid Build Coastguard Worker branch: String, Branch name for system image. 271*800a58d9SAndroid Build Coastguard Worker tags: A list of tags to associate with the instance. e.g. 272*800a58d9SAndroid Build Coastguard Worker ["http-server", "https-server"] 273*800a58d9SAndroid Build Coastguard Worker report_internal_ip: Boolean to report the internal ip instead of 274*800a58d9SAndroid Build Coastguard Worker external ip. 275*800a58d9SAndroid Build Coastguard Worker boot_timeout_secs: Integer, the maximum time in seconds used to 276*800a58d9SAndroid Build Coastguard Worker wait for the AVD to boot. 277*800a58d9SAndroid Build Coastguard Worker 278*800a58d9SAndroid Build Coastguard Worker Returns: 279*800a58d9SAndroid Build Coastguard Worker A Report instance. 280*800a58d9SAndroid Build Coastguard Worker """ 281*800a58d9SAndroid Build Coastguard Worker client_adb_port = None 282*800a58d9SAndroid Build Coastguard Worker if avd_spec: 283*800a58d9SAndroid Build Coastguard Worker cfg = avd_spec.cfg 284*800a58d9SAndroid Build Coastguard Worker build_target = avd_spec.remote_image[constants.BUILD_TARGET] 285*800a58d9SAndroid Build Coastguard Worker build_id = avd_spec.remote_image[constants.BUILD_ID] 286*800a58d9SAndroid Build Coastguard Worker branch = avd_spec.remote_image[constants.BUILD_BRANCH] 287*800a58d9SAndroid Build Coastguard Worker num = avd_spec.num 288*800a58d9SAndroid Build Coastguard Worker emulator_build_id = avd_spec.emulator_build_id 289*800a58d9SAndroid Build Coastguard Worker emulator_build_target = avd_spec.emulator_build_target 290*800a58d9SAndroid Build Coastguard Worker gpu = avd_spec.gpu 291*800a58d9SAndroid Build Coastguard Worker serial_log_file = avd_spec.serial_log_file 292*800a58d9SAndroid Build Coastguard Worker autoconnect = avd_spec.autoconnect 293*800a58d9SAndroid Build Coastguard Worker report_internal_ip = avd_spec.report_internal_ip 294*800a58d9SAndroid Build Coastguard Worker client_adb_port = avd_spec.client_adb_port 295*800a58d9SAndroid Build Coastguard Worker boot_timeout_secs = avd_spec.boot_timeout_secs 296*800a58d9SAndroid Build Coastguard Worker 297*800a58d9SAndroid Build Coastguard Worker if not emulator_build_target: 298*800a58d9SAndroid Build Coastguard Worker emulator_build_target = cfg.emulator_build_target 299*800a58d9SAndroid Build Coastguard Worker 300*800a58d9SAndroid Build Coastguard Worker # If emulator_build_id and emulator_branch is None, retrieve emulator 301*800a58d9SAndroid Build Coastguard Worker # build id from platform build emulator-info.txt artifact 302*800a58d9SAndroid Build Coastguard Worker # Example: require version-emulator=5292001 303*800a58d9SAndroid Build Coastguard Worker if not emulator_build_id and not emulator_branch: 304*800a58d9SAndroid Build Coastguard Worker logger.info("emulator_build_id not provided. " 305*800a58d9SAndroid Build Coastguard Worker "Attempting to get %s from build %s/%s.", _EMULATOR_INFO_FILENAME, 306*800a58d9SAndroid Build Coastguard Worker build_id, build_target) 307*800a58d9SAndroid Build Coastguard Worker emulator_build_id = _FetchBuildIdFromFile(cfg, 308*800a58d9SAndroid Build Coastguard Worker build_target, 309*800a58d9SAndroid Build Coastguard Worker build_id, 310*800a58d9SAndroid Build Coastguard Worker _EMULATOR_INFO_FILENAME) 311*800a58d9SAndroid Build Coastguard Worker 312*800a58d9SAndroid Build Coastguard Worker if not emulator_build_id: 313*800a58d9SAndroid Build Coastguard Worker raise errors.CommandArgError("Emulator build id not found " 314*800a58d9SAndroid Build Coastguard Worker "in %s" % _EMULATOR_INFO_FILENAME) 315*800a58d9SAndroid Build Coastguard Worker 316*800a58d9SAndroid Build Coastguard Worker # If build_id and branch is None, retrieve build_id from 317*800a58d9SAndroid Build Coastguard Worker # emulator build android-info.txt artifact 318*800a58d9SAndroid Build Coastguard Worker # Example: version-sysimage-git_pi-dev-sdk_gphone_x86_64-userdebug=4833817 319*800a58d9SAndroid Build Coastguard Worker if not build_id and not branch: 320*800a58d9SAndroid Build Coastguard Worker build_id = _FetchBuildIdFromFile(cfg, 321*800a58d9SAndroid Build Coastguard Worker emulator_build_target, 322*800a58d9SAndroid Build Coastguard Worker emulator_build_id, 323*800a58d9SAndroid Build Coastguard Worker _SYSIMAGE_INFO_FILENAME) 324*800a58d9SAndroid Build Coastguard Worker 325*800a58d9SAndroid Build Coastguard Worker if not build_id: 326*800a58d9SAndroid Build Coastguard Worker raise errors.CommandArgError("Emulator system image build id not found " 327*800a58d9SAndroid Build Coastguard Worker "in %s" % _SYSIMAGE_INFO_FILENAME) 328*800a58d9SAndroid Build Coastguard Worker logger.info( 329*800a58d9SAndroid Build Coastguard Worker "Creating a goldfish device in project %s, build_target: %s, " 330*800a58d9SAndroid Build Coastguard Worker "build_id: %s, emulator_bid: %s, emulator_branch: %s, kernel_build_id: %s, " 331*800a58d9SAndroid Build Coastguard Worker "kernel_branch: %s, kernel_build_target: %s, GPU: %s, num: %s, " 332*800a58d9SAndroid Build Coastguard Worker "serial_log_file: %s, " 333*800a58d9SAndroid Build Coastguard Worker "autoconnect: %s", cfg.project, build_target, build_id, 334*800a58d9SAndroid Build Coastguard Worker emulator_build_id, emulator_branch, kernel_build_id, kernel_branch, 335*800a58d9SAndroid Build Coastguard Worker kernel_build_target, gpu, num, serial_log_file, autoconnect) 336*800a58d9SAndroid Build Coastguard Worker 337*800a58d9SAndroid Build Coastguard Worker device_factory = GoldfishDeviceFactory( 338*800a58d9SAndroid Build Coastguard Worker cfg, build_target, build_id, 339*800a58d9SAndroid Build Coastguard Worker emulator_build_target, 340*800a58d9SAndroid Build Coastguard Worker emulator_build_id, gpu=gpu, 341*800a58d9SAndroid Build Coastguard Worker avd_spec=avd_spec, tags=tags, 342*800a58d9SAndroid Build Coastguard Worker branch=branch, 343*800a58d9SAndroid Build Coastguard Worker emulator_branch=emulator_branch, 344*800a58d9SAndroid Build Coastguard Worker kernel_build_id=kernel_build_id, 345*800a58d9SAndroid Build Coastguard Worker kernel_branch=kernel_branch, 346*800a58d9SAndroid Build Coastguard Worker kernel_build_target=kernel_build_target) 347*800a58d9SAndroid Build Coastguard Worker 348*800a58d9SAndroid Build Coastguard Worker return common_operations.CreateDevices("create_gf", cfg, device_factory, 349*800a58d9SAndroid Build Coastguard Worker num, constants.TYPE_GF, 350*800a58d9SAndroid Build Coastguard Worker report_internal_ip, autoconnect, 351*800a58d9SAndroid Build Coastguard Worker serial_log_file, client_adb_port, 352*800a58d9SAndroid Build Coastguard Worker boot_timeout_secs) 353