chore: Moving GCE API samples from python-docs-samples (b/191786905) (#1429)

Co-authored-by: Anthonios Partheniou <partheniou@google.com>
diff --git a/samples/compute/create_instance.py b/samples/compute/create_instance.py
new file mode 100644
index 0000000..3ccffc5
--- /dev/null
+++ b/samples/compute/create_instance.py
@@ -0,0 +1,192 @@
+#!/usr/bin/env python
+
+# Copyright 2015 Google Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Example of using the Compute Engine API to create and delete instances.
+
+Creates a new compute engine instance and uses it to apply a caption to
+an image.
+
+For more information, see the README.md under samples/compute.
+"""
+
+import argparse
+import os
+import time
+
+import googleapiclient.discovery
+from six.moves import input
+
+
+# [START compute_apiary_list_instances]
+def list_instances(compute, project, zone):
+    result = compute.instances().list(project=project, zone=zone).execute()
+    return result['items'] if 'items' in result else None
+# [END compute_apiary_list_instances]
+
+
+# [START compute_apiary_create_instance]
+def create_instance(compute, project, zone, name, bucket):
+    # Get the latest Debian Jessie image.
+    image_response = compute.images().getFromFamily(
+        project='debian-cloud', family='debian-9').execute()
+    source_disk_image = image_response['selfLink']
+
+    # Configure the machine
+    machine_type = "zones/%s/machineTypes/n1-standard-1" % zone
+    startup_script = open(
+        os.path.join(
+            os.path.dirname(__file__), 'startup-script.sh'), 'r').read()
+    image_url = "http://storage.googleapis.com/gce-demo-input/photo.jpg"
+    image_caption = "Ready for dessert?"
+
+    config = {
+        'name': name,
+        'machineType': machine_type,
+
+        # Specify the boot disk and the image to use as a source.
+        'disks': [
+            {
+                'boot': True,
+                'autoDelete': True,
+                'initializeParams': {
+                    'sourceImage': source_disk_image,
+                }
+            }
+        ],
+
+        # Specify a network interface with NAT to access the public
+        # internet.
+        'networkInterfaces': [{
+            'network': 'global/networks/default',
+            'accessConfigs': [
+                {'type': 'ONE_TO_ONE_NAT', 'name': 'External NAT'}
+            ]
+        }],
+
+        # Allow the instance to access cloud storage and logging.
+        'serviceAccounts': [{
+            'email': 'default',
+            'scopes': [
+                'https://www.googleapis.com/auth/devstorage.read_write',
+                'https://www.googleapis.com/auth/logging.write'
+            ]
+        }],
+
+        # Metadata is readable from the instance and allows you to
+        # pass configuration from deployment scripts to instances.
+        'metadata': {
+            'items': [{
+                # Startup script is automatically executed by the
+                # instance upon startup.
+                'key': 'startup-script',
+                'value': startup_script
+            }, {
+                'key': 'url',
+                'value': image_url
+            }, {
+                'key': 'text',
+                'value': image_caption
+            }, {
+                'key': 'bucket',
+                'value': bucket
+            }]
+        }
+    }
+
+    return compute.instances().insert(
+        project=project,
+        zone=zone,
+        body=config).execute()
+# [END compute_apiary_create_instance]
+
+
+# [START compute_apiary_delete_instance]
+def delete_instance(compute, project, zone, name):
+    return compute.instances().delete(
+        project=project,
+        zone=zone,
+        instance=name).execute()
+# [END compute_apiary_delete_instance]
+
+
+# [START compute_apiary_wait_for_operation]
+def wait_for_operation(compute, project, zone, operation):
+    print('Waiting for operation to finish...')
+    while True:
+        result = compute.zoneOperations().get(
+            project=project,
+            zone=zone,
+            operation=operation).execute()
+
+        if result['status'] == 'DONE':
+            print("done.")
+            if 'error' in result:
+                raise Exception(result['error'])
+            return result
+
+        time.sleep(1)
+# [END compute_apiary_wait_for_operation]
+
+
+# [START compute_apiary_run]
+def main(project, bucket, zone, instance_name, wait=True):
+    compute = googleapiclient.discovery.build('compute', 'v1')
+
+    print('Creating instance.')
+
+    operation = create_instance(compute, project, zone, instance_name, bucket)
+    wait_for_operation(compute, project, zone, operation['name'])
+
+    instances = list_instances(compute, project, zone)
+
+    print('Instances in project %s and zone %s:' % (project, zone))
+    for instance in instances:
+        print(' - ' + instance['name'])
+
+    print("""
+Instance created.
+It will take a minute or two for the instance to complete work.
+Check this URL: http://storage.googleapis.com/{}/output.png
+Once the image is uploaded press enter to delete the instance.
+""".format(bucket))
+
+    if wait:
+        input()
+
+    print('Deleting instance.')
+
+    operation = delete_instance(compute, project, zone, instance_name)
+    wait_for_operation(compute, project, zone, operation['name'])
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(
+        description=__doc__,
+        formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument('project_id', help='Your Google Cloud project ID.')
+    parser.add_argument(
+        'bucket_name', help='Your Google Cloud Storage bucket name.')
+    parser.add_argument(
+        '--zone',
+        default='us-central1-f',
+        help='Compute Engine zone to deploy to.')
+    parser.add_argument(
+        '--name', default='demo-instance', help='New instance name.')
+
+    args = parser.parse_args()
+
+    main(args.project_id, args.bucket_name, args.zone, args.name)
+# [END compute_apiary_run]