Merge pull request #3 from NOPping/gce_ga_support

Finish basic ga support addition, close #2
diff --git a/.gitignore b/.gitignore
index 66a0c02..5a2be01 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-gstack/data/app.db
+*.db
 
 *.py[cod]
 *~
diff --git a/README.md b/README.md
deleted file mode 100644
index 3df17ff..0000000
--- a/README.md
+++ /dev/null
@@ -1,308 +0,0 @@
-# Google Compute Engine Interface For Cloudstack
-
-[![PyPi package](https://badge.fury.io/py/gstack.svg)](https://pypi.python.org/pypi/gstack)
-[![Build Status](https://api.travis-ci.org/NOPping/gstack.svg?branch=master)](https://travis-ci.org/NOPping/gstack)
-
-## Proposal
-
-This project aims to provide a new compute API interface for Apache Cloudstack that is compatible with Google Compute Engine [GCE](https://cloud.google.com/products/compute-engine). GCE is Google's Infrastructure-as-a-Service (IaaS) compute service that competes with Amazon Web Services EC2. In short, this is a mapping of the GCE API [reference](https://developers.google.com/compute/docs/reference/latest/) and the CloudStack [API](http://cloudstack.apache.org/docs/api/index.html)
-
-## Implementation
-
-The GCE APIs for Cloudstack is supplied as a layer over the current Cloudstack API. The given application will take in a GCE based API request, pass it over to the Cloudstack API, get the required data and return it in a suitable format.
-
-It is written in Python, using [Flask](http://flask.pocoo.org/) to expose a GCE compliant REST API. Requests, Pycrypto, Pyopenssl and Flask-sqlachemy are dependencies. A custom version of pyoauth2 is included in the source.
-
-In this first early release, the following GCE categories are implemented:
-
- - Disks
-    - listdisks
-    - getdisk
- - Firewalls
-    - addfirewall
-    - deletefirewall
-    - listfirewalls
-    - getfirewall
- - Images
-    - listimages
-    - getimage
- - Instances
-    - addinstance
-    - deleteinstance
-    - listinstances
-    - getinstance
- - Machinetypes
-    - listmachinetypes
-    - getmachinetype
- - Project
-    - getproject
- - Zones
-    - listzones
-    - getzone
-
-
-Caveat: There exists some semantic differences between the two APIs, for example between the concept of zones and regions, projects and domains. This project does a best effort attempt at creating a usable GCE interface to a CloudStack cloud but it may not fit every CloudStack deployment.
-
-##Installation
-
-#Developers
-
-Clone the repository
-
-```bash
-git clone https://github.com/NOPping/gstack.git
-```
-
-Install the package
-```bash
-python ./setup.py install
-```
-
-This will install a `gstack` and a `gstack-configure` binary in your path. 
-
-Before running `gstack` you must configure it. To do so run
-
-```bash
-gstack-configure
-```
-
-And enter your configuration information as prompted. 
-
-Install [gcutil](https://developers.google.com/compute/docs/gcutil/)
-
-gstack comes with a self-signed certificate for the local endpoint `gstack/data/server.crt`, copy the certificate to the gcutil certificates file `gcutil/lib/httplib2/httplib2/cacerts.txt`
-
-At this stage your CloudStack apikey and secretkey need to be entered in the gcutil auth_helper.py file at `gcutil/lib/google_compute_engine/gcutil/auth_helper.py`
-
-This is far from ideal and we opened a feature request with google to pass the `client_id` and `client_secret` as options to gcutil, hopefully future release of gcutil will allow us to do so.
-
-Start gstack:
-
-```bash
-gstack
-```
-
-Create a cached parameters file for gcutil:
-
-- Modify ~/.gcutil_params
-- Insert something like the following:
-
-```
---auth_local_webserver
---auth_host_port=9999
---dump_request_response
---authorization_uri_base=https://localhost:5000/oauth2
---ssh_user=root
---fetch_discovery
---auth_host_name=127.0.0.1
---api_host=https://localhost:5000/
-```
-gcutil will issues requests to the local Flask application, get an OAuth token and then issue requests to your CloudStack endpoint
-
-#Users
-
-You can grab the package from Pypi
-
-```bash
-pip install gstack
-```
-
-Then follow the same instructions as the Developers.
-
-
-##Usage
-
-You can start issuing standard gcutil commands. For illustration purposes we use [Exoscale](http://exoscale.ch)
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie listzones
-+--------+-------------+--------+-------------+-------------------------+-----------------+------------+-------------+----------------------+
-|  name  | description | status | deprecation | next-maintenance-window | instances-usage | cpus-usage | disks-usage | disks-total-gb-usage |
-+--------+-------------+--------+-------------+-------------------------+-----------------+------------+-------------+----------------------+
-| CH-GV2 | CH-GV2      | UP     |             | None scheduled          |                 |            |             |                      |
-+--------+-------------+--------+-------------+-------------------------+-----------------+------------+-------------+----------------------+
-```
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie listmachinetypes
-
-
-Items in zone/CH-GV2:
-
-+-------------+--------------------------+--------+------+-----------+----------------------+---------+----------------------+-------------+
-|    name     |       description        |  zone  | cpus | memory-mb | scratch-disk-size-gb | max-pds | max-total-pd-size-gb | deprecation |
-+-------------+--------------------------+--------+------+-----------+----------------------+---------+----------------------+-------------+
-| Micro       | Micro 512mb 1cpu         | CH-GV2 | 1    | 512       |                      |         |                      |             |
-| Tiny        | Tiny 1024mb 1cpu         | CH-GV2 | 1    | 1024      |                      |         |                      |             |
-| Small       | Small 2048mb 2cpu        | CH-GV2 | 2    | 2048      |                      |         |                      |             |
-| Medium      | Medium 4096mb 2cpu       | CH-GV2 | 2    | 4096      |                      |         |                      |             |
-| Large       | Large 8192mb 4cpu        | CH-GV2 | 4    | 8182      |                      |         |                      |             |
-| Extra-large | Extra-large 16384mb 4cpu | CH-GV2 | 4    | 16384     |                      |         |                      |             |
-| Huge        | Huge 32184mb 8cpu        | CH-GV2 | 8    | 32184     |                      |         |                      |             |
-+-------------+--------------------------+--------+------+-----------+----------------------+---------+----------------------+-------------+
-```
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie listimages
-+---------------------------------+------------------------------------------+--------+-------------+--------+
-|              name               |               description                | kernel | deprecation | status |
-+---------------------------------+------------------------------------------+--------+-------------+--------+
-| CentOS 5.5(64-bit) no GUI (KVM) | CentOS 5.5(64-bit) no GUI (KVM)          |        |             | Ready  |
-| Linux CentOS 6.4 64-bit         | Linux CentOS 6.4 64-bit 10GB Disk        |        |             | Ready  |
-| Linux CentOS 6.4 64-bit         | Linux CentOS 6.4 64-bit 50GB Disk        |        |             | Ready  |
-| Linux CentOS 6.4 64-bit         | Linux CentOS 6.4 64-bit 100GB Disk       |        |             | Ready  |
-| Linux CentOS 6.4 64-bit         | Linux CentOS 6.4 64-bit 200GB Disk       |        |             | Ready  |
-| Linux CentOS 6.4 64-bit         | Linux CentOS 6.4 64-bit 400GB Disk       |        |             | Ready  |
-| Linux Ubuntu 12.04 LTS 64-bit   | Linux Ubuntu 12.04 LTS 64-bit 10GB Disk  |        |             | Ready  |
-| Linux Ubuntu 12.04 LTS 64-bit   | Linux Ubuntu 12.04 LTS 64-bit 50GB Disk  |        |             | Ready  |
-| Linux Ubuntu 12.04 LTS 64-bit   | Linux Ubuntu 12.04 LTS 64-bit 100GB Disk |        |             | Ready  |
-| Linux Ubuntu 12.04 LTS 64-bit   | Linux Ubuntu 12.04 LTS 64-bit 200GB Disk |        |             | Ready  |
-| Linux Ubuntu 12.04 LTS 64-bit   | Linux Ubuntu 12.04 LTS 64-bit 400GB Disk |        |             | Ready  |
-| Linux Ubuntu 13.04 64-bit       | Linux Ubuntu 13.04 64-bit 10 GB Disk     |        |             | Ready  |
-| Linux Ubuntu 13.04 64-bit       | Linux Ubuntu 13.04 64-bit 50 GB Disk     |        |             | Ready  |
-| Linux Ubuntu 13.04 64-bit       | Linux Ubuntu 13.04 64-bit 100 GB Disk    |        |             | Ready  |
-| Linux Ubuntu 13.04 64-bit       | Linux Ubuntu 13.04 64-bit 200 GB Disk    |        |             | Ready  |
-| Linux Ubuntu 13.04 64-bit       | Linux Ubuntu 13.04 64-bit 400 GB Disk    |        |             | Ready  |
-| Windows Server 2008 R2 SP1      | 50                                       |        |             | Ready  |
-| Windows Server 2008 R2 SP1      | Windows Server 2008 R2 SP1 100GB Disk    |        |             | Ready  |
-| Windows Server 2008 R2 SP1      | Windows Server 2008 R2 SP1 200GB Disk    |        |             | Ready  |
-| Windows Server 2008 R2 SP1      | Windows Server 2008 R2 SP1 400GB Disk    |        |             | Ready  |
-| Windows Server 2012             | Windows Server 2012 Disk 50GB            |        |             | Ready  |
-| Windows Server 2012             | Windows Server 2012 Disk 200GB           |        |             | Ready  |
-| Windows Server 2012             | Windows Server 2012 Disk 100GB           |        |             | Ready  |
-| Windows Server 2012             | Windows Server 2012 Disk 400GB           |        |             | Ready  |
-+---------------------------------+------------------------------------------+--------+-------------+--------+
-```
-
-To create a securitygroup, use the firewall commands:
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie addfirewall ssh --allowed=tcp:22
-```
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie getfirewall ssh
-+---------------+-----------+
-|   property    |   value   |
-+---------------+-----------+
-| name          | ssh       |
-| description   |           |
-| creation-time |           |
-| network       |           |
-| source-ips    | 0.0.0.0/0 |
-| source-tags   |           |
-| target-tags   |           |
-| allowed       | tcp: 22   |
-+---------------+-----------+
-```
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie deletefirewall ssh
-Delete firewall ssh? [y/n]
-y
-```
-
-To start an instance note that you need to pass your account name as project. Also note that persistent disks are not supported yet.
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie addinstance foobar
-Selecting the only available zone: CH-GV2
-1: Extra-large  Extra-large 16384mb 4cpu
-2: Huge Huge 32184mb 8cpu
-3: Large    Large 8192mb 4cpu
-4: Medium   Medium 4096mb 2cpu
-5: Micro    Micro 512mb 1cpu
-6: Small    Small 2048mb 2cpu
-7: Tiny Tiny 1024mb 1cpu
-5
-The boot disk is unspecified.  I can create a new persistent boot disk and use it (preferred), or use a scratch disk (not recommended).  Do you want to use a persistent boot disk? [y/n]
-n
-1: CentOS 5.5(64-bit) no GUI (KVM)
-2: Linux CentOS 6.4 64-bit
-3: Linux CentOS 6.4 64-bit
-4: Linux CentOS 6.4 64-bit
-5: Linux CentOS 6.4 64-bit
-6: Linux CentOS 6.4 64-bit
-7: Linux Ubuntu 12.04 LTS 64-bit
-8: Linux Ubuntu 12.04 LTS 64-bit
-9: Linux Ubuntu 12.04 LTS 64-bit
-10: Linux Ubuntu 12.04 LTS 64-bit
-11: Linux Ubuntu 12.04 LTS 64-bit
-12: Linux Ubuntu 13.04 64-bit
-13: Linux Ubuntu 13.04 64-bit
-14: Linux Ubuntu 13.04 64-bit
-15: Linux Ubuntu 13.04 64-bit
-16: Linux Ubuntu 13.04 64-bit
-17: Windows Server 2008 R2 SP1
-18: Windows Server 2008 R2 SP1
-19: Windows Server 2008 R2 SP1
-20: Windows Server 2008 R2 SP1
-21: Windows Server 2012
-22: Windows Server 2012
-23: Windows Server 2012
-24: Windows Server 2012
-5
-INFO: Waiting for insert of instance . Sleeping for 3s.
-INFO: Waiting for insert of instance . Sleeping for 3s.
-INFO: Waiting for insert of instance . Sleeping for 3s.
-INFO: Waiting for insert of instance . Sleeping for 3s.
-INFO: Waiting for insert of instance . Sleeping for 3s.
-
-Table of resources:
-
-+--------+--------------+-------------------------+--------+---------+---------------+---------------+-------+--------+---------+----------------+
-|  name  | machine-type |          image          | kernel | network |  network-ip   |  external-ip  | disks |  zone  | status  | status-message |
-+--------+--------------+-------------------------+--------+---------+---------------+---------------+-------+--------+---------+----------------+
-| foobar | Micro        | Linux CentOS 6.4 64-bit |        | default | 185.19.28.146 | 185.19.28.146 |       | CH-GV2 | RUNNING |                |
-+--------+--------------+-------------------------+--------+---------+---------------+---------------+-------+--------+---------+----------------+
-
-Table of operations:
-
-+--------------------------------------+--------+--------+--------+----------------+--------+--------------------------+----------------+-------+---------------+---------+
-|                 name                 | region |  zone  | status | status-message | target |       insert-time        | operation-type | error | error-message | warning |
-+--------------------------------------+--------+--------+--------+----------------+--------+--------------------------+----------------+-------+---------------+---------+
-| 1274e34e-62a8-4655-b3ea-f406f3bdaa67 |        | CH-GV2 | DONE   |                | foobar | 2013-10-13T21:41:27+0200 | insert         |       |               |         |
-+--------------------------------------+--------+--------+--------+----------------+--------+--------------------------+----------------+-------+---------------+---------+
-```
-
-You can of course list and delete instances
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie listinstances
-
-
-Items in zone/CH-GV2:
-
-+--------+--------------+-------------------------+--------+---------+---------------+---------------+-------+--------+---------+----------------+
-|  name  | machine-type |          image          | kernel | network |  network-ip   |  external-ip  | disks |  zone  | status  | status-message |
-+--------+--------------+-------------------------+--------+---------+---------------+---------------+-------+--------+---------+----------------+
-| foobar | Micro        | Linux CentOS 6.4 64-bit |        | default | 185.19.28.146 | 185.19.28.146 |       | CH-GV2 | RUNNING |                |
-+--------+--------------+-------------------------+--------+---------+---------------+---------------+-------+--------+---------+----------------+
-```
-
-```bash
-$ ./gcutil --cached_flags_file=~/.gcutil_params --project=ian@ianduffy.ie deleteinstance foobar
-Delete instance foobar? [y/n]
-y
-WARNING: Consider passing '--zone=CH-GV2' to avoid the unnecessary zone lookup which requires extra API calls.
-INFO: Waiting for delete of instance . Sleeping for 3s.
-INFO: Waiting for delete of instance . Sleeping for 3s.
-INFO: Waiting for delete of instance . Sleeping for 3s.
-+--------------------------------------+--------+--------+--------+----------------+-------------------------+--------------------------+----------------+-------+---------------+---------+
-|                 name                 | region |  zone  | status | status-message |         target          |       insert-time        | operation-type | error | error-message | warning |
-+--------------------------------------+--------+--------+--------+----------------+-------------------------+--------------------------+----------------+-------+---------------+---------+
-| 05be1cbb-99be-4656-b74c-87bcafc659ae |        | CH-GV2 | DONE   |                | CH-GV2/instances/foobar | 2013-10-13T21:42:57+0200 | delete         |       |               |         |
-+--------------------------------------+--------+--------+--------+----------------+-------------------------+--------------------------+----------------+-------+---------------+---------+
-```
-
-##Trouble shooting
-
-If you encounter authentication/authorization issues, clean up your gcutil authentication information `rm -rf ~/.gcutil_auth`, make sure that you set your `client_id` and `client_secret` in `gcutil/lib/google_compute_engine/gcutil/auth_helper.py`
-
-##Apache CloudStack
-
-For more information about CloudStack check the official [website](http://cloudstack.apache.org)
-
-Copyright © 2013 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
-"Apache", "CloudStack", "Apache CloudStack", and the Apache feather logos are registered trademarks or trademarks of The Apache Software Foundation.
-g
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..e3481ff
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,147 @@
+========
+GSTACK
+========
+
+A Google Compute Engine Interface For Cloudstack
+################################################
+
+.. image:: https://badge.fury.io/py/gstack.png
+.. image:: https://api.travis-ci.org/NOPping/gstack.png
+
+Proposal
+_________
+
+This project aims to provide a new compute API interface for Apache Cloudstack that is compatible with Google Compute Engine `GCE <https://cloud.google.com/products/compute-engine>`_  GCE is Google's Infrastructure-as-a-Service (IaaS) compute service that competes with Amazon Web Services EC2. In short, this is a mapping of the GCE `API <https://developers.google.com/compute/docs/reference/latest/>`_ and the CloudStack `API <http://cloudstack.apache.org/docs/api/index.html>`_
+
+Implementation
+______________
+
+The GCE APIs for Cloudstack is supplied as a layer over the current Cloudstack API. The given application will take in a GCE based API request, pass it over to the Cloudstack API, get the required data and return it in a suitable format.
+
+It is written in Python, using `Flask <http://flask.pocoo.org/>`_ to expose a GCE compliant REST API. Requests, Pycrypto, Pyopenssl and Flask-sqlachemy are dependencies. A custom version of pyoauth2 is included in the source.
+
+- Disks
+   - listdisks
+   - getdisk
+- Firewalls
+   - addfirewall
+   - deletefirewall
+   - listfirewalls
+   - getfirewall
+- Images
+   - listimages
+   - getimage
+- Instances
+   - addinstance
+   - deleteinstance
+   - listinstances
+   - getinstance
+- Machinetypes
+   - listmachinetypes
+   - getmachinetype
+- Project
+   - getproject
+- Zones
+   - listzones
+   - getzone
+
+
+Installation
+#############
+
+Developers
+___________
+
+Clone the repository
+
+  git clone https://github.com/NOPping/gstack.git
+
+Install the package
+
+    python ./setup.py install
+
+Users
+_____
+
+Users can grab the package from Pypi
+
+    pip install gstack
+
+Configuration
+#############
+
+Before running `gstack` you must configure it. To do so run
+
+    gstack-configure
+
+
+And enter your configuration information as prompted. 
+
+Install the stand alone `gcutil <https://developers.google.com/compute/docs/gcutil/#gcutilupgrade/>`_
+
+gstack comes with a self-signed certificate for the local endpoint ``gstack/data/server.crt``, copy the certificate to the gcutil certificates file ``gcutil/lib/httplib2/httplib2/cacerts.txt``
+
+At this stage your CloudStack apikey and secretkey need to be entered in the gcutil auth_helper.py file at ``gcutil/lib/google_compute_engine/gcutil/auth_helper.py``
+
+This is far from ideal and we opened a feature request with google to pass the ``client_id`` and ``client_secret`` as options to gcutil, hopefully future release of gcutil will allow us to do so.
+
+Start gstack:
+
+    gstack
+
+
+Create a cached parameters file for gcutil:
+
+- Make a flagile, something like ``~/.gcutil_params``
+- Insert required flags to ease usage. Something like:
+
+
+    `--auth_local_webserver`
+    
+    `--auth_host_port=9999`
+    
+    `--dump_request_response`
+    
+    `--authorization_uri_base=https://localhost:5000/oauth2`
+    
+    `--ssh_user=root`
+    
+    `--fetch_discovery`
+    
+    `--auth_host_name=localhost`
+    
+    `--api_host=https://localhost:5000/`
+    
+    `--nocheck_for_new_version`
+    
+
+gcutil will issue auth requests to the local Flask application, get an OAuth token and then issue requests to the CloudStack endpoint you specified when cofiguring gstack. 
+
+Usage
+######
+
+You can start issuing standard gcutil commands.
+
+    $ ./gcutil --flag_file=~/.gcutil_params --project=brogand93@darrenbrogan.ie listzones
+
+
+==================   ========  ====================
+name                  status   next-maintenance 
+==================   ========  ====================
+Sandbox-simulator     UP       None scheduled   
+==================   ========  ====================
+
+
+Trouble shooting
+#################
+
+If you encounter authentication/authorization issues, clean up your gcutil authentication information ``rm -rf ~/.gcutil_auth``, make sure that you set your ``client_id`` and ``client_secret`` in ``gcutil/lib/google_compute_engine/gcutil/auth_helper.py``
+
+Apache CloudStack
+##################
+
+For more information about CloudStack check the official `<website http://cloudstack.apache.org>`_
+
+Copyright © 2013 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
+"Apache", "CloudStack", "Apache CloudStack", and the Apache feather logos are registered trademarks or trademarks of The Apache Software Foundation.
+g
diff --git a/gstack/configure.py b/gstack/configure.py
index 88cbd5e..436dbd0 100644
--- a/gstack/configure.py
+++ b/gstack/configure.py
@@ -36,7 +36,7 @@
 def _create_config_file(config_folder):
     config_file = open(config_folder + '/gstack.conf', 'w+')
 
-    config_file.write('PATH = \'%s\'\n' % 'compute/v1beta15/projects/')
+    config_file.write('PATH = \'%s\'\n' % 'compute/v1/projects/')
 
     gstack_address = raw_input('gstack bind address [0.0.0.0]: ')
     if gstack_address == '':
diff --git a/gstack/controllers/disks.py b/gstack/controllers/disks.py
index 056dc13..a7bcdbd 100644
--- a/gstack/controllers/disks.py
+++ b/gstack/controllers/disks.py
@@ -81,18 +81,37 @@
     return response
 
 
-@app.route(
-    '/' + app.config['PATH'] + '<projectid>/aggregated/disks', methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/aggregated/disks', methods=['GET'])
 @authentication.required
 def aggregatedlistdisks(projectid, authorization):
     disk_list = _get_disks(authorization=authorization)
     zone_list = zones.get_zone_names(authorization=authorization)
 
+    disk = None
+    filter = helper.get_filter(request.args)
+
+    if 'name' in filter:
+        disk = filter['name']
+
     items = {}
 
     for zone in zone_list:
         zone_disks = []
-        if disk_list['listvolumesresponse']:
+        if disk:
+            disk = get_disk_by_name(
+                authorization=authorization,
+                disk=disk
+            )
+            if disk:
+                zone_disks.append(
+                    _cloudstack_volume_to_gce(
+                        cloudstack_response=disk,
+                        projectid=projectid,
+                        zone=zone,
+                    )
+                )
+
+        elif disk_list['listvolumesresponse']:
             for disk in disk_list['listvolumesresponse']['volume']:
                 zone_disks.append(
                     _cloudstack_volume_to_gce(
@@ -102,7 +121,6 @@
                     )
                 )
         items['zone/' + zone] = {}
-        items['zone/' + zone]['zone'] = zone
         items['zone/' + zone]['disks'] = zone_disks
 
     populated_response = {
@@ -115,8 +133,7 @@
     return helper.create_response(data=populated_response)
 
 
-@app.route('/' + app.config['PATH'] +
-           '<projectid>/zones/<zone>/disks', methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/zones/<zone>/disks', methods=['GET'])
 @authentication.required
 def listdisks(projectid, authorization, zone):
     disk = None
@@ -167,11 +184,7 @@
     return helper.create_response(data=populated_response)
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/zones/<zone>/disks/<disk>',
-    methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/zones/<zone>/disks/<disk>', methods=['GET'])
 @authentication.required
 def getdisk(projectid, authorization, zone, disk):
     response = get_disk_by_name(
diff --git a/gstack/controllers/helper.py b/gstack/controllers/helper.py
index 69a2629..05830ce 100644
--- a/gstack/controllers/helper.py
+++ b/gstack/controllers/helper.py
@@ -48,4 +48,4 @@
 
 def get_root_url():
     return 'https://' + \
-        app.config['LISTEN_ADDRESS'] + ':' + app.config['LISTEN_PORT']
+        app.config['GSTACK_BIND_ADDRESS'] + ':' + app.config['GSTACK_PORT']
diff --git a/gstack/controllers/index.py b/gstack/controllers/index.py
index b6728c3..6d76357 100755
--- a/gstack/controllers/index.py
+++ b/gstack/controllers/index.py
@@ -23,9 +23,9 @@
 import json
 
 
-@app.route('/discovery/v1/apis/compute/v1beta15/rest', methods=['GET'])
+@app.route('/discovery/v1/apis/compute/v1/rest', methods=['GET'])
 def discovery():
-    with open(app.config['DATA'] + '/v1beta15.json') as template:
+    with open(app.config['DATA'] + '/v1.json') as template:
         discovery_template = json.loads(template.read())
 
     discovery_template[
diff --git a/gstack/controllers/instances.py b/gstack/controllers/instances.py
index b56cf70..ece69a7 100755
--- a/gstack/controllers/instances.py
+++ b/gstack/controllers/instances.py
@@ -118,10 +118,11 @@
     response['disks'] = []
 
     networking = {}
-    networking['network'] = cloudstack_response['securitygroup'][0]['name']
-    networking['networkIP'] = cloudstack_response['nic'][0]['ipaddress']
-    networking['name'] = cloudstack_response['nic'][0]['id']
-    networking['accessConfigs'] = []
+    if cloudstack_response['securitygroup']:
+        networking['network'] = cloudstack_response['securitygroup'][0]['name']
+        networking['networkIP'] = cloudstack_response['nic'][0]['ipaddress']
+        networking['name'] = cloudstack_response['nic'][0]['id']
+        networking['accessConfigs'] = []
 
     accessconfig = {}
     accessconfig['kind'] = 'compute#accessConfig'
@@ -129,7 +130,7 @@
     accessconfig['name'] = 'External NAT'
     accessconfig['natIP'] = cloudstack_response['nic'][0]['ipaddress']
 
-    networking['accessConfigs'].append(accessconfig)
+    networking['accessConfigs'] = accessconfig
 
     response['networkInterfaces'].append(networking)
 
@@ -163,23 +164,39 @@
         return None
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/aggregated/instances',
-    methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/aggregated/instances', methods=['GET'])
 @authentication.required
 def aggregatedlistinstances(authorization, projectid):
     zone_list = zones.get_zone_names(authorization=authorization)
     virtual_machine_list = _get_virtual_machines(authorization=authorization)
 
+    instance = None
+    filter = helper.get_filter(request.args)
+
+    if 'name' in filter:
+        instance = filter['name']
+
     items = {}
 
     for zone in zone_list:
-        zones_instances = []
-        if virtual_machine_list['listvirtualmachinesresponse']:
+        zone_instances = []
+        if instance:
+            virtual_machine = _get_virtual_machine_by_name(
+                authorization=authorization,
+                instance=instance
+            )
+            if virtual_machine:
+                zone_instances.append(
+                    _cloudstack_virtual_machine_to_gce(
+                        cloudstack_response=virtual_machine,
+                        projectid=projectid,
+                        zone=zone
+                    )
+                )
+
+        elif virtual_machine_list['listvirtualmachinesresponse']:
             for instance in virtual_machine_list['listvirtualmachinesresponse']['virtualmachine']:
-                zones_instances.append(
+                zone_instances.append(
                     _cloudstack_virtual_machine_to_gce(
                         cloudstack_response=instance,
                         projectid=projectid,
@@ -187,8 +204,7 @@
                     )
                 )
         items['zone/' + zone] = {}
-        items['zone/' + zone]['zone'] = zone
-        items['zone/' + zone]['instances'] = zones_instances
+        items['zone/' + zone]['instances'] = zone_instances
 
     populated_response = {
         'kind': 'compute#instanceAggregatedList',
@@ -199,11 +215,7 @@
     return helper.create_response(data=populated_response)
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/zones/<zone>/instances',
-    methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/zones/<zone>/instances', methods=['GET'])
 @authentication.required
 def listinstances(authorization, projectid, zone):
     instance = None
@@ -250,11 +262,7 @@
     return helper.create_response(data=populated_response)
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/zones/<zone>/instances/<instance>',
-    methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/zones/<zone>/instances/<instance>', methods=['GET'])
 @authentication.required
 def getinstance(projectid, authorization, zone, instance):
     response = _get_virtual_machine_by_name(
@@ -278,18 +286,15 @@
         return errors.resource_not_found(function_route)
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/zones/<zone>/instances',
-    methods=['POST'])
+@app.route('/' + app.config['PATH'] + '<projectid>/zones/<zone>/instances', methods=['POST'])
 @authentication.required
 def addinstance(authorization, projectid, zone):
     data = json.loads(request.data)
+    print data
     args = {}
     args['name'] = data['name']
     args['serviceoffering'] = data['machineType'].rsplit('/', 1)[1]
-    args['template'] = data['image'].rsplit('/', 1)[1]
+    args['template'] = data['disks'][0]['initializeParams']['sourceImage'].rsplit('/', 1)[1]
     args['zone'] = zone
 
     network = data['networkInterfaces'][0]['network'].rsplit('/', 1)[1]
@@ -324,11 +329,7 @@
     return helper.create_response(data=populated_response)
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/zones/<zone>/instances/<instance>',
-    methods=['DELETE'])
+@app.route('/' + app.config['PATH'] + '<projectid>/zones/<zone>/instances/<instance>', methods=['DELETE'])
 @authentication.required
 def deleteinstance(projectid, authorization, zone, instance):
     deletion_result = _destroy_virtual_machine(authorization, instance)
diff --git a/gstack/controllers/operations.py b/gstack/controllers/operations.py
index 50d0ab9..822372a 100644
--- a/gstack/controllers/operations.py
+++ b/gstack/controllers/operations.py
@@ -39,11 +39,9 @@
 def _delete_instance_response(async_result, projectid):
     populated_response = {
         'kind': 'compute#operation',
-        'id': async_result['jobid'],
-        'name': async_result['jobid'],
-        'operationType': 'delete',
-        'user': async_result['userid'],
         'insertTime': async_result['created'],
+        'operationType': 'delete',
+        'name': async_result['jobid'],
         'startTime': async_result['created'],
         'selfLink': urllib.unquote_plus(helper.get_root_url() + url_for(
             'getoperations',
@@ -88,11 +86,7 @@
     for datasegment in split_publickey:
         print datasegment
         _add_sshkey_metadata_segment(
-            authorization,
-            str(i) +
-            '-sshkey-segment',
-            datasegment,
-            instanceid)
+            authorization, str(i) + '-sshkey-segment', datasegment, instanceid)
         i = i + 1
 
 
@@ -117,8 +111,8 @@
     populated_response = {
         'kind': 'compute#operation',
         'id': async_result['jobid'],
-        'name': async_result['jobid'],
         'operationType': 'insert',
+        'name': async_result['jobid'],
         'user': async_result['userid'],
         'insertTime': async_result['created'],
         'startTime': async_result['created'],
@@ -137,6 +131,7 @@
     elif async_result['jobstatus'] is 1:
         # handle successful case
         populated_response['status'] = 'DONE'
+        populated_response['id'] = async_result['jobid']
         populated_response['zone'] = urllib.unquote_plus(
             helper.get_root_url() +
             url_for(
@@ -157,8 +152,6 @@
             instanceid=async_result['jobresult']['virtualmachine']['id']
         )
 
-    # need to add a case here for error handling, its job status 2
-
     return populated_response
 
 
@@ -190,11 +183,7 @@
     return populated_response
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/global/operations/<operationid>',
-    methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/global/operations/<operationid>', methods=['GET'])
 @authentication.required
 def getoperations(authorization, operationid, projectid):
     return helper.create_response(create_response(
diff --git a/gstack/controllers/project.py b/gstack/controllers/project.py
index eec1e20..042e0ec 100755
--- a/gstack/controllers/project.py
+++ b/gstack/controllers/project.py
@@ -164,6 +164,7 @@
     if project:
         metadata = {}
         metadata['sshKeys'] = _list_ssh_keys(authorization)
+        publickey_storage[projectid] = metadata['sshKeys']
 
         res = jsonify(_cloudstack_project_to_gce(project, metadata))
         res.status_code = 200
@@ -177,11 +178,7 @@
     return res
 
 
-@app.route(
-    '/' +
-    app.config['PATH'] +
-    '<projectid>/setCommonInstanceMetadata',
-    methods=['POST'])
+@app.route('/' + app.config['PATH'] + '<projectid>/setCommonInstanceMetadata', methods=['POST'])
 @authentication.required
 def setglobalmetadata(projectid, authorization):
     data = json.loads(request.data)
diff --git a/gstack/controllers/zones.py b/gstack/controllers/zones.py
index dc86c60..64f1b8d 100755
--- a/gstack/controllers/zones.py
+++ b/gstack/controllers/zones.py
@@ -100,8 +100,7 @@
     return helper.create_response(data=populated_response)
 
 
-@app.route(
-    '/' + app.config['PATH'] + '<projectid>/zones/<zone>', methods=['GET'])
+@app.route('/' + app.config['PATH'] + '<projectid>/zones/<zone>', methods=['GET'])
 @authentication.required
 def getzone(projectid, authorization, zone):
     response = get_zone_by_name(
@@ -111,7 +110,7 @@
 
     if response:
         return helper.create_response(
-            data=_cloudstack_zone_to_gce(zone)
+            data=_cloudstack_zone_to_gce(response)
         )
     else:
         func_route = url_for('getzone', projectid=projectid, zone=zone)
diff --git a/gstack/data/app.db b/gstack/data/app.db
deleted file mode 100644
index 5d29940..0000000
--- a/gstack/data/app.db
+++ /dev/null
Binary files differ
diff --git a/gstack/data/config.cfg b/gstack/data/config.cfg
deleted file mode 100644
index be54115..0000000
--- a/gstack/data/config.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-LISTEN_ADDRESS='localhost'
-LISTEN_PORT='5000'
-PATH='compute/v1beta15/projects/'
-
-CLOUDSTACK_PATH='/compute'
-CLOUDSTACK_HOST='api.exoscale.ch'
-CLOUDSTACK_PORT='443'
-CLOUDSTACK_PROTOCOL='https'
-
-DEBUG=True
diff --git a/gstack/data/v1beta15.json b/gstack/data/v1.json
similarity index 87%
rename from gstack/data/v1beta15.json
rename to gstack/data/v1.json
index c01755b..4e3afa7 100644
--- a/gstack/data/v1beta15.json
+++ b/gstack/data/v1.json
@@ -1,10 +1,10 @@
 {
  "kind": "discovery#restDescription",
  "discoveryVersion": "v1",
- "id": "compute:v1beta15",
+ "id": "compute:v1",
  "name": "compute",
- "version": "v1beta15",
- "revision": "20130906",
+ "version": "v1",
+ "revision": "20131120",
  "title": "Compute Engine API",
  "description": "API for the Google Compute Engine service.",
  "ownerDomain": "google.com",
@@ -13,12 +13,12 @@
   "x16": "http://www.google.com/images/icons/product/compute_engine-16.png",
   "x32": "http://www.google.com/images/icons/product/compute_engine-32.png"
  },
- "documentationLink": "https://developers.google.com/compute/docs/reference/v1beta15",
+ "documentationLink": "https://developers.google.com/compute/docs/reference/v1",
  "protocol": "rest",
- "baseUrl": "https://www.googleapis.com/compute/v1beta15/projects/",
- "basePath": "/compute/v1beta15/projects/",
- "rootUrl": "https://www.googleapis.com/",
- "servicePath": "compute/v1beta15/projects/",
+ "baseUrl": "{HOST_URL}/compute/v1/projects/",
+ "basePath": "/compute/v1/projects/",
+ "rootUrl": "{HOST_URL}/",
+ "servicePath": "compute/v1/projects/",
  "batchPath": "batch",
  "parameters": {
   "alt": {
@@ -108,7 +108,13 @@
     "type": {
      "type": "string",
      "description": "Type of configuration. Must be set to \"ONE_TO_ONE_NAT\". This configures port-for-port NAT to the internet.",
-     "default": "ONE_TO_ONE_NAT"
+     "default": "ONE_TO_ONE_NAT",
+     "enum": [
+      "ONE_TO_ONE_NAT"
+     ],
+     "enumDescriptions": [
+      ""
+     ]
     }
    }
   },
@@ -159,11 +165,22 @@
     },
     "status": {
      "type": "string",
-     "description": "The status of the address (output only)."
+     "description": "The status of the address (output only).",
+     "enum": [
+      "IN_USE",
+      "RESERVED"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     },
-    "user": {
-     "type": "string",
-     "description": "URL of the resource currently using this address (output only)."
+    "users": {
+     "type": "array",
+     "description": "The resources that are using this address resource.",
+     "items": {
+      "type": "string"
+     }
     }
    }
   },
@@ -246,7 +263,31 @@
      "properties": {
       "code": {
        "type": "string",
-       "description": "The warning type identifier for this warning."
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
       },
       "data": {
        "type": "array",
@@ -298,7 +339,15 @@
     },
     "mode": {
      "type": "string",
-     "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\"."
+     "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\".",
+     "enum": [
+      "READ_ONLY",
+      "READ_WRITE"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     },
     "source": {
      "type": "string",
@@ -307,6 +356,14 @@
     "type": {
      "type": "string",
      "description": "Type of the disk, either \"SCRATCH\" or \"PERSISTENT\". Note that persistent disks must be created before you can specify them here.",
+     "enum": [
+      "PERSISTENT",
+      "SCRATCH"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ],
      "annotations": {
       "required": [
        "compute.instances.insert"
@@ -338,7 +395,17 @@
     },
     "state": {
      "type": "string",
-     "description": "The deprecation state. Can be \"DEPRECATED\", \"OBSOLETE\", or \"DELETED\". Operations which create a new resource using a \"DEPRECATED\" resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. New uses of \"OBSOLETE\" or \"DELETED\" resources will result in an error."
+     "description": "The deprecation state. Can be \"DEPRECATED\", \"OBSOLETE\", or \"DELETED\". Operations which create a new resource using a \"DEPRECATED\" resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. New uses of \"OBSOLETE\" or \"DELETED\" resources will result in an error.",
+     "enum": [
+      "DELETED",
+      "DEPRECATED",
+      "OBSOLETE"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
     }
    }
   },
@@ -398,7 +465,19 @@
     },
     "status": {
      "type": "string",
-     "description": "The status of disk creation (output only)."
+     "description": "The status of disk creation (output only).",
+     "enum": [
+      "CREATING",
+      "FAILED",
+      "READY",
+      "RESTORING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "zone": {
      "type": "string",
@@ -485,7 +564,31 @@
      "properties": {
       "code": {
        "type": "string",
-       "description": "The warning type identifier for this warning."
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
       },
       "data": {
        "type": "array",
@@ -525,7 +628,7 @@
       "properties": {
        "IPProtocol": {
         "type": "string",
-        "description": "Required; this is the IP protocol that is allowed for this rule. This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number."
+        "description": "Required; this is the IP protocol that is allowed for this rule. This can either be one of the following well known protocol strings [\"tcp\", \"udp\", \"icmp\", \"esp\", \"ah\", \"sctp\"], or the IP protocol number."
        },
        "ports": {
         "type": "array",
@@ -645,7 +748,21 @@
     },
     "IPProtocol": {
      "type": "string",
-     "description": "The IP protocol to which this rule applies, can be either 'TCP' or 'UDP' (If left empty, will use TCP by default)."
+     "description": "The IP protocol to which this rule applies, valid options are 'TCP', 'UDP', 'ESP', 'AH' or 'SCTP'",
+     "enum": [
+      "AH",
+      "ESP",
+      "SCTP",
+      "TCP",
+      "UDP"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "creationTimestamp": {
      "type": "string",
@@ -672,7 +789,7 @@
     },
     "portRange": {
      "type": "string",
-     "description": "If 'IPProtocol' is 'TCP' or 'UDP', only packets addressed to ports in the specified range will be forwarded to 'target'. If left empty (default value), all ports are forwarded. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges."
+     "description": "Applicable only when 'IPProtocol' is 'TCP', 'UDP' or 'SCTP', only packets addressed to ports in the specified range will be forwarded to 'target'. If 'portRange' is left empty (default value), all ports are forwarded. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges. @pattern: \\d+(?:-\\d+)?"
     },
     "region": {
      "type": "string",
@@ -767,7 +884,31 @@
      "properties": {
       "code": {
        "type": "string",
-       "description": "The warning type identifier for this warning."
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
       },
       "data": {
        "type": "array",
@@ -809,7 +950,15 @@
    "properties": {
     "healthState": {
      "type": "string",
-     "description": "Health state of the instance."
+     "description": "Health state of the instance.",
+     "enum": [
+      "HEALTHY",
+      "UNHEALTHY"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     },
     "instance": {
      "type": "string",
@@ -924,6 +1073,11 @@
    "type": "object",
    "description": "A disk image resource.",
    "properties": {
+    "archiveSizeBytes": {
+     "type": "string",
+     "description": "Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).",
+     "format": "int64"
+    },
     "creationTimestamp": {
      "type": "string",
      "description": "Creation timestamp in RFC3339 text format (output only)."
@@ -956,15 +1110,6 @@
       ]
      }
     },
-    "preferredKernel": {
-     "type": "string",
-     "description": "An optional URL of the preferred kernel for use with this disk image. If not specified, a server defined default kernel will be used.",
-     "annotations": {
-      "required": [
-       "compute.images.insert"
-      ]
-     }
-    },
     "rawDisk": {
      "type": "object",
      "description": "The raw disk image parameters.",
@@ -998,6 +1143,12 @@
      "type": "string",
      "description": "Must be \"RAW\"; provided by the client when the disk image is created.",
      "default": "RAW",
+     "enum": [
+      "RAW"
+     ],
+     "enumDescriptions": [
+      ""
+     ],
      "annotations": {
       "required": [
        "compute.images.insert"
@@ -1006,7 +1157,17 @@
     },
     "status": {
      "type": "string",
-     "description": "Status of the image (output only). It will be one of the following READY - after image has been successfully created and is ready for use FAILED - if creating the image fails for some reason PENDING - the image creation is in progress An image can be used to create other resources suck as instances only after the image has been successfully created and the status is set to READY."
+     "description": "Status of the image (output only). It will be one of the following READY - after image has been successfully created and is ready for use FAILED - if creating the image fails for some reason PENDING - the image creation is in progress An image can be used to create other resources suck as instances only after the image has been successfully created and the status is set to READY.",
+     "enum": [
+      "FAILED",
+      "PENDING",
+      "READY"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
     }
    }
   },
@@ -1070,14 +1231,6 @@
      "description": "Unique identifier for the resource; defined by the server (output only).",
      "format": "uint64"
     },
-    "image": {
-     "type": "string",
-     "description": "An optional URL of the disk image resource to be installed on this instance; provided by the client when the instance is created. Alternatively to passing the image, the client may choose to boot from a persistent disk, by setting boot=true flag on one of the entries in disks[] collection."
-    },
-    "kernel": {
-     "type": "string",
-     "description": "URL of the kernel resource to use when booting. In case of booting from persistent disk, this parameter is required. When booting from a disk image, it is optional, but may be provided to use a different kernel than the one associated with the image."
-    },
     "kind": {
      "type": "string",
      "description": "Type of the resource.",
@@ -1113,6 +1266,10 @@
       "$ref": "NetworkInterface"
      }
     },
+    "scheduling": {
+     "$ref": "Scheduling",
+     "description": "Scheduling options for this instance."
+    },
     "selfLink": {
      "type": "string",
      "description": "Server defined URL for this resource (output only)."
@@ -1126,7 +1283,23 @@
     },
     "status": {
      "type": "string",
-     "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only)."
+     "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only).",
+     "enum": [
+      "PROVISIONING",
+      "RUNNING",
+      "STAGING",
+      "STOPPED",
+      "STOPPING",
+      "TERMINATED"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "statusMessage": {
      "type": "string",
@@ -1230,7 +1403,31 @@
      "properties": {
       "code": {
        "type": "string",
-       "description": "The warning type identifier for this warning."
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
       },
       "data": {
        "type": "array",
@@ -1257,75 +1454,6 @@
     }
    }
   },
-  "Kernel": {
-   "id": "Kernel",
-   "type": "object",
-   "description": "A kernel resource.",
-   "properties": {
-    "creationTimestamp": {
-     "type": "string",
-     "description": "Creation timestamp in RFC3339 text format (output only)."
-    },
-    "deprecated": {
-     "$ref": "DeprecationStatus",
-     "description": "The deprecation status associated with this kernel."
-    },
-    "description": {
-     "type": "string",
-     "description": "An optional textual description of the resource."
-    },
-    "id": {
-     "type": "string",
-     "description": "Unique identifier for the resource; defined by the server (output only).",
-     "format": "uint64"
-    },
-    "kind": {
-     "type": "string",
-     "description": "Type of the resource.",
-     "default": "compute#kernel"
-    },
-    "name": {
-     "type": "string",
-     "description": "Name of the resource.",
-     "pattern": ".*"
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "Server defined URL for the resource (output only)."
-    }
-   }
-  },
-  "KernelList": {
-   "id": "KernelList",
-   "type": "object",
-   "description": "Contains a list of kernel resources.",
-   "properties": {
-    "id": {
-     "type": "string",
-     "description": "Unique identifier for the resource; defined by the server (output only)."
-    },
-    "items": {
-     "type": "array",
-     "description": "The kernel resources.",
-     "items": {
-      "$ref": "Kernel"
-     }
-    },
-    "kind": {
-     "type": "string",
-     "description": "Type of resource.",
-     "default": "compute#kernelList"
-    },
-    "nextPageToken": {
-     "type": "string",
-     "description": "A token used to continue a truncated list request (output only)."
-    },
-    "selfLink": {
-     "type": "string",
-     "description": "Server defined URL for this resource (output only)."
-    }
-   }
-  },
   "MachineType": {
    "id": "MachineType",
    "type": "object",
@@ -1486,7 +1614,31 @@
      "properties": {
       "code": {
        "type": "string",
-       "description": "The warning type identifier for this warning."
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
       },
       "data": {
        "type": "array",
@@ -1568,7 +1720,7 @@
     "IPv4Range": {
      "type": "string",
      "description": "Required; The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.",
-     "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}",
+     "pattern": ".*",
      "annotations": {
       "required": [
        "compute.networks.insert"
@@ -1586,7 +1738,7 @@
     "gatewayIPv4": {
      "type": "string",
      "description": "An optional address that is used for default routing to other networks. This must be within the range specified by IPv4Range, and is typically the first usable address in that range. If not specified, the default value is the first usable address in IPv4Range.",
-     "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}"
+     "pattern": ".*"
     },
     "id": {
      "type": "string",
@@ -1770,7 +1922,17 @@
     },
     "status": {
      "type": "string",
-     "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only)."
+     "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only).",
+     "enum": [
+      "DONE",
+      "PENDING",
+      "RUNNING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
     },
     "statusMessage": {
      "type": "string",
@@ -1797,7 +1959,31 @@
       "properties": {
        "code": {
         "type": "string",
-        "description": "The warning type identifier for this warning."
+        "description": "The warning type identifier for this warning.",
+        "enum": [
+         "DEPRECATED_RESOURCE_USED",
+         "INJECTED_KERNELS_DEPRECATED",
+         "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+         "NEXT_HOP_CANNOT_IP_FORWARD",
+         "NEXT_HOP_INSTANCE_NOT_FOUND",
+         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+         "NEXT_HOP_NOT_RUNNING",
+         "NO_RESULTS_ON_PAGE",
+         "REQUIRED_TOS_AGREEMENT",
+         "UNREACHABLE"
+        ],
+        "enumDescriptions": [
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         ""
+        ]
        },
        "data": {
         "type": "array",
@@ -1908,7 +2094,31 @@
      "properties": {
       "code": {
        "type": "string",
-       "description": "The warning type identifier for this warning."
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
       },
       "data": {
        "type": "array",
@@ -1991,7 +2201,51 @@
     },
     "metric": {
      "type": "string",
-     "description": "Name of the quota metric."
+     "description": "Name of the quota metric.",
+     "enum": [
+      "CPUS",
+      "DISKS",
+      "DISKS_TOTAL_GB",
+      "EPHEMERAL_ADDRESSES",
+      "FIREWALLS",
+      "FORWARDING_RULES",
+      "HEALTH_CHECKS",
+      "IMAGES",
+      "IMAGES_TOTAL_GB",
+      "INSTANCES",
+      "IN_USE_ADDRESSES",
+      "KERNELS",
+      "KERNELS_TOTAL_GB",
+      "NETWORKS",
+      "OPERATIONS",
+      "ROUTES",
+      "SNAPSHOTS",
+      "STATIC_ADDRESSES",
+      "TARGET_INSTANCES",
+      "TARGET_POOLS"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
     },
     "usage": {
      "type": "number",
@@ -2044,7 +2298,15 @@
     },
     "status": {
      "type": "string",
-     "description": "Status of the region, \"UP\" or \"DOWN\"."
+     "description": "Status of the region, \"UP\" or \"DOWN\".",
+     "enum": [
+      "DOWN",
+      "UP"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     },
     "zones": {
      "type": "array",
@@ -2187,7 +2449,31 @@
       "properties": {
        "code": {
         "type": "string",
-        "description": "The warning type identifier for this warning."
+        "description": "The warning type identifier for this warning.",
+        "enum": [
+         "DEPRECATED_RESOURCE_USED",
+         "INJECTED_KERNELS_DEPRECATED",
+         "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+         "NEXT_HOP_CANNOT_IP_FORWARD",
+         "NEXT_HOP_INSTANCE_NOT_FOUND",
+         "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+         "NEXT_HOP_NOT_RUNNING",
+         "NO_RESULTS_ON_PAGE",
+         "REQUIRED_TOS_AGREEMENT",
+         "UNREACHABLE"
+        ],
+        "enumDescriptions": [
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         "",
+         ""
+        ]
        },
        "data": {
         "type": "array",
@@ -2246,6 +2532,29 @@
     }
    }
   },
+  "Scheduling": {
+   "id": "Scheduling",
+   "type": "object",
+   "description": "Scheduling options for an Instance.",
+   "properties": {
+    "automaticRestart": {
+     "type": "boolean",
+     "description": "Whether the Instance should be automatically restarted whenever it is terminated by Compute Engine (not terminated by user)."
+    },
+    "onHostMaintenance": {
+     "type": "string",
+     "description": "How the instance should behave when the host machine undergoes maintenance that may temporarily impact instance performance.",
+     "enum": [
+      "MIGRATE",
+      "TERMINATE"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    }
+   }
+  },
   "SerialPortOutput": {
    "id": "SerialPortOutput",
    "type": "object",
@@ -2331,7 +2640,38 @@
     },
     "status": {
      "type": "string",
-     "description": "The status of the persistent disk snapshot (output only)."
+     "description": "The status of the persistent disk snapshot (output only).",
+     "enum": [
+      "CREATING",
+      "DELETING",
+      "FAILED",
+      "READY",
+      "UPLOADING"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      "",
+      "",
+      ""
+     ]
+    },
+    "storageBytes": {
+     "type": "string",
+     "description": "A size of the the storage used by the snapshot. As snapshots share storage this number is expected to change with snapshot creation/deletion.",
+     "format": "int64"
+    },
+    "storageBytesStatus": {
+     "type": "string",
+     "description": "An indicator whether storageBytes is in a stable state, or it is being adjusted as a result of shared storage reallocation.",
+     "enum": [
+      "UPDATING",
+      "UP_TO_DATE"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     }
    }
   },
@@ -2390,6 +2730,10 @@
    "type": "object",
    "description": "A TargetPool resource. This resource defines a pool of VMs, associated HttpHealthCheck resources, and the fallback TargetPool.",
    "properties": {
+    "backupPool": {
+     "type": "string",
+     "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool, and its 'failoverRatio' field is properly set to a value between [0, 1].\n\n'backupPool' and 'failoverRatio' together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below 'failoverRatio', traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' and 'backupPool' are not set, or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy."
+    },
     "creationTimestamp": {
      "type": "string",
      "description": "Creation timestamp in RFC3339 text format (output only)."
@@ -2398,6 +2742,11 @@
      "type": "string",
      "description": "An optional textual description of the resource; provided by the client when the resource is created."
     },
+    "failoverRatio": {
+     "type": "number",
+     "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool (i.e., not as a backup pool to some other target pool). The value of the field must be in [0, 1].\n\nIf set, 'backupPool' must also be set. They together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below this number, traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' is not set or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy.",
+     "format": "float"
+    },
     "healthChecks": {
      "type": "array",
      "description": "A list of URLs to the HttpHealthCheck resource. A member VM in this pool is considered healthy if and only if all specified health checks pass. An empty list means all member VMs will be considered healthy at all times.",
@@ -2434,6 +2783,20 @@
     "selfLink": {
      "type": "string",
      "description": "Server defined URL for the resource (output only)."
+    },
+    "sessionAffinity": {
+     "type": "string",
+     "description": "Sesssion affinity option, must be one of the following values: 'NONE': Connections from the same client IP may go to any VM in the pool; 'CLIENT_IP': Connections from the same client IP will go to the same VM in the pool while that VM remains healthy. 'CLIENT_IP_PROTO': Connections from the same client IP with the same IP protocol will go to the same VM in the pool while that VM remains healthy.",
+     "enum": [
+      "CLIENT_IP",
+      "CLIENT_IP_PROTO",
+      "NONE"
+     ],
+     "enumDescriptions": [
+      "",
+      "",
+      ""
+     ]
     }
    }
   },
@@ -2516,6 +2879,58 @@
     }
    }
   },
+  "TargetPoolsAddHealthCheckRequest": {
+   "id": "TargetPoolsAddHealthCheckRequest",
+   "type": "object",
+   "properties": {
+    "healthChecks": {
+     "type": "array",
+     "description": "Health check URLs to be added to targetPool.",
+     "items": {
+      "$ref": "HealthCheckReference"
+     }
+    }
+   }
+  },
+  "TargetPoolsAddInstanceRequest": {
+   "id": "TargetPoolsAddInstanceRequest",
+   "type": "object",
+   "properties": {
+    "instances": {
+     "type": "array",
+     "description": "URLs of the instances to be added to targetPool.",
+     "items": {
+      "$ref": "InstanceReference"
+     }
+    }
+   }
+  },
+  "TargetPoolsRemoveHealthCheckRequest": {
+   "id": "TargetPoolsRemoveHealthCheckRequest",
+   "type": "object",
+   "properties": {
+    "healthChecks": {
+     "type": "array",
+     "description": "Health check URLs to be removed from targetPool.",
+     "items": {
+      "$ref": "HealthCheckReference"
+     }
+    }
+   }
+  },
+  "TargetPoolsRemoveInstanceRequest": {
+   "id": "TargetPoolsRemoveInstanceRequest",
+   "type": "object",
+   "properties": {
+    "instances": {
+     "type": "array",
+     "description": "URLs of the instances to be removed from targetPool.",
+     "items": {
+      "$ref": "InstanceReference"
+     }
+    }
+   }
+  },
   "TargetPoolsScopedList": {
    "id": "TargetPoolsScopedList",
    "type": "object",
@@ -2533,7 +2948,31 @@
      "properties": {
       "code": {
        "type": "string",
-       "description": "The warning type identifier for this warning."
+       "description": "The warning type identifier for this warning.",
+       "enum": [
+        "DEPRECATED_RESOURCE_USED",
+        "INJECTED_KERNELS_DEPRECATED",
+        "NEXT_HOP_ADDRESS_NOT_ASSIGNED",
+        "NEXT_HOP_CANNOT_IP_FORWARD",
+        "NEXT_HOP_INSTANCE_NOT_FOUND",
+        "NEXT_HOP_INSTANCE_NOT_ON_NETWORK",
+        "NEXT_HOP_NOT_RUNNING",
+        "NO_RESULTS_ON_PAGE",
+        "REQUIRED_TOS_AGREEMENT",
+        "UNREACHABLE"
+       ],
+       "enumDescriptions": [
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        "",
+        ""
+       ]
       },
       "data": {
        "type": "array",
@@ -2625,13 +3064,6 @@
      "type": "string",
      "description": "Name of the resource."
     },
-    "quotas": {
-     "type": "array",
-     "description": "Quotas assigned to this zone.",
-     "items": {
-      "$ref": "Quota"
-     }
-    },
     "region": {
      "type": "string",
      "description": "Full URL reference to the region which hosts the zone (output only)."
@@ -2642,7 +3074,15 @@
     },
     "status": {
      "type": "string",
-     "description": "Status of the zone. \"UP\" or \"DOWN\"."
+     "description": "Status of the zone. \"UP\" or \"DOWN\".",
+     "enum": [
+      "DOWN",
+      "UP"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
     }
    }
   },
@@ -2694,11 +3134,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -2710,7 +3150,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -2742,7 +3182,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -2782,7 +3222,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -2816,7 +3256,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -2854,11 +3294,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -2870,7 +3310,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -2910,11 +3350,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -2926,7 +3366,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -2957,7 +3397,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -3000,7 +3440,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -3040,7 +3480,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -3074,7 +3514,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "sourceImage": {
@@ -3117,11 +3557,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -3133,7 +3573,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -3177,7 +3617,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3209,7 +3649,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3235,7 +3675,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3265,11 +3705,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -3281,7 +3721,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3313,7 +3753,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3348,7 +3788,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3383,11 +3823,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -3399,7 +3839,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3431,7 +3871,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -3471,7 +3911,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -3505,7 +3945,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -3543,11 +3983,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -3559,7 +3999,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -3599,7 +4039,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -3642,11 +4082,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -3658,7 +4098,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3690,7 +4130,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3719,7 +4159,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3748,11 +4188,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -3764,7 +4204,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3800,7 +4240,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3832,7 +4272,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3858,7 +4298,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3888,11 +4328,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -3904,7 +4344,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3936,7 +4376,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -3971,7 +4411,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4010,7 +4450,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4042,7 +4482,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4077,7 +4517,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4103,7 +4543,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4136,11 +4576,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -4152,7 +4592,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4194,7 +4634,7 @@
        "type": "string",
        "description": "Project name.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4233,11 +4673,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -4249,7 +4689,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4281,7 +4721,7 @@
        "type": "string",
        "description": "Project name.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4324,7 +4764,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4376,7 +4816,7 @@
        "type": "string",
        "description": "Project name.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4425,7 +4865,7 @@
        "type": "string",
        "description": "Project name.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4466,7 +4906,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4507,7 +4947,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4541,7 +4981,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4579,11 +5019,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -4595,7 +5035,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4635,7 +5075,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4675,7 +5115,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4701,6 +5141,49 @@
       "https://www.googleapis.com/auth/compute"
      ]
     },
+    "setScheduling": {
+     "id": "compute.instances.setScheduling",
+     "path": "{project}/zones/{zone}/instances/{instance}/setScheduling",
+     "httpMethod": "POST",
+     "description": "Sets an instance's scheduling options.",
+     "parameters": {
+      "instance": {
+       "type": "string",
+       "description": "Instance name.",
+       "required": true,
+       "pattern": ".*",
+       "location": "path"
+      },
+      "project": {
+       "type": "string",
+       "description": "Project name.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
+       "location": "path"
+      },
+      "zone": {
+       "type": "string",
+       "description": "Name of the zone scoping this request.",
+       "required": true,
+       "pattern": ".*",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "zone",
+      "instance"
+     ],
+     "request": {
+      "$ref": "Scheduling"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
     "setTags": {
      "id": "compute.instances.setTags",
      "path": "{project}/zones/{zone}/instances/{instance}/setTags",
@@ -4718,7 +5201,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4746,87 +5229,6 @@
     }
    }
   },
-  "kernels": {
-   "methods": {
-    "get": {
-     "id": "compute.kernels.get",
-     "path": "{project}/global/kernels/{kernel}",
-     "httpMethod": "GET",
-     "description": "Returns the specified kernel resource.",
-     "parameters": {
-      "kernel": {
-       "type": "string",
-       "description": "Name of the kernel resource to return.",
-       "required": true,
-       "pattern": ".*",
-       "location": "path"
-      },
-      "project": {
-       "type": "string",
-       "description": "Name of the project scoping this request.",
-       "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "project",
-      "kernel"
-     ],
-     "response": {
-      "$ref": "Kernel"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/compute",
-      "https://www.googleapis.com/auth/compute.readonly"
-     ]
-    },
-    "list": {
-     "id": "compute.kernels.list",
-     "path": "{project}/global/kernels",
-     "httpMethod": "GET",
-     "description": "Retrieves the list of kernel resources available to the specified project.",
-     "parameters": {
-      "filter": {
-       "type": "string",
-       "description": "Optional. Filter expression for filtering listed resources.",
-       "location": "query"
-      },
-      "maxResults": {
-       "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
-       "default": "100",
-       "format": "uint32",
-       "minimum": "0",
-       "maximum": "100",
-       "location": "query"
-      },
-      "pageToken": {
-       "type": "string",
-       "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.",
-       "location": "query"
-      },
-      "project": {
-       "type": "string",
-       "description": "Name of the project scoping this request.",
-       "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
-       "location": "path"
-      }
-     },
-     "parameterOrder": [
-      "project"
-     ],
-     "response": {
-      "$ref": "KernelList"
-     },
-     "scopes": [
-      "https://www.googleapis.com/auth/compute",
-      "https://www.googleapis.com/auth/compute.readonly"
-     ]
-    }
-   }
-  },
   "machineTypes": {
    "methods": {
     "aggregatedList": {
@@ -4842,11 +5244,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -4858,7 +5260,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -4890,7 +5292,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4927,11 +5329,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -4943,7 +5345,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -4987,7 +5389,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5019,7 +5421,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5045,7 +5447,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5075,11 +5477,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -5091,7 +5493,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5120,7 +5522,7 @@
        "type": "string",
        "description": "Name of the project resource to retrieve.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5145,7 +5547,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5183,7 +5585,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5220,7 +5622,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5257,11 +5659,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -5273,7 +5675,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5310,7 +5712,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5346,11 +5748,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -5362,7 +5764,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5391,7 +5793,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "route": {
@@ -5423,7 +5825,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "route": {
@@ -5456,7 +5858,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5486,11 +5888,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -5502,7 +5904,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5531,7 +5933,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "snapshot": {
@@ -5563,7 +5965,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "snapshot": {
@@ -5599,11 +6001,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -5615,7 +6017,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5644,7 +6046,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5668,7 +6070,7 @@
       "targetPool"
      ],
      "request": {
-      "$ref": "HealthCheckReference"
+      "$ref": "TargetPoolsAddHealthCheckRequest"
      },
      "response": {
       "$ref": "Operation"
@@ -5687,7 +6089,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5711,7 +6113,7 @@
       "targetPool"
      ],
      "request": {
-      "$ref": "InstanceReference"
+      "$ref": "TargetPoolsAddInstanceRequest"
      },
      "response": {
       "$ref": "Operation"
@@ -5733,11 +6135,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -5749,7 +6151,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -5774,7 +6176,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5814,7 +6216,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5855,7 +6257,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5899,7 +6301,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5937,11 +6339,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -5953,7 +6355,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -5986,7 +6388,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -6010,7 +6412,7 @@
       "targetPool"
      ],
      "request": {
-      "$ref": "HealthCheckReference"
+      "$ref": "TargetPoolsRemoveHealthCheckRequest"
      },
      "response": {
       "$ref": "Operation"
@@ -6029,7 +6431,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "region": {
@@ -6053,7 +6455,56 @@
       "targetPool"
      ],
      "request": {
-      "$ref": "InstanceReference"
+      "$ref": "TargetPoolsRemoveInstanceRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
+    "setBackup": {
+     "id": "compute.targetPools.setBackup",
+     "path": "{project}/regions/{region}/targetPools/{targetPool}/setBackup",
+     "httpMethod": "POST",
+     "description": "Changes backup pool configurations.",
+     "parameters": {
+      "failoverRatio": {
+       "type": "number",
+       "description": "New failoverRatio value for the containing target pool.",
+       "format": "float",
+       "location": "query"
+      },
+      "project": {
+       "type": "string",
+       "description": "Name of the project scoping this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
+       "location": "path"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": ".*",
+       "location": "path"
+      },
+      "targetPool": {
+       "type": "string",
+       "description": "Name of the TargetPool resource for which the backup is to be set.",
+       "required": true,
+       "pattern": ".*",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "targetPool"
+     ],
+     "request": {
+      "$ref": "TargetReference"
      },
      "response": {
       "$ref": "Operation"
@@ -6083,7 +6534,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -6120,7 +6571,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -6157,11 +6608,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -6173,7 +6624,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -6210,7 +6661,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       },
       "zone": {
@@ -6246,11 +6697,11 @@
       },
       "maxResults": {
        "type": "integer",
-       "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.",
+       "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.",
        "default": "100",
        "format": "uint32",
        "minimum": "0",
-       "maximum": "100",
+       "maximum": "500",
        "location": "query"
       },
       "pageToken": {
@@ -6262,7 +6713,7 @@
        "type": "string",
        "description": "Name of the project scoping this request.",
        "required": true,
-       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?):)?(?:[0-9]{1,19}|(?:[a-zA-Z](?:[-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?))",
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:.*):)?(?:[0-9]{1,19}|(?:.*))",
        "location": "path"
       }
      },
@@ -6280,4 +6731,4 @@
    }
   }
  }
-}
+}
\ No newline at end of file
diff --git a/setup.py b/setup.py
index dc71e20..452e054 100755
--- a/setup.py
+++ b/setup.py
@@ -50,11 +50,11 @@
         "gstack", "gstack.controllers", "gstack.models",
         "gstack.services", "gstack.data", "pyoauth2"],
     install_requires=[
-        "flask",
         "requests==0.14",
         "pycrypto==2.6",
         "pyopenssl",
         "Flask-SQLAlchemy",
+        "flask",
     ],
     zip_safe=False,
     entry_points="""