You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2013/10/04 18:02:58 UTC
[2/5] GCE Loadbalancer Support and improvements in the compute
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/loadbalancer/drivers/gce.py
----------------------------------------------------------------------
diff --git a/libcloud/loadbalancer/drivers/gce.py b/libcloud/loadbalancer/drivers/gce.py
new file mode 100644
index 0000000..904ff9c
--- /dev/null
+++ b/libcloud/loadbalancer/drivers/gce.py
@@ -0,0 +1,363 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+try:
+ import simplejson as json
+except ImportError:
+ import json
+
+from libcloud.loadbalancer.base import LoadBalancer, Member, Driver, Algorithm
+from libcloud.compute.drivers.gce import GCEConnection, GCENodeDriver
+
+# GCE doesn't actually give you a algorithm choice, but this is here simply as
+# the closest match. The actual algorithm is described here:
+# https://developers.google.com/compute/docs/load-balancing/#overview
+DEFAULT_ALGORITHM = Algorithm.RANDOM
+
+
+class GCELBDriver(Driver):
+ connectionCls = GCEConnection
+ apiname = 'googleapis'
+ name = 'Google Compute Engine'
+ website = 'https://www.googleapis.com/'
+
+ _VALUE_TO_ALGORITHM_MAP = {
+ 'RANDOM': Algorithm.RANDOM
+ }
+
+ def __init__(self, *args, **kwargs):
+
+ if kwargs.get('gce_driver'):
+ self.gce = kwargs['gce_driver']
+ else:
+ self.gce = GCENodeDriver(*args, **kwargs)
+
+ self.connection = self.gce.connection
+
+ def _get_node_from_ip(self, ip):
+ """
+ Return the node object that matches a given public IP address.
+
+ :param ip: Public IP address to search for
+ :type ip: ``str``
+
+ :return: Node object that has the given IP, or None if not found.
+ :rtype: :class:`Node` or None
+ """
+ all_nodes = self.gce.list_nodes(ex_zone='all')
+ for node in all_nodes:
+ if ip in node.public_ips:
+ return node
+ return None
+
+ def list_protocols(self):
+ """
+ Return a list of supported protocols.
+
+ For GCE, this is simply a hardcoded list.
+
+ :rtype: ``list`` of ``str``
+ """
+ return ['TCP', 'UDP']
+
+ def list_balancers(self, ex_region=None):
+ """
+ List all loadbalancers
+
+ :keyword ex_region: The region to return balancers from. If None,
+ will default to self.region. If 'all', will
+ return all balancers.
+ :type ex_region: ``str`` or :class:`GCERegion` or ``None``
+
+ :rtype: ``list`` of :class:`LoadBalancer`
+ """
+ balancers = []
+ for fwr in self.gce.ex_list_forwarding_rules(region=ex_region):
+ balancers.append(self._forwarding_rule_to_loadbalancer(fwr))
+ return balancers
+
+ def create_balancer(self, name, port, protocol, algorithm, members,
+ ex_region=None, ex_healthchecks=None, ex_address=None):
+ """
+ Create a new load balancer instance.
+
+ For GCE, this means creating a forwarding rule and a matching target
+ pool, then adding the members to the target pool.
+
+ :param name: Name of the new load balancer (required)
+ :type ``str``
+
+ :param port: Port or range of ports the load balancer should listen
+ on, defaults to all ports. Examples: '80', '5000-5999'
+ :type port: ``str``
+
+ :param protocol: Load balancer protocol. Should be 'tcp' or 'udp',
+ defaults to 'tcp'.
+ :type protocol: ``str``
+
+ :param members: List of Members to attach to balancer. Can be Member
+ objects or Node objects. Node objects are preferred
+ for GCE, but Member objects are accepted to comply
+ with the established libcloud API. Note that the
+ 'port' attribute of the members is ignored.
+ :type members: ``list`` of :class:`Member` or :class:`Node`
+
+ :param algorithm: Load balancing algorithm. Ignored for GCE which
+ uses a hashing-based algorithm.
+ :type algorithm: :class:`Algorithm` or ``None``
+
+ :keyword ex_region: Optional region to create the load balancer in.
+ Defaults to the default region of the GCE Node
+ Driver.
+ :type ex_region: C{GCERegion} or ``str``
+
+ :keyword ex_healthchecks: Optional list of healthcheck objects or
+ names to add to the load balancer.
+ :type ex_healthchecks: ``list`` of :class:`GCEHealthCheck` or ``str``
+
+ :keyword ex_address: Optional static address object to be assigned to
+ the load balancer.
+ :type ex_address: C{GCEAddress}
+
+ :return: LoadBalancer object
+ :rtype: :class:`LoadBalancer`
+ """
+ unused = algorithm
+
+ node_list = []
+ for member in members:
+ # Member object
+ if hasattr(member, 'ip'):
+ if member.extra.get('node'):
+ node_list.append(member.extra['node'])
+ else:
+ node_list.append(self._get_node_from_ip(member.ip))
+ # Node object
+ elif hasattr(member, 'name'):
+ node_list.append(member)
+ # Assume it's a node name otherwise
+ else:
+ node_list.append(self.gce.ex_get_node(member, 'all'))
+
+ # Create Target Pool
+ tp_name = '%s-tp' % name
+ targetpool = self.gce.ex_create_targetpool(
+ tp_name, region=ex_region, healthchecks=ex_healthchecks,
+ nodes=node_list)
+
+ # Create the Forwarding rule, but if it fails, delete the target pool.
+ try:
+ forwarding_rule = self.gce.ex_create_forwarding_rule(
+ name, targetpool, region=ex_region, protocol=protocol,
+ port_range=port, address=ex_address)
+ except:
+ targetpool.destroy()
+ raise
+
+ # Reformat forwarding rule to LoadBalancer object
+ return self._forwarding_rule_to_loadbalancer(forwarding_rule)
+
+ def destroy_balancer(self, balancer):
+ """
+ Destroy a load balancer.
+
+ For GCE, this means destroying the associated forwarding rule, then
+ destroying the target pool that was attached to the forwarding rule.
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :return: True if successful
+ :rtype: ``bool``
+ """
+ destroy = balancer.extra['forwarding_rule'].destroy()
+ if destroy:
+ tp_destroy = balancer.extra['targetpool'].destroy()
+ return tp_destroy
+ else:
+ return destroy
+
+ def get_balancer(self, balancer_id):
+ """
+ Return a :class:`LoadBalancer` object.
+
+ :param balancer_id: Name of load balancer you wish to fetch. For GCE,
+ this is the name of the associated forwarding
+ rule.
+ :param balancer_id: ``str``
+
+ :rtype: :class:`LoadBalancer`
+ """
+ fwr = self.gce.ex_get_forwarding_rule(balancer_id)
+ return self._forwarding_rule_to_loadbalancer(fwr)
+
+ def balancer_attach_compute_node(self, balancer, node):
+ """
+ Attach a compute node as a member to the load balancer.
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :param node: Node to join to the balancer
+ :type node: :class:`Node`
+
+ :return: Member after joining the balancer.
+ :rtype: :class:`Member`
+ """
+ add_node = balancer.extra['targetpool'].add_node(node)
+ if add_node:
+ return self._node_to_member(node, balancer)
+
+ def balancer_attach_member(self, balancer, member):
+ """
+ Attach a member to balancer
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :param member: Member to join to the balancer
+ :type member: :class:`Member`
+
+ :return: Member after joining the balancer.
+ :rtype: :class:`Member`
+ """
+ node = member.extra.get('node') or self._get_node_from_ip(member.ip)
+ add_node = balancer.extra['targetpool'].add_node(node)
+ if add_node:
+ return self._node_to_member(node, balancer)
+
+ def balancer_detach_member(self, balancer, member):
+ """
+ Detach member from balancer
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :param member: Member which should be used
+ :type member: :class:`Member`
+
+ :return: True if member detach was successful, otherwise False
+ :rtype: ``bool``
+ """
+ node = member.extra.get('node') or self._get_node_from_ip(member.ip)
+ remove_node = balancer.extra['targetpool'].remove_node(node)
+ return remove_node
+
+ def balancer_list_members(self, balancer):
+ """
+ Return list of members attached to balancer
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :rtype: ``list`` of :class:`Member`
+ """
+ return [self._node_to_member(n, balancer) for n in
+ balancer.extra['targetpool'].nodes]
+
+ def ex_create_healthcheck(self, *args, **kwargs):
+ return self.gce.ex_create_healthcheck(*args, **kwargs)
+
+ def ex_list_healthchecks(self):
+ return self.gce.ex_list_healthchecks()
+
+ def ex_balancer_attach_healthcheck(self, balancer, healthcheck):
+ """
+ Attach a healthcheck to balancer
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :param healthcheck: Healthcheck to add
+ :type healthcheck: :class:`GCEHealthCheck`
+
+ :return: True if successful
+ :rtype: ``bool``
+ """
+ return balancer.extra['targetpool'].add_healthcheck(healthcheck)
+
+ def ex_balancer_detach_healthcheck(self, balancer, healthcheck):
+ """
+ Detach healtcheck from balancer
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :param healthcheck: Healthcheck to remove
+ :type healthcheck: :class:`GCEHealthCheck`
+
+ :return: True if successful
+ :rtype: ``bool``
+ """
+ return balancer.extra['targetpool'].remove_healthcheck(healthcheck)
+
+ def ex_balancer_list_healthchecks(self, balancer):
+ """
+ Return list of healthchecks attached to balancer
+
+ :param balancer: LoadBalancer which should be used
+ :type balancer: :class:`LoadBalancer`
+
+ :rtype: ``list`` of :class:`HealthChecks`
+ """
+ return balancer.extra['healthchecks']
+
+ def _node_to_member(self, node, balancer):
+ """
+ Return a Member object based on a Node.
+
+ :param node: Node object
+ :type node: :class:`Node`
+
+ :keyword balancer: The balancer the member is attached to.
+ :type balancer: :class:`LoadBalancer`
+
+ :return: Member object
+ :rtype: :class:`Member`
+ """
+ # A balancer can have a node as a member, even if the node doesn't
+ # exist. In this case, 'node' is simply a string to where the resource
+ # would be found if it was there.
+ if hasattr(node, 'name'):
+ member_id = node.name
+ member_ip = node.public_ips[0]
+ else:
+ member_id = node
+ member_ip = None
+
+ extra = {'node': node}
+ return Member(id=member_id, ip=member_ip, port=balancer.port,
+ balancer=balancer, extra=extra)
+
+ def _forwarding_rule_to_loadbalancer(self, forwarding_rule):
+ """
+ Return a Load Balancer object based on a GCEForwardingRule object.
+
+ :param forwarding_rule: ForwardingRule object
+ :type forwarding_rule: :class:`GCEForwardingRule`
+
+ :return: LoadBalancer object
+ :rtype: :class:`LoadBalancer`
+ """
+ extra = {}
+ extra['forwarding_rule'] = forwarding_rule
+ extra['targetpool'] = forwarding_rule.targetpool
+ extra['healthchecks'] = forwarding_rule.targetpool.healthchecks
+
+ return LoadBalancer(id=forwarding_rule.id,
+ name=forwarding_rule.name, state=None,
+ ip=forwarding_rule.address,
+ port=forwarding_rule.extra['portRange'],
+ driver=self, extra=extra)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/loadbalancer/providers.py
----------------------------------------------------------------------
diff --git a/libcloud/loadbalancer/providers.py b/libcloud/loadbalancer/providers.py
index 3ed140d..54ce72b 100644
--- a/libcloud/loadbalancer/providers.py
+++ b/libcloud/loadbalancer/providers.py
@@ -37,8 +37,9 @@ DRIVERS = {
Provider.ELB:
('libcloud.loadbalancer.drivers.elb', 'ElasticLBDriver'),
Provider.CLOUDSTACK:
- ('libcloud.loadbalancer.drivers.cloudstack', 'CloudStackLBDriver')
-
+ ('libcloud.loadbalancer.drivers.cloudstack', 'CloudStackLBDriver'),
+ Provider.GCE:
+ ('libcloud.loadbalancer.drivers.gce', 'GCELBDriver')
}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/loadbalancer/types.py
----------------------------------------------------------------------
diff --git a/libcloud/loadbalancer/types.py b/libcloud/loadbalancer/types.py
index 40246f9..133bf7e 100644
--- a/libcloud/loadbalancer/types.py
+++ b/libcloud/loadbalancer/types.py
@@ -39,6 +39,7 @@ class Provider(object):
BRIGHTBOX = 'brightbox'
ELB = 'elb'
CLOUDSTACK = 'cloudstack'
+ GCE = 'gce'
class State(object):
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/aggregated_forwardingRules.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/aggregated_forwardingRules.json b/libcloud/test/compute/fixtures/gce/aggregated_forwardingRules.json
new file mode 100644
index 0000000..c6f648a
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/aggregated_forwardingRules.json
@@ -0,0 +1,57 @@
+{
+ "id": "projects/project_name/aggregated/forwardingRules",
+ "items": {
+ "regions/europe-west1": {
+ "warning": {
+ "code": "NO_RESULTS_ON_PAGE",
+ "data": [
+ {
+ "key": "scope",
+ "value": "regions/europe-west1"
+ }
+ ],
+ "message": "There are no results for scope 'regions/europe-west1' on this page."
+ }
+ },
+ "regions/us-central1": {
+ "forwardingRules": [
+ {
+ "IPAddress": "173.255.119.224",
+ "IPProtocol": "TCP",
+ "creationTimestamp": "2013-09-03T00:17:25.544-07:00",
+ "id": "10901665092293158938",
+ "kind": "compute#forwardingRule",
+ "name": "lcforwardingrule",
+ "portRange": "8000-8500",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "target": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+ },
+ {
+ "IPAddress": "173.255.119.185",
+ "IPProtocol": "TCP",
+ "creationTimestamp": "2013-09-02T22:25:50.575-07:00",
+ "id": "15826316229163619337",
+ "kind": "compute#forwardingRule",
+ "name": "libcloud-lb-demo-lb",
+ "portRange": "80-80",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "target": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+ }
+ ]
+ },
+ "regions/us-central2": {
+ "warning": {
+ "code": "NO_RESULTS_ON_PAGE",
+ "data": [
+ {
+ "key": "scope",
+ "value": "regions/us-central2"
+ }
+ ],
+ "message": "There are no results for scope 'regions/us-central2' on this page."
+ }
+ }
+ },
+ "kind": "compute#forwardingRuleAggregatedList",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/aggregated/forwardingRules"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/aggregated_targetPools.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/aggregated_targetPools.json b/libcloud/test/compute/fixtures/gce/aggregated_targetPools.json
new file mode 100644
index 0000000..f57aad5
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/aggregated_targetPools.json
@@ -0,0 +1,64 @@
+{
+ "id": "projects/project_name/aggregated/targetPools",
+ "items": {
+ "regions/europe-west1": {
+ "warning": {
+ "code": "NO_RESULTS_ON_PAGE",
+ "data": [
+ {
+ "key": "scope",
+ "value": "regions/europe-west1"
+ }
+ ],
+ "message": "There are no results for scope 'regions/europe-west1' on this page."
+ }
+ },
+ "regions/us-central1": {
+ "targetPools": [
+ {
+ "creationTimestamp": "2013-09-03T00:51:05.300-07:00",
+ "healthChecks": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck"
+ ],
+ "id": "11690726329826021866",
+ "instances": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-000",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-001"
+ ],
+ "kind": "compute#targetPool",
+ "name": "lctargetpool",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1"
+ },
+ {
+ "creationTimestamp": "2013-09-02T22:25:45.817-07:00",
+ "healthChecks": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck"
+ ],
+ "id": "16605251746746338499",
+ "instances": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-002",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-001",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-000"
+ ],
+ "kind": "compute#targetPool",
+ "name": "libcloud-lb-demo-lb-tp",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1"
+ }
+ ]
+ },
+ "regions/us-central2": {
+ "warning": {
+ "code": "NO_RESULTS_ON_PAGE",
+ "data": [
+ {
+ "key": "scope",
+ "value": "regions/us-central2"
+ }
+ ],
+ "message": "There are no results for scope 'regions/us-central2' on this page."
+ }
+ }
+ },
+ "kind": "compute#targetPoolAggregatedList",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/aggregated/targetPools"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/global_httpHealthChecks.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/global_httpHealthChecks.json b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks.json
new file mode 100644
index 0000000..051fded
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks.json
@@ -0,0 +1,35 @@
+{
+ "id": "projects/project_name/global/httpHealthChecks",
+ "items": [
+ {
+ "checkIntervalSec": 5,
+ "creationTimestamp": "2013-08-19T14:42:28.947-07:00",
+ "description": "",
+ "healthyThreshold": 2,
+ "host": "",
+ "id": "7660832580304455442",
+ "kind": "compute#httpHealthCheck",
+ "name": "basic-check",
+ "port": 80,
+ "requestPath": "/",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/basic-check",
+ "timeoutSec": 5,
+ "unhealthyThreshold": 2
+ },
+ {
+ "checkIntervalSec": 5,
+ "creationTimestamp": "2013-09-02T22:25:44.759-07:00",
+ "healthyThreshold": 2,
+ "id": "16372093408499501663",
+ "kind": "compute#httpHealthCheck",
+ "name": "libcloud-lb-demo-healthcheck",
+ "port": 80,
+ "requestPath": "/",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck",
+ "timeoutSec": 5,
+ "unhealthyThreshold": 2
+ }
+ ],
+ "kind": "compute#httpHealthCheckList",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_basic-check.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_basic-check.json b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_basic-check.json
new file mode 100644
index 0000000..0812ecd
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_basic-check.json
@@ -0,0 +1,15 @@
+{
+ "checkIntervalSec": 5,
+ "creationTimestamp": "2013-08-19T14:42:28.947-07:00",
+ "description": "",
+ "healthyThreshold": 2,
+ "host": "",
+ "id": "7660832580304455442",
+ "kind": "compute#httpHealthCheck",
+ "name": "basic-check",
+ "port": 80,
+ "requestPath": "/",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/basic-check",
+ "timeoutSec": 5,
+ "unhealthyThreshold": 2
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck.json b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck.json
new file mode 100644
index 0000000..76bb117
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck.json
@@ -0,0 +1,14 @@
+{
+ "checkIntervalSec": 10,
+ "creationTimestamp": "2013-09-02T22:18:01.180-07:00",
+ "healthyThreshold": 3,
+ "host": "lchost",
+ "id": "06860603312991823381",
+ "kind": "compute#httpHealthCheck",
+ "name": "lchealthcheck",
+ "port": 8000,
+ "requestPath": "/lc",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/lchealthcheck",
+ "timeoutSec": 10,
+ "unhealthyThreshold": 4
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_delete.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_delete.json b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_delete.json
new file mode 100644
index 0000000..03f97e4
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_delete.json
@@ -0,0 +1,14 @@
+{
+ "id": "1159296103027566387",
+ "insertTime": "2013-09-02T22:18:02.509-07:00",
+ "kind": "compute#operation",
+ "name": "operation-global_httpHealthChecks_lchealthcheck_delete",
+ "operationType": "delete",
+ "progress": 0,
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/operations/operation-global_httpHealthChecks_lchealthcheck_delete",
+ "startTime": "2013-09-02T22:18:02.558-07:00",
+ "status": "PENDING",
+ "targetId": "06860603312991823381",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/healthChecks/lchealthcheck",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_put.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_put.json b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_put.json
new file mode 100644
index 0000000..1daa897
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_lchealthcheck_put.json
@@ -0,0 +1,14 @@
+{
+ "id": "6717642434182216609",
+ "insertTime": "2013-09-03T02:19:55.574-07:00",
+ "kind": "compute#operation",
+ "name": "operation-global_httpHealthChecks_lchealthcheck_put",
+ "operationType": "update",
+ "progress": 0,
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/operations/operation-global_httpHealthChecks_lchealthcheck_put",
+ "startTime": "2013-09-03T02:19:55.628-07:00",
+ "status": "PENDING",
+ "targetId": "0742691415598204878",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/healthChecks/lchealthcheck",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_libcloud-lb-demo-healthcheck.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_libcloud-lb-demo-healthcheck.json b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_libcloud-lb-demo-healthcheck.json
new file mode 100644
index 0000000..6e772aa
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_libcloud-lb-demo-healthcheck.json
@@ -0,0 +1,13 @@
+{
+ "checkIntervalSec": 5,
+ "creationTimestamp": "2013-09-02T22:25:44.759-07:00",
+ "healthyThreshold": 2,
+ "id": "16372093408499501663",
+ "kind": "compute#httpHealthCheck",
+ "name": "libcloud-lb-demo-healthcheck",
+ "port": 80,
+ "requestPath": "/",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck",
+ "timeoutSec": 5,
+ "unhealthyThreshold": 2
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_post.json b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_post.json
new file mode 100644
index 0000000..f2f7873
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/global_httpHealthChecks_post.json
@@ -0,0 +1,13 @@
+{
+ "id": "3903393118268087410",
+ "insertTime": "2013-09-03T02:19:54.629-07:00",
+ "kind": "compute#operation",
+ "name": "operation-global_httpHealthChecks_post",
+ "operationType": "insert",
+ "progress": 0,
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/operations/operation-global_httpHealthChecks_post",
+ "startTime": "2013-09-03T02:19:54.718-07:00",
+ "status": "PENDING",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/healthChecks/lchealthcheck",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_delete.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_delete.json b/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_delete.json
new file mode 100644
index 0000000..17cef7b
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_delete.json
@@ -0,0 +1,14 @@
+{
+ "id": "1159296103027566387",
+ "insertTime": "2013-09-02T22:18:02.509-07:00",
+ "kind": "compute#operation",
+ "name": "operation-global_httpHealthChecks_lchealthcheck_delete",
+ "operationType": "delete",
+ "progress": 100,
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/operations/operation-global_httpHealthChecks_lchealthcheck_delete",
+ "startTime": "2013-09-02T22:18:02.558-07:00",
+ "status": "DONE",
+ "targetId": "06860603312991823381",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/healthChecks/lchealthcheck",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_put.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_put.json b/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_put.json
new file mode 100644
index 0000000..b69e548
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_lchealthcheck_put.json
@@ -0,0 +1,15 @@
+{
+ "endTime": "2013-09-03T02:20:02.194-07:00",
+ "id": "6717642434182216609",
+ "insertTime": "2013-09-03T02:19:55.574-07:00",
+ "kind": "compute#operation",
+ "name": "operation-global_httpHealthChecks_lchealthcheck_put",
+ "operationType": "update",
+ "progress": 100,
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/operations/operation-global_httpHealthChecks_lchealthcheck_put",
+ "startTime": "2013-09-03T02:19:55.628-07:00",
+ "status": "DONE",
+ "targetId": "0742691415598204878",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/healthChecks/lchealthcheck",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_post.json b/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_post.json
new file mode 100644
index 0000000..534688e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_global_httpHealthChecks_post.json
@@ -0,0 +1,14 @@
+{
+ "id": "3903393118268087410",
+ "insertTime": "2013-09-03T02:19:54.629-07:00",
+ "kind": "compute#operation",
+ "name": "operation-global_httpHealthChecks_post",
+ "operationType": "insert",
+ "progress": 100,
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/operations/operation-global_httpHealthChecks_post",
+ "startTime": "2013-09-03T02:19:54.718-07:00",
+ "status": "DONE",
+ "targetId": "0742691415598204878",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/healthChecks/lchealthcheck",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_lcforwardingrule_delete.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_lcforwardingrule_delete.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_lcforwardingrule_delete.json
new file mode 100644
index 0000000..974c636
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_lcforwardingrule_delete.json
@@ -0,0 +1,16 @@
+{
+ "endTime": "2013-09-03T00:17:43.917-07:00",
+ "id": "09064254309855814339",
+ "insertTime": "2013-09-03T00:17:36.062-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_forwardingRules_lcforwardingrule_delete",
+ "operationType": "delete",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_forwardingRules_lcforwardingrule_delete",
+ "startTime": "2013-09-03T00:17:36.168-07:00",
+ "status": "DONE",
+ "targetId": "10901665092293158938",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/lcforwardingrule",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_post.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_post.json
new file mode 100644
index 0000000..4c83db1
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_forwardingRules_post.json
@@ -0,0 +1,16 @@
+{
+ "endTime": "2013-09-03T00:17:33.965-07:00",
+ "id": "0651769405845333112",
+ "insertTime": "2013-09-03T00:17:25.381-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_forwardingRules_post",
+ "operationType": "insert",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_forwardingRules_post",
+ "startTime": "2013-09-03T00:17:25.434-07:00",
+ "status": "DONE",
+ "targetId": "10901665092293158938",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/lcforwardingrule",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json
new file mode 100644
index 0000000..8f4a405
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json
@@ -0,0 +1,16 @@
+{
+ "endTime": "2013-09-03T01:28:49.271-07:00",
+ "id": "17341029456963557514",
+ "insertTime": "2013-09-03T01:28:40.774-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_addHealthCheck_post",
+ "operationType": "addHealthCheck",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_addHealthCheck_post",
+ "startTime": "2013-09-03T01:28:40.838-07:00",
+ "status": "DONE",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addInstance_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addInstance_post.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addInstance_post.json
new file mode 100644
index 0000000..ecac372
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_addInstance_post.json
@@ -0,0 +1,16 @@
+{
+ "endTime": "2013-09-03T01:29:07.021-07:00",
+ "id": "04072826501537092633",
+ "insertTime": "2013-09-03T01:29:03.082-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_addInstance_post",
+ "operationType": "addInstance",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_addInstance_post",
+ "startTime": "2013-09-03T01:29:03.145-07:00",
+ "status": "DONE",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_delete.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_delete.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_delete.json
new file mode 100644
index 0000000..a790311
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_delete.json
@@ -0,0 +1,15 @@
+{
+ "id": "13500662190763995965",
+ "insertTime": "2013-09-03T00:51:06.799-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_delete",
+ "operationType": "delete",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_delete",
+ "startTime": "2013-09-03T00:51:06.840-07:00",
+ "status": "DONE",
+ "targetId": "13598380121688918358",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json
new file mode 100644
index 0000000..6c4eeb5
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json
@@ -0,0 +1,16 @@
+{
+ "endTime": "2013-09-03T01:28:37.095-07:00",
+ "id": "14738174613993796821",
+ "insertTime": "2013-09-03T01:28:32.889-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post",
+ "operationType": "removeHealthCheck",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post",
+ "startTime": "2013-09-03T01:28:32.942-07:00",
+ "status": "DONE",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeInstance_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeInstance_post.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeInstance_post.json
new file mode 100644
index 0000000..cb24504
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_lctargetpool_removeInstance_post.json
@@ -0,0 +1,16 @@
+{
+ "endTime": "2013-09-03T01:28:59.247-07:00",
+ "id": "1815686149437875016",
+ "insertTime": "2013-09-03T01:28:53.049-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_removeInstance_post",
+ "operationType": "removeInstance",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_removeInstance_post",
+ "startTime": "2013-09-03T01:28:53.109-07:00",
+ "status": "DONE",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_post.json b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_post.json
new file mode 100644
index 0000000..0e4b666
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/operations_operation_regions_us-central1_targetPools_post.json
@@ -0,0 +1,15 @@
+{
+ "id": "7487852523793007955",
+ "insertTime": "2013-09-03T00:51:05.064-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_post",
+ "operationType": "insert",
+ "progress": 100,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_post",
+ "startTime": "2013-09-03T00:51:05.115-07:00",
+ "status": "DONE",
+ "targetId": "13598380121688918358",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions.json b/libcloud/test/compute/fixtures/gce/regions.json
new file mode 100644
index 0000000..edf3a37
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions.json
@@ -0,0 +1,45 @@
+{
+ "id": "projects/project_name/regions",
+ "items": [
+ {
+ "creationTimestamp": "2013-04-19T17:58:16.641-07:00",
+ "description": "europe-west1",
+ "id": "0827308347805275727",
+ "kind": "compute#region",
+ "name": "europe-west1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/europe-west1",
+ "status": "UP",
+ "zones": [
+ "https://www.googleapis.com/compute/v1beta15/zones/europe-west1-a",
+ "https://www.googleapis.com/compute/v1beta15/zones/europe-west1-b"
+ ]
+ },
+ {
+ "creationTimestamp": "2013-04-19T18:17:05.050-07:00",
+ "description": "us-central1",
+ "id": "06713580496607310378",
+ "kind": "compute#region",
+ "name": "us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "status": "UP",
+ "zones": [
+ "https://www.googleapis.com/compute/v1beta15/zones/us-central1-a",
+ "https://www.googleapis.com/compute/v1beta15/zones/us-central1-b"
+ ]
+ },
+ {
+ "creationTimestamp": "2013-04-19T18:19:05.482-07:00",
+ "description": "us-central2",
+ "id": "04157375529195793136",
+ "kind": "compute#region",
+ "name": "us-central2",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central2",
+ "status": "UP",
+ "zones": [
+ "https://www.googleapis.com/compute/v1beta15/zones/us-central2-a"
+ ]
+ }
+ ],
+ "kind": "compute#regionList",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules.json
new file mode 100644
index 0000000..fbc1b0e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules.json
@@ -0,0 +1,31 @@
+{
+ "id": "projects/project_name/regions/us-central1/forwardingRules",
+ "items": [
+ {
+ "IPAddress": "173.255.119.224",
+ "IPProtocol": "TCP",
+ "creationTimestamp": "2013-09-03T00:17:25.544-07:00",
+ "id": "10901665092293158938",
+ "kind": "compute#forwardingRule",
+ "name": "lcforwardingrule",
+ "portRange": "8000-8500",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/lcforwardingrule",
+ "target": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+ },
+ {
+ "IPAddress": "173.255.119.185",
+ "IPProtocol": "TCP",
+ "creationTimestamp": "2013-09-02T22:25:50.575-07:00",
+ "id": "15826316229163619337",
+ "kind": "compute#forwardingRule",
+ "name": "libcloud-lb-demo-lb",
+ "portRange": "80-80",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/libcloud-lb-demo-lb",
+ "target": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+ }
+ ],
+ "kind": "compute#forwardingRuleList",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule.json
new file mode 100644
index 0000000..d4c9051
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule.json
@@ -0,0 +1,12 @@
+{
+ "IPAddress": "173.255.119.224",
+ "IPProtocol": "TCP",
+ "creationTimestamp": "2013-09-03T00:17:25.544-07:00",
+ "id": "10901665092293158938",
+ "kind": "compute#forwardingRule",
+ "name": "lcforwardingrule",
+ "portRange": "8000-8500",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/lcforwardingrule",
+ "target": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule_delete.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule_delete.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule_delete.json
new file mode 100644
index 0000000..1c15638
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_lcforwardingrule_delete.json
@@ -0,0 +1,15 @@
+{
+ "id": "09064254309855814339",
+ "insertTime": "2013-09-03T00:17:36.062-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_forwardingRules_lcforwardingrule_delete",
+ "operationType": "delete",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_forwardingRules_lcforwardingrule_delete",
+ "startTime": "2013-09-03T00:17:36.168-07:00",
+ "status": "PENDING",
+ "targetId": "10901665092293158938",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/lcforwardingrule",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_libcloud-lb-demo-lb.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_libcloud-lb-demo-lb.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_libcloud-lb-demo-lb.json
new file mode 100644
index 0000000..99a310e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_libcloud-lb-demo-lb.json
@@ -0,0 +1,12 @@
+{
+ "IPAddress": "108.59.83.110",
+ "IPProtocol": "TCP",
+ "creationTimestamp": "2013-09-29T13:30:00.702-07:00",
+ "id": "1077550228014866104",
+ "kind": "compute#forwardingRule",
+ "name": "libcloud-lb-demo-lb",
+ "portRange": "80-80",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/libcloud-lb-demo-lb",
+ "target": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_post.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_post.json
new file mode 100644
index 0000000..1b08b75
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_forwardingRules_post.json
@@ -0,0 +1,14 @@
+{
+ "id": "0651769405845333112",
+ "insertTime": "2013-09-03T00:17:25.381-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_forwardingRules_post",
+ "operationType": "insert",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_forwardingRules_post",
+ "startTime": "2013-09-03T00:17:25.434-07:00",
+ "status": "PENDING",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/forwardingRules/lcforwardingrule",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools.json
new file mode 100644
index 0000000..331065b
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools.json
@@ -0,0 +1,38 @@
+{
+ "id": "projects/project_name/regions/us-central1/targetPools",
+ "items": [
+ {
+ "creationTimestamp": "2013-09-03T00:51:05.300-07:00",
+ "healthChecks": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck"
+ ],
+ "id": "13598380121688918358",
+ "instances": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-000",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-001"
+ ],
+ "kind": "compute#targetPool",
+ "name": "lctargetpool",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool"
+ },
+ {
+ "creationTimestamp": "2013-09-02T22:25:45.817-07:00",
+ "healthChecks": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck"
+ ],
+ "id": "16862638289615591831",
+ "instances": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-002",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-001",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-000"
+ ],
+ "kind": "compute#targetPool",
+ "name": "libcloud-lb-demo-lb-tp",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+ }
+ ],
+ "kind": "compute#targetPoolList",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool.json
new file mode 100644
index 0000000..81828f8
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool.json
@@ -0,0 +1,15 @@
+{
+ "creationTimestamp": "2013-09-03T00:51:05.300-07:00",
+ "healthChecks": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck"
+ ],
+ "id": "13598380121688918358",
+ "instances": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-000",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-001"
+ ],
+ "kind": "compute#targetPool",
+ "name": "lctargetpool",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json
new file mode 100644
index 0000000..7743b89
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addHealthCheck_post.json
@@ -0,0 +1,15 @@
+{
+ "id": "17341029456963557514",
+ "insertTime": "2013-09-03T01:28:40.774-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_addHealthCheck_post",
+ "operationType": "addHealthCheck",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_addHealthCheck_post",
+ "startTime": "2013-09-03T01:28:40.838-07:00",
+ "status": "PENDING",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addInstance_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addInstance_post.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addInstance_post.json
new file mode 100644
index 0000000..1af9354
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_addInstance_post.json
@@ -0,0 +1,15 @@
+{
+ "id": "04072826501537092633",
+ "insertTime": "2013-09-03T01:29:03.082-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_addInstance_post",
+ "operationType": "addInstance",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_addInstance_post",
+ "startTime": "2013-09-03T01:29:03.145-07:00",
+ "status": "PENDING",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_delete.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_delete.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_delete.json
new file mode 100644
index 0000000..196a1e0
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_delete.json
@@ -0,0 +1,15 @@
+{
+ "id": "13500662190763995965",
+ "insertTime": "2013-09-03T00:51:06.799-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_delete",
+ "operationType": "delete",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_delete",
+ "startTime": "2013-09-03T00:51:06.840-07:00",
+ "status": "PENDING",
+ "targetId": "13598380121688918358",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json
new file mode 100644
index 0000000..be21bbe
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post.json
@@ -0,0 +1,15 @@
+{
+ "id": "14738174613993796821",
+ "insertTime": "2013-09-03T01:28:32.889-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post",
+ "operationType": "removeHealthCheck",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_removeHealthCheck_post",
+ "startTime": "2013-09-03T01:28:32.942-07:00",
+ "status": "PENDING",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeInstance_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeInstance_post.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeInstance_post.json
new file mode 100644
index 0000000..435e2d2
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_lctargetpool_removeInstance_post.json
@@ -0,0 +1,15 @@
+{
+ "id": "1815686149437875016",
+ "insertTime": "2013-09-03T01:28:53.049-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_lctargetpool_removeInstance_post",
+ "operationType": "removeInstance",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_lctargetpool_removeInstance_post",
+ "startTime": "2013-09-03T01:28:53.109-07:00",
+ "status": "PENDING",
+ "targetId": "16862638289615591831",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_libcloud-lb-demo-lb-tp.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_libcloud-lb-demo-lb-tp.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_libcloud-lb-demo-lb-tp.json
new file mode 100644
index 0000000..47179b7
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_libcloud-lb-demo-lb-tp.json
@@ -0,0 +1,16 @@
+{
+ "creationTimestamp": "2013-09-02T22:25:45.817-07:00",
+ "healthChecks": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/libcloud-lb-demo-healthcheck"
+ ],
+ "id": "16862638289615591831",
+ "instances": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-002",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-001",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-000"
+ ],
+ "kind": "compute#targetPool",
+ "name": "libcloud-lb-demo-lb-tp",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_post.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_post.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_post.json
new file mode 100644
index 0000000..32f57cc
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_post.json
@@ -0,0 +1,14 @@
+{
+ "id": "7487852523793007955",
+ "insertTime": "2013-09-03T00:51:05.064-07:00",
+ "kind": "compute#operation",
+ "name": "operation-regions_us-central1_targetPools_post",
+ "operationType": "insert",
+ "progress": 0,
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/operations/operation-regions_us-central1_targetPools_post",
+ "startTime": "2013-09-03T00:51:05.115-07:00",
+ "status": "PENDING",
+ "targetLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/lctargetpool",
+ "user": "user@gserviceaccount.com"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_www-pool.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_www-pool.json b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_www-pool.json
new file mode 100644
index 0000000..797bf39
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/regions_us-central1_targetPools_www-pool.json
@@ -0,0 +1,17 @@
+{
+ "creationTimestamp": "2013-08-19T14:43:25.289-07:00",
+ "description": "",
+ "healthChecks": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/httpHealthChecks/basic-check"
+ ],
+ "id": "09965129111508633746",
+ "instances": [
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/www1",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/www2",
+ "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/www3"
+ ],
+ "kind": "compute#targetPool",
+ "name": "www-pool",
+ "region": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/regions/us-central1/targetPools/www-pool"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-000.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-000.json b/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-000.json
new file mode 100644
index 0000000..6a3e984
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-000.json
@@ -0,0 +1,52 @@
+{
+ "canIpForward": false,
+ "creationTimestamp": "2013-09-02T22:25:15.878-07:00",
+ "disks": [
+ {
+ "index": 0,
+ "kind": "compute#attachedDisk",
+ "mode": "READ_WRITE",
+ "type": "SCRATCH"
+ }
+ ],
+ "id": "16051209904934263688",
+ "image": "https://www.googleapis.com/compute/v1beta15/projects/debian-cloud/global/images/debian-7-wheezy-v20130723",
+ "kernel": "https://www.googleapis.com/compute/v1beta15/projects/google/global/kernels/gce-v20130603",
+ "kind": "compute#instance",
+ "machineType": "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/machineTypes/n1-standard-1",
+ "metadata": {
+ "fingerprint": "n9EGknQZPSA=",
+ "items": [
+ {
+ "key": "startup-script",
+ "value": "apt-get -y update && apt-get -y install apache2 && hostname > /var/www/index.html"
+ }
+ ],
+ "kind": "compute#metadata"
+ },
+ "name": "libcloud-lb-demo-www-000",
+ "networkInterfaces": [
+ {
+ "accessConfigs": [
+ {
+ "kind": "compute#accessConfig",
+ "name": "External NAT",
+ "natIP": "173.255.113.234",
+ "type": "ONE_TO_ONE_NAT"
+ }
+ ],
+ "name": "nic0",
+ "network": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/networks/default",
+ "networkIP": "10.240.138.154"
+ }
+ ],
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-000",
+ "status": "RUNNING",
+ "tags": {
+ "fingerprint": "XI0he92M8l8=",
+ "items": [
+ "libcloud-lb-demo-www"
+ ]
+ },
+ "zone": "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-001.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-001.json b/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-001.json
new file mode 100644
index 0000000..29d4b4b
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-001.json
@@ -0,0 +1,52 @@
+{
+ "canIpForward": false,
+ "creationTimestamp": "2013-09-02T22:25:16.253-07:00",
+ "disks": [
+ {
+ "index": 0,
+ "kind": "compute#attachedDisk",
+ "mode": "READ_WRITE",
+ "type": "SCRATCH"
+ }
+ ],
+ "id": "11204787063927654129",
+ "image": "https://www.googleapis.com/compute/v1beta15/projects/debian-cloud/global/images/debian-7-wheezy-v20130723",
+ "kernel": "https://www.googleapis.com/compute/v1beta15/projects/google/global/kernels/gce-v20130603",
+ "kind": "compute#instance",
+ "machineType": "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/machineTypes/n1-standard-1",
+ "metadata": {
+ "fingerprint": "n9EGknQZPSA=",
+ "items": [
+ {
+ "key": "startup-script",
+ "value": "apt-get -y update && apt-get -y install apache2 && hostname > /var/www/index.html"
+ }
+ ],
+ "kind": "compute#metadata"
+ },
+ "name": "libcloud-lb-demo-www-001",
+ "networkInterfaces": [
+ {
+ "accessConfigs": [
+ {
+ "kind": "compute#accessConfig",
+ "name": "External NAT",
+ "natIP": "173.255.114.210",
+ "type": "ONE_TO_ONE_NAT"
+ }
+ ],
+ "name": "nic0",
+ "network": "https://www.googleapis.com/compute/v1beta15/projects/project_name/global/networks/default",
+ "networkIP": "10.240.0.123"
+ }
+ ],
+ "selfLink": "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b/instances/libcloud-lb-demo-www-001",
+ "status": "RUNNING",
+ "tags": {
+ "fingerprint": "XI0he92M8l8=",
+ "items": [
+ "libcloud-lb-demo-www"
+ ]
+ },
+ "zone": "https://www.googleapis.com/compute/v1beta15/projects/project_name/zones/us-central1-b"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2115f9f6/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-002.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-002.json b/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-002.json
new file mode 100644
index 0000000..4800d57
--- /dev/null
+++ b/libcloud/test/compute/fixtures/gce/zones_us-central1-b_instances_libcloud-lb-demo-www-002.json
@@ -0,0 +1,13 @@
+{
+ "error": {
+ "code": 404,
+ "errors": [
+ {
+ "domain": "global",
+ "message": "The resource 'projects/project-name/zones/us-central1-b/instances/libcloud-lb-demo-www-002' was not found",
+ "reason": "notFound"
+ }
+ ],
+ "message": "The resource 'projects/project-name/zones/us-central1-b/instances/libcloud-lb-demo-www-002' was not found"
+ }
+}