blob: f9e796c6ff1d877c669a518eea27ce5e0f14fcc1 [file] [log] [blame]
Greg Hartman7768f452018-04-30 17:40:22 -07001#!/usr/bin/python
2
3"""Upload a local build to Google Compute Engine and run it."""
4
5import argparse
6import glob
7import os
8import subprocess
9
10
Jason Macnak4484d302019-12-04 14:53:54 -080011def gcloud_ssh(args):
12 command = 'gcloud compute ssh %s@%s ' % (args.user, args.instance)
13 if args.zone:
14 command += '--zone=%s ' % args.zone
15 return command
16
17
Greg Hartman7768f452018-04-30 17:40:22 -070018def upload_artifacts(args):
Greg Hartmancb878dc2019-03-25 21:22:54 -070019 dir = os.getcwd()
20 try:
21 os.chdir(args.image_dir)
22 images = glob.glob('*.img')
23 if len(images) == 0:
Jason Macnak4484d302019-12-04 14:53:54 -080024 raise OSError('No images found in: %s' + args.image_dir)
Greg Hartmancb878dc2019-03-25 21:22:54 -070025 subprocess.check_call(
Jason Macnak4484d302019-12-04 14:53:54 -080026 'tar -c -f - --lzop -S ' + ' '.join(images) +
27 ' | ' +
28 gcloud_ssh(args) + '-- tar -x -f - --lzop -S',
29 shell=True)
Greg Hartmancb878dc2019-03-25 21:22:54 -070030 finally:
31 os.chdir(dir)
Greg Hartman7768f452018-04-30 17:40:22 -070032
Greg Hartmancb878dc2019-03-25 21:22:54 -070033 host_package = os.path.join(args.host_dir, 'cvd-host_package.tar.gz')
Greg Hartman7768f452018-04-30 17:40:22 -070034 subprocess.check_call(
Jason Macnak4484d302019-12-04 14:53:54 -080035 gcloud_ssh(args) + '-- tar -x -z -f - < %s' % host_package,
Greg Hartman7768f452018-04-30 17:40:22 -070036 shell=True)
37
38
39def launch_cvd(args):
Jason Macnak4484d302019-12-04 14:53:54 -080040 launch_cvd_args = ''
dimitry33bc42e2018-10-26 12:23:35 +020041 if args.data_image:
Jason Macnak4484d302019-12-04 14:53:54 -080042 launch_cvd_args = (
43 '--data-image %s '
44 '--data-policy create_if_missing '
45 '--blank-data-image-mb %d ' % (args.data_image, args.blank_data_image_mb))
46
47 subprocess.check_call(
48 gcloud_ssh(args) + '-- ./bin/launch_cvd ' + launch_cvd_args,
49 shell=True)
Greg Hartman7768f452018-04-30 17:40:22 -070050
51
52def stop_cvd(args):
53 subprocess.call(
Jason Macnak4484d302019-12-04 14:53:54 -080054 gcloud_ssh(args) + '-- ./bin/stop_cvd',
Greg Hartman7768f452018-04-30 17:40:22 -070055 shell=True)
56
57
58def main():
59 parser = argparse.ArgumentParser(
Greg Hartman4c765a42018-06-12 17:54:38 -070060 description='Upload a local build to Google Compute Engine and run it')
Greg Hartman7768f452018-04-30 17:40:22 -070061 parser.add_argument(
Greg Hartmancb878dc2019-03-25 21:22:54 -070062 '-host_dir',
Greg Hartman7768f452018-04-30 17:40:22 -070063 type=str,
Greg Hartmancb878dc2019-03-25 21:22:54 -070064 default=os.environ.get('ANDROID_HOST_OUT', '.'),
Greg Hartman7768f452018-04-30 17:40:22 -070065 help='path to the dist directory')
66 parser.add_argument(
Greg Hartmancb878dc2019-03-25 21:22:54 -070067 '-image_dir',
68 type=str,
69 default=os.environ.get('ANDROID_PRODUCT_OUT', '.'),
70 help='path to the img files')
71 parser.add_argument(
Greg Hartman7768f452018-04-30 17:40:22 -070072 '-instance', type=str, required=True,
73 help='instance to update')
74 parser.add_argument(
Jason Macnak4484d302019-12-04 14:53:54 -080075 '-zone', type=str, default=None,
76 help='zone containing the instance')
77 parser.add_argument(
Greg Hartman7768f452018-04-30 17:40:22 -070078 '-user', type=str, default='vsoc-01',
79 help='user to update on the instance')
dimitry33bc42e2018-10-26 12:23:35 +020080 parser.add_argument(
81 '-data-image', type=str, default=None,
82 help='userdata image file name, this file will be used instead of default one')
83 parser.add_argument(
84 '-blank-data-image-mb', type=int, default=4098,
85 help='custom userdata image size in megabytes')
Greg Hartmancb878dc2019-03-25 21:22:54 -070086 parser.add_argument(
87 '-launch', default=False,
88 action='store_true',
89 help='launch the device')
Greg Hartman7768f452018-04-30 17:40:22 -070090 args = parser.parse_args()
91 stop_cvd(args)
92 upload_artifacts(args)
Greg Hartmancb878dc2019-03-25 21:22:54 -070093 if args.launch:
94 launch_cvd(args)
Greg Hartman7768f452018-04-30 17:40:22 -070095
96
97if __name__ == '__main__':
98 main()