1*800a58d9SAndroid Build Coastguard Worker#!/usr/bin/env python 2*800a58d9SAndroid Build Coastguard Worker# 3*800a58d9SAndroid Build Coastguard Worker# Copyright 2016 - 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"""Acloud Kernel Utility. 17*800a58d9SAndroid Build Coastguard Worker 18*800a58d9SAndroid Build Coastguard WorkerThis CLI implements additional functionality to acloud CLI. 19*800a58d9SAndroid Build Coastguard Worker""" 20*800a58d9SAndroid Build Coastguard Workerimport argparse 21*800a58d9SAndroid Build Coastguard Workerimport sys 22*800a58d9SAndroid Build Coastguard Worker 23*800a58d9SAndroid Build Coastguard Workerfrom acloud.public import acloud_common 24*800a58d9SAndroid Build Coastguard Workerfrom acloud.public import config 25*800a58d9SAndroid Build Coastguard Workerfrom acloud.public.acloud_kernel import kernel_swapper 26*800a58d9SAndroid Build Coastguard Worker 27*800a58d9SAndroid Build Coastguard Worker 28*800a58d9SAndroid Build Coastguard WorkerDEFAULT_CONFIG_FILE = "acloud.config" 29*800a58d9SAndroid Build Coastguard Worker 30*800a58d9SAndroid Build Coastguard Worker# Commands 31*800a58d9SAndroid Build Coastguard WorkerCMD_SWAP_KERNEL = "swap_kernel" 32*800a58d9SAndroid Build Coastguard Worker 33*800a58d9SAndroid Build Coastguard Worker 34*800a58d9SAndroid Build Coastguard Workerdef _ParseArgs(args): 35*800a58d9SAndroid Build Coastguard Worker """Parse args. 36*800a58d9SAndroid Build Coastguard Worker 37*800a58d9SAndroid Build Coastguard Worker Args: 38*800a58d9SAndroid Build Coastguard Worker args: argument list passed from main. 39*800a58d9SAndroid Build Coastguard Worker 40*800a58d9SAndroid Build Coastguard Worker Returns: 41*800a58d9SAndroid Build Coastguard Worker Parsed args. 42*800a58d9SAndroid Build Coastguard Worker """ 43*800a58d9SAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 44*800a58d9SAndroid Build Coastguard Worker subparsers = parser.add_subparsers() 45*800a58d9SAndroid Build Coastguard Worker 46*800a58d9SAndroid Build Coastguard Worker swap_kernel_parser = subparsers.add_parser(CMD_SWAP_KERNEL) 47*800a58d9SAndroid Build Coastguard Worker swap_kernel_parser.required = False 48*800a58d9SAndroid Build Coastguard Worker swap_kernel_parser.set_defaults(which=CMD_SWAP_KERNEL) 49*800a58d9SAndroid Build Coastguard Worker swap_kernel_parser.add_argument( 50*800a58d9SAndroid Build Coastguard Worker "--instance_name", 51*800a58d9SAndroid Build Coastguard Worker type=str, 52*800a58d9SAndroid Build Coastguard Worker dest="instance_name", 53*800a58d9SAndroid Build Coastguard Worker required=True, 54*800a58d9SAndroid Build Coastguard Worker help="The names of the instances that will have their kernels swapped, " 55*800a58d9SAndroid Build Coastguard Worker "separated by spaces, e.g. --instance_names instance-1 instance-2") 56*800a58d9SAndroid Build Coastguard Worker swap_kernel_parser.add_argument( 57*800a58d9SAndroid Build Coastguard Worker "--local_kernel_image", 58*800a58d9SAndroid Build Coastguard Worker type=str, 59*800a58d9SAndroid Build Coastguard Worker dest="local_kernel_image", 60*800a58d9SAndroid Build Coastguard Worker required=True, 61*800a58d9SAndroid Build Coastguard Worker help="Path to a local disk image to use, e.g /tmp/bzImage") 62*800a58d9SAndroid Build Coastguard Worker acloud_common.AddCommonArguments(swap_kernel_parser) 63*800a58d9SAndroid Build Coastguard Worker 64*800a58d9SAndroid Build Coastguard Worker return parser.parse_args(args) 65*800a58d9SAndroid Build Coastguard Worker 66*800a58d9SAndroid Build Coastguard Worker 67*800a58d9SAndroid Build Coastguard Workerdef main(argv): 68*800a58d9SAndroid Build Coastguard Worker """Main entry. 69*800a58d9SAndroid Build Coastguard Worker 70*800a58d9SAndroid Build Coastguard Worker Args: 71*800a58d9SAndroid Build Coastguard Worker argv: list of system arguments. 72*800a58d9SAndroid Build Coastguard Worker 73*800a58d9SAndroid Build Coastguard Worker Returns: 74*800a58d9SAndroid Build Coastguard Worker 0 if success. Non-zero otherwise. 75*800a58d9SAndroid Build Coastguard Worker """ 76*800a58d9SAndroid Build Coastguard Worker args = _ParseArgs(argv) 77*800a58d9SAndroid Build Coastguard Worker config_mgr = config.AcloudConfigManager(args.config_file) 78*800a58d9SAndroid Build Coastguard Worker cfg = config_mgr.Load() 79*800a58d9SAndroid Build Coastguard Worker cfg.OverrideWithArgs(args) 80*800a58d9SAndroid Build Coastguard Worker 81*800a58d9SAndroid Build Coastguard Worker k_swapper = kernel_swapper.KernelSwapper(cfg, args.instance_name) 82*800a58d9SAndroid Build Coastguard Worker report = k_swapper.SwapKernel(args.local_kernel_image) 83*800a58d9SAndroid Build Coastguard Worker 84*800a58d9SAndroid Build Coastguard Worker report.Dump(args.report_file) 85*800a58d9SAndroid Build Coastguard Worker if report.errors: 86*800a58d9SAndroid Build Coastguard Worker msg = "\n".join(report.errors) 87*800a58d9SAndroid Build Coastguard Worker sys.stderr.write("Encountered the following errors:\n%s\n" % msg) 88*800a58d9SAndroid Build Coastguard Worker return 1 89*800a58d9SAndroid Build Coastguard Worker return 0 90