Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | |
| 3 | """Upload a local build to Google Compute Engine and run it.""" |
| 4 | |
| 5 | import argparse |
| 6 | import glob |
| 7 | import os |
| 8 | import subprocess |
| 9 | |
| 10 | |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 11 | def 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 Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 18 | def upload_artifacts(args): |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 19 | dir = os.getcwd() |
| 20 | try: |
| 21 | os.chdir(args.image_dir) |
| 22 | images = glob.glob('*.img') |
| 23 | if len(images) == 0: |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 24 | raise OSError('No images found in: %s' + args.image_dir) |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 25 | subprocess.check_call( |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 26 | 'tar -c -f - --lzop -S ' + ' '.join(images) + |
| 27 | ' | ' + |
| 28 | gcloud_ssh(args) + '-- tar -x -f - --lzop -S', |
| 29 | shell=True) |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 30 | finally: |
| 31 | os.chdir(dir) |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 32 | |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 33 | host_package = os.path.join(args.host_dir, 'cvd-host_package.tar.gz') |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 34 | subprocess.check_call( |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 35 | gcloud_ssh(args) + '-- tar -x -z -f - < %s' % host_package, |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 36 | shell=True) |
| 37 | |
| 38 | |
| 39 | def launch_cvd(args): |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 40 | launch_cvd_args = '' |
dimitry | 33bc42e | 2018-10-26 12:23:35 +0200 | [diff] [blame] | 41 | if args.data_image: |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 42 | 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 Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 50 | |
| 51 | |
| 52 | def stop_cvd(args): |
| 53 | subprocess.call( |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 54 | gcloud_ssh(args) + '-- ./bin/stop_cvd', |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 55 | shell=True) |
| 56 | |
| 57 | |
| 58 | def main(): |
| 59 | parser = argparse.ArgumentParser( |
Greg Hartman | 4c765a4 | 2018-06-12 17:54:38 -0700 | [diff] [blame] | 60 | description='Upload a local build to Google Compute Engine and run it') |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 61 | parser.add_argument( |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 62 | '-host_dir', |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 63 | type=str, |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 64 | default=os.environ.get('ANDROID_HOST_OUT', '.'), |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 65 | help='path to the dist directory') |
| 66 | parser.add_argument( |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 67 | '-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 Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 72 | '-instance', type=str, required=True, |
| 73 | help='instance to update') |
| 74 | parser.add_argument( |
Jason Macnak | 4484d30 | 2019-12-04 14:53:54 -0800 | [diff] [blame] | 75 | '-zone', type=str, default=None, |
| 76 | help='zone containing the instance') |
| 77 | parser.add_argument( |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 78 | '-user', type=str, default='vsoc-01', |
| 79 | help='user to update on the instance') |
dimitry | 33bc42e | 2018-10-26 12:23:35 +0200 | [diff] [blame] | 80 | 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 Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 86 | parser.add_argument( |
| 87 | '-launch', default=False, |
| 88 | action='store_true', |
| 89 | help='launch the device') |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 90 | args = parser.parse_args() |
| 91 | stop_cvd(args) |
| 92 | upload_artifacts(args) |
Greg Hartman | cb878dc | 2019-03-25 21:22:54 -0700 | [diff] [blame] | 93 | if args.launch: |
| 94 | launch_cvd(args) |
Greg Hartman | 7768f45 | 2018-04-30 17:40:22 -0700 | [diff] [blame] | 95 | |
| 96 | |
| 97 | if __name__ == '__main__': |
| 98 | main() |