xref: /aosp_15_r20/tools/acloud/public/acloud_kernel/acloud_kernel.py (revision 800a58d989c669b8eb8a71d8df53b1ba3d411444)
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