1*800a58d9SAndroid Build Coastguard Worker# Copyright 2018 - The Android Open Source Project 2*800a58d9SAndroid Build Coastguard Worker# 3*800a58d9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*800a58d9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*800a58d9SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*800a58d9SAndroid Build Coastguard Worker# 7*800a58d9SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*800a58d9SAndroid Build Coastguard Worker# 9*800a58d9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*800a58d9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*800a58d9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*800a58d9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*800a58d9SAndroid Build Coastguard Worker# limitations under the License. 14*800a58d9SAndroid Build Coastguard Workerr"""Setup entry point. 15*800a58d9SAndroid Build Coastguard Worker 16*800a58d9SAndroid Build Coastguard WorkerSetup will handle all of the necessary steps to enable acloud to create a local 17*800a58d9SAndroid Build Coastguard Workeror remote instance of an Android Virtual Device. 18*800a58d9SAndroid Build Coastguard Worker""" 19*800a58d9SAndroid Build Coastguard Worker 20*800a58d9SAndroid Build Coastguard Workerfrom __future__ import print_function 21*800a58d9SAndroid Build Coastguard Workerimport os 22*800a58d9SAndroid Build Coastguard Workerimport subprocess 23*800a58d9SAndroid Build Coastguard Workerimport sys 24*800a58d9SAndroid Build Coastguard Worker 25*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal import constants 26*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import utils 27*800a58d9SAndroid Build Coastguard Workerfrom acloud.public import config 28*800a58d9SAndroid Build Coastguard Workerfrom acloud.setup import host_setup_runner 29*800a58d9SAndroid Build Coastguard Workerfrom acloud.setup import gcp_setup_runner 30*800a58d9SAndroid Build Coastguard Worker 31*800a58d9SAndroid Build Coastguard Worker 32*800a58d9SAndroid Build Coastguard Workerdef Run(args): 33*800a58d9SAndroid Build Coastguard Worker """Run setup. 34*800a58d9SAndroid Build Coastguard Worker 35*800a58d9SAndroid Build Coastguard Worker Setup options: 36*800a58d9SAndroid Build Coastguard Worker -host: Setup host settings. 37*800a58d9SAndroid Build Coastguard Worker -gcp_init: Setup gcp settings. 38*800a58d9SAndroid Build Coastguard Worker -None, default behavior will setup host and gcp settings. 39*800a58d9SAndroid Build Coastguard Worker 40*800a58d9SAndroid Build Coastguard Worker Args: 41*800a58d9SAndroid Build Coastguard Worker args: Namespace object from argparse.parse_args. 42*800a58d9SAndroid Build Coastguard Worker """ 43*800a58d9SAndroid Build Coastguard Worker if args.update_config: 44*800a58d9SAndroid Build Coastguard Worker _UpdateConfig(args.config_file, args.update_config[0], args.update_config[1]) 45*800a58d9SAndroid Build Coastguard Worker return 46*800a58d9SAndroid Build Coastguard Worker 47*800a58d9SAndroid Build Coastguard Worker _RunPreSetup() 48*800a58d9SAndroid Build Coastguard Worker 49*800a58d9SAndroid Build Coastguard Worker # Setup process will be in the following manner: 50*800a58d9SAndroid Build Coastguard Worker # 1.Print welcome message. 51*800a58d9SAndroid Build Coastguard Worker _PrintWelcomeMessage() 52*800a58d9SAndroid Build Coastguard Worker 53*800a58d9SAndroid Build Coastguard Worker # 2.Init all subtasks in queue and traverse them. 54*800a58d9SAndroid Build Coastguard Worker host_base_runner = host_setup_runner.HostBasePkgInstaller() 55*800a58d9SAndroid Build Coastguard Worker host_avd_runner = host_setup_runner.AvdPkgInstaller() 56*800a58d9SAndroid Build Coastguard Worker host_cf_common_runner = host_setup_runner.CuttlefishCommonPkgInstaller() 57*800a58d9SAndroid Build Coastguard Worker host_localca_runner = host_setup_runner.LocalCAHostSetup() 58*800a58d9SAndroid Build Coastguard Worker host_env_runner = host_setup_runner.CuttlefishHostSetup() 59*800a58d9SAndroid Build Coastguard Worker gcp_runner = gcp_setup_runner.GcpTaskRunner(args.config_file) 60*800a58d9SAndroid Build Coastguard Worker task_queue = [] 61*800a58d9SAndroid Build Coastguard Worker # User must explicitly specify --host to install the avd host packages. 62*800a58d9SAndroid Build Coastguard Worker if args.host and utils.IsSupportedKvm(): 63*800a58d9SAndroid Build Coastguard Worker task_queue.append(host_base_runner) 64*800a58d9SAndroid Build Coastguard Worker task_queue.append(host_avd_runner) 65*800a58d9SAndroid Build Coastguard Worker task_queue.append(host_cf_common_runner) 66*800a58d9SAndroid Build Coastguard Worker task_queue.append(host_env_runner) 67*800a58d9SAndroid Build Coastguard Worker 68*800a58d9SAndroid Build Coastguard Worker task_queue.append(host_localca_runner) 69*800a58d9SAndroid Build Coastguard Worker 70*800a58d9SAndroid Build Coastguard Worker # We should do these setup tasks if specified or if no args were used. 71*800a58d9SAndroid Build Coastguard Worker if args.host_base or (not args.host and not args.gcp_init): 72*800a58d9SAndroid Build Coastguard Worker task_queue.append(host_base_runner) 73*800a58d9SAndroid Build Coastguard Worker if args.gcp_init or (not args.host and not args.host_base): 74*800a58d9SAndroid Build Coastguard Worker task_queue.append(gcp_runner) 75*800a58d9SAndroid Build Coastguard Worker 76*800a58d9SAndroid Build Coastguard Worker for subtask in task_queue: 77*800a58d9SAndroid Build Coastguard Worker subtask.Run(force_setup=args.force) 78*800a58d9SAndroid Build Coastguard Worker 79*800a58d9SAndroid Build Coastguard Worker # 3.Print the usage hints. 80*800a58d9SAndroid Build Coastguard Worker _PrintUsage() 81*800a58d9SAndroid Build Coastguard Worker 82*800a58d9SAndroid Build Coastguard Worker 83*800a58d9SAndroid Build Coastguard Workerdef _PrintWelcomeMessage(): 84*800a58d9SAndroid Build Coastguard Worker """Print welcome message when acloud setup been called.""" 85*800a58d9SAndroid Build Coastguard Worker 86*800a58d9SAndroid Build Coastguard Worker # pylint: disable=anomalous-backslash-in-string 87*800a58d9SAndroid Build Coastguard Worker asc_art = " \n" \ 88*800a58d9SAndroid Build Coastguard Worker " ___ _______ ____ __ _____ \n" \ 89*800a58d9SAndroid Build Coastguard Worker " / _ |/ ___/ / / __ \/ / / / _ \\ \n" \ 90*800a58d9SAndroid Build Coastguard Worker " / __ / /__/ /__/ /_/ / /_/ / // / \n" \ 91*800a58d9SAndroid Build Coastguard Worker "/_/ |_\\___/____/\\____/\\____/____/ \n" \ 92*800a58d9SAndroid Build Coastguard Worker " \n" 93*800a58d9SAndroid Build Coastguard Worker 94*800a58d9SAndroid Build Coastguard Worker print("\nWelcome to") 95*800a58d9SAndroid Build Coastguard Worker print(asc_art) 96*800a58d9SAndroid Build Coastguard Worker 97*800a58d9SAndroid Build Coastguard Worker 98*800a58d9SAndroid Build Coastguard Workerdef _PrintUsage(): 99*800a58d9SAndroid Build Coastguard Worker """Print cmd usage hints when acloud setup been finished.""" 100*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString("") 101*800a58d9SAndroid Build Coastguard Worker utils.PrintColorString("Setup process finished") 102*800a58d9SAndroid Build Coastguard Worker 103*800a58d9SAndroid Build Coastguard Worker 104*800a58d9SAndroid Build Coastguard Workerdef _RunPreSetup(): 105*800a58d9SAndroid Build Coastguard Worker """This will run any pre-setup scripts. 106*800a58d9SAndroid Build Coastguard Worker 107*800a58d9SAndroid Build Coastguard Worker If we can find any pre-setup scripts, run it and don't care about the 108*800a58d9SAndroid Build Coastguard Worker results. Pre-setup scripts will do any special setup before actual 109*800a58d9SAndroid Build Coastguard Worker setup occurs (e.g. copying configs). 110*800a58d9SAndroid Build Coastguard Worker """ 111*800a58d9SAndroid Build Coastguard Worker if constants.ENV_ANDROID_BUILD_TOP not in os.environ: 112*800a58d9SAndroid Build Coastguard Worker print("Can't find $%s." % constants.ENV_ANDROID_BUILD_TOP) 113*800a58d9SAndroid Build Coastguard Worker print("Please run '#source build/envsetup.sh && lunch <target>' first.") 114*800a58d9SAndroid Build Coastguard Worker sys.exit(constants.EXIT_BY_USER) 115*800a58d9SAndroid Build Coastguard Worker 116*800a58d9SAndroid Build Coastguard Worker pre_setup_sh = os.path.join(os.environ.get(constants.ENV_ANDROID_BUILD_TOP), 117*800a58d9SAndroid Build Coastguard Worker "tools", 118*800a58d9SAndroid Build Coastguard Worker "acloud", 119*800a58d9SAndroid Build Coastguard Worker "setup", 120*800a58d9SAndroid Build Coastguard Worker "pre_setup_sh", 121*800a58d9SAndroid Build Coastguard Worker "acloud_pre_setup.sh") 122*800a58d9SAndroid Build Coastguard Worker 123*800a58d9SAndroid Build Coastguard Worker if os.path.exists(pre_setup_sh): 124*800a58d9SAndroid Build Coastguard Worker subprocess.call([pre_setup_sh]) 125*800a58d9SAndroid Build Coastguard Worker 126*800a58d9SAndroid Build Coastguard Workerdef _UpdateConfig(config_file, field, value): 127*800a58d9SAndroid Build Coastguard Worker """Update the user config. 128*800a58d9SAndroid Build Coastguard Worker 129*800a58d9SAndroid Build Coastguard Worker Args: 130*800a58d9SAndroid Build Coastguard Worker config_file: String of config file path. 131*800a58d9SAndroid Build Coastguard Worker field: String, field name in user config. 132*800a58d9SAndroid Build Coastguard Worker value: String, the value of field. 133*800a58d9SAndroid Build Coastguard Worker """ 134*800a58d9SAndroid Build Coastguard Worker config_mgr = config.AcloudConfigManager(config_file) 135*800a58d9SAndroid Build Coastguard Worker config_mgr.Load() 136*800a58d9SAndroid Build Coastguard Worker user_config = config_mgr.user_config_path 137*800a58d9SAndroid Build Coastguard Worker print("Your config (%s) is updated." % user_config) 138*800a58d9SAndroid Build Coastguard Worker gcp_setup_runner.UpdateConfigFile(user_config, field, value) 139*800a58d9SAndroid Build Coastguard Worker _PrintUsage() 140