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 2014/01/03 15:59:19 UTC
[07/44] git commit: Test updates for v1 plus additional changes: Add
snapshot support Add .get() to many locations to make the conversion from
json dictionary to libcloud objects more robust.
Test updates for v1 plus additional changes:
Add snapshot support
Add .get() to many locations to make the conversion from json dictionary to
libcloud objects more robust.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/2d3caa8c
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/2d3caa8c
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/2d3caa8c
Branch: refs/heads/trunk
Commit: 2d3caa8cf79aae4ed7fead824178eeac5fa9ba82
Parents: 0d47758
Author: Rick Wright <ri...@google.com>
Authored: Fri Dec 13 13:07:26 2013 -0800
Committer: Rick Wright <ri...@google.com>
Committed: Fri Dec 13 13:07:26 2013 -0800
----------------------------------------------------------------------
libcloud/compute/drivers/gce.py | 270 ++-
.../fixtures/gce/aggregated_addresses.json | 18 +-
.../compute/fixtures/gce/aggregated_disks.json | 115 +-
.../gce/aggregated_forwardingRules.json | 32 +-
.../fixtures/gce/aggregated_instances.json | 260 +--
.../fixtures/gce/aggregated_machineTypes.json | 1825 ++++++++++--------
.../fixtures/gce/aggregated_targetPools.json | 28 +-
.../test/compute/fixtures/gce/generic_disk.json | 13 +
.../compute/fixtures/gce/global_firewalls.json | 22 +-
.../gce/global_firewalls_lcfirewall.json | 4 +-
.../gce/global_firewalls_lcfirewall_delete.json | 4 +-
.../gce/global_firewalls_lcfirewall_put.json | 4 +-
.../fixtures/gce/global_firewalls_post.json | 4 +-
.../fixtures/gce/global_httpHealthChecks.json | 24 +-
.../global_httpHealthChecks_basic-check.json | 2 +-
.../global_httpHealthChecks_lchealthcheck.json | 2 +-
...l_httpHealthChecks_lchealthcheck_delete.json | 4 +-
...obal_httpHealthChecks_lchealthcheck_put.json | 4 +-
...althChecks_libcloud-lb-demo-healthcheck.json | 2 +-
.../gce/global_httpHealthChecks_post.json | 4 +-
.../compute/fixtures/gce/global_images.json | 10 +-
.../compute/fixtures/gce/global_networks.json | 8 +-
.../fixtures/gce/global_networks_default.json | 2 +-
.../fixtures/gce/global_networks_lcnetwork.json | 2 +-
.../gce/global_networks_lcnetwork_delete.json | 4 +-
...l_networks_libcloud-demo-europe-network.json | 2 +-
.../global_networks_libcloud-demo-network.json | 2 +-
.../fixtures/gce/global_networks_post.json | 4 +-
...tion_global_firewalls_lcfirewall_delete.json | 4 +-
...eration_global_firewalls_lcfirewall_put.json | 4 +-
...rations_operation_global_firewalls_post.json | 4 +-
...l_httpHealthChecks_lchealthcheck_delete.json | 4 +-
...obal_httpHealthChecks_lchealthcheck_put.json | 4 +-
..._operation_global_httpHealthChecks_post.json | 4 +-
...ration_global_networks_lcnetwork_delete.json | 4 +-
...erations_operation_global_networks_post.json | 4 +-
..._us-central1_addresses_lcaddress_delete.json | 6 +-
...tion_regions_us-central1_addresses_post.json | 6 +-
...forwardingRules_lcforwardingrule_delete.json | 6 +-
...egions_us-central1_forwardingRules_post.json | 6 +-
...tPools_lctargetpool_addHealthCheck_post.json | 6 +-
...rgetPools_lctargetpool_addInstance_post.json | 6 +-
...entral1_targetPools_lctargetpool_delete.json | 6 +-
...ols_lctargetpool_removeHealthCheck_post.json | 6 +-
...tPools_lctargetpool_removeInstance_post.json | 6 +-
...on_regions_us-central1_targetPools_post.json | 6 +-
...ion_zones_europe-west1-a_instances_post.json | 6 +-
...zones_us-central1-a_disks_lcdisk_delete.json | 6 +-
...peration_zones_us-central1-a_disks_post.json | 6 +-
...-central1-a_instances_lcnode-000_delete.json | 6 +-
...-central1-a_instances_lcnode-001_delete.json | 6 +-
...1-a_instances_node-name_attachDisk_post.json | 6 +-
...s-central1-a_instances_node-name_delete.json | 6 +-
...1-a_instances_node-name_detachDisk_post.json | 6 +-
...ntral1-a_instances_node-name_reset_post.json | 6 +-
...ral1-a_instances_node-name_setTags_post.json | 6 +-
...tion_zones_us-central1-a_instances_post.json | 6 +-
libcloud/test/compute/fixtures/gce/project.json | 2 +-
.../projects_debian-cloud_global_images.json | 172 +-
libcloud/test/compute/fixtures/gce/regions.json | 18 +-
.../gce/regions_us-central1_addresses.json | 10 +-
...regions_us-central1_addresses_lcaddress.json | 4 +-
..._us-central1_addresses_lcaddress_delete.json | 6 +-
.../gce/regions_us-central1_addresses_post.json | 6 +-
.../regions_us-central1_forwardingRules.json | 14 +-
...ntral1_forwardingRules_lcforwardingrule.json | 6 +-
...forwardingRules_lcforwardingrule_delete.json | 6 +-
...al1_forwardingRules_libcloud-lb-demo-lb.json | 6 +-
...egions_us-central1_forwardingRules_post.json | 6 +-
.../gce/regions_us-central1_targetPools.json | 24 +-
...ns_us-central1_targetPools_lctargetpool.json | 10 +-
...tPools_lctargetpool_addHealthCheck_post.json | 6 +-
...rgetPools_lctargetpool_addInstance_post.json | 6 +-
...entral1_targetPools_lctargetpool_delete.json | 6 +-
...ols_lctargetpool_removeHealthCheck_post.json | 6 +-
...tPools_lctargetpool_removeInstance_post.json | 6 +-
...ral1_targetPools_libcloud-lb-demo-lb-tp.json | 12 +-
.../regions_us-central1_targetPools_post.json | 6 +-
...egions_us-central1_targetPools_www-pool.json | 12 +-
libcloud/test/compute/fixtures/gce/zones.json | 35 +-
.../gce/zones_europe-west1-a_instances.json | 83 +-
.../zones_europe-west1-a_instances_post.json | 6 +-
...rope-west1-a_machineTypes_n1-standard-1.json | 2 +-
.../fixtures/gce/zones_us-central1-a.json | 4 +-
.../fixtures/gce/zones_us-central1-a_disks.json | 33 +-
.../gce/zones_us-central1-a_disks_lcdisk.json | 4 +-
...zones_us-central1-a_disks_lcdisk_delete.json | 6 +-
.../gce/zones_us-central1-a_disks_post.json | 6 +-
.../gce/zones_us-central1-a_instances.json | 213 +-
...ones_us-central1-a_instances_lcnode-000.json | 28 +-
...-central1-a_instances_lcnode-000_delete.json | 6 +-
...ones_us-central1-a_instances_lcnode-001.json | 26 +-
...-central1-a_instances_lcnode-001_delete.json | 6 +-
...zones_us-central1-a_instances_node-name.json | 26 +-
...1-a_instances_node-name_attachDisk_post.json | 6 +-
...s-central1-a_instances_node-name_delete.json | 8 +-
...1-a_instances_node-name_detachDisk_post.json | 6 +-
...ntral1-a_instances_node-name_reset_post.json | 6 +-
...ral1-a_instances_node-name_setTags_post.json | 6 +-
.../gce/zones_us-central1-a_instances_post.json | 6 +-
.../gce/zones_us-central1-a_machineTypes.json | 96 +-
...s-central1-a_machineTypes_n1-standard-1.json | 2 +-
...l1-b_instances_libcloud-lb-demo-www-000.json | 29 +-
...l1-b_instances_libcloud-lb-demo-www-001.json | 31 +-
libcloud/test/compute/test_gce.py | 93 +-
libcloud/test/loadbalancer/test_gce.py | 6 +-
106 files changed, 2252 insertions(+), 1710 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2d3caa8c/libcloud/compute/drivers/gce.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/gce.py b/libcloud/compute/drivers/gce.py
index 852b944..faa2905 100644
--- a/libcloud/compute/drivers/gce.py
+++ b/libcloud/compute/drivers/gce.py
@@ -24,9 +24,11 @@ import sys
from libcloud.common.google import GoogleResponse
from libcloud.common.google import GoogleBaseConnection
from libcloud.common.google import ResourceNotFoundError
+from libcloud.common.google import ResourceExistsError
from libcloud.compute.base import Node, NodeDriver, NodeImage, NodeLocation
-from libcloud.compute.base import NodeSize, StorageVolume, UuidMixin
+from libcloud.compute.base import NodeSize, StorageVolume, VolumeSnapshot
+from libcloud.compute.base import UuidMixin
from libcloud.compute.providers import Provider
from libcloud.compute.types import NodeState
@@ -292,6 +294,13 @@ class GCERegion(UuidMixin):
self.id, self.name, self.status)
+class GCESnapshot(VolumeSnapshot):
+ def __init__(self, id, name, size, status, driver, extra=None):
+ self.name = name
+ self.status = status
+ super(GCESnapshot, self).__init__(id, driver, size, extra)
+
+
class GCETargetPool(UuidMixin):
def __init__(self, id, name, region, healthchecks, nodes, driver,
extra=None):
@@ -953,6 +962,20 @@ class GCENodeDriver(NodeDriver):
list_sizes = [self._to_node_size(s) for s in response['items']]
return list_sizes
+ def ex_list_snapshots(self):
+ """
+ Return the list of disk snapshots in the project.
+
+ :return: A list of snapshot objects
+ :rtype: ``list`` of :class:`GCESnapshot`
+ """
+ list_snapshots = []
+ request = '/global/snapshots'
+ response = self.connection.request(request, method='GET').object
+ list_snapshots = [self._to_snapshot(s) for s in
+ response.get('items', [])]
+ return list_snapshots
+
def ex_list_targetpools(self, region=None):
"""
Return the list of target pools.
@@ -1310,7 +1333,7 @@ class GCENodeDriver(NodeDriver):
def create_node(self, name, size, image, location=None,
ex_network='default', ex_tags=None, ex_metadata=None,
- ex_boot_disk=None, use_existing_disk=False):
+ ex_boot_disk=None, use_existing_disk=True):
"""
Create a new node and return a node object for the node.
@@ -1374,7 +1397,7 @@ class GCENodeDriver(NodeDriver):
def ex_create_multiple_nodes(self, base_name, size, image, number,
location=None, ex_network='default',
ex_tags=None, ex_metadata=None,
- ignore_errors=True, use_existing_disk=False,
+ ignore_errors=True, use_existing_disk=True,
timeout=DEFAULT_TASK_COMPLETION_TIMEOUT):
"""
Create multiple nodes and return a list of Node objects.
@@ -1395,6 +1418,8 @@ class GCENodeDriver(NodeDriver):
:param image: The image to use to create the nodes.
:type image: ``str`` or :class:`NodeImage`
+ return self.ex_get_snapshot(name)
+
:param number: The number of nodes to create.
:type number: ``int``
@@ -1489,6 +1514,7 @@ class GCENodeDriver(NodeDriver):
e = self._catch_error(ignore_errors=ignore_errors)
error = e.value
code = e.code
+ response = {'status': 'DONE'}
if response['status'] == 'DONE':
status['disk_response'] = None
if error:
@@ -1517,6 +1543,7 @@ class GCENodeDriver(NodeDriver):
e = self._catch_error(ignore_errors=ignore_errors)
error = e.value
code = e.code
+ response = {'status': 'DONE'}
if response['status'] == 'DONE':
status['node_response'] = None
if error:
@@ -1607,8 +1634,8 @@ class GCENodeDriver(NodeDriver):
:keyword image: Image to create disk from.
:type image: :class:`NodeImage` or ``str`` or ``None``
- :keyword snapshot: Snapshot to create image from (needs full URI)
- :type snapshot: ``str``
+ :keyword snapshot: Snapshot to create image from
+ :type snapshot: :class:`GCESnapshot` or ``str`` or ``None``
:return: Tuple containg the request string, the data dictionary and
the URL parameters
@@ -1626,8 +1653,15 @@ class GCENodeDriver(NodeDriver):
volume_data['description'] = 'Image: %s' % (
image.extra['selfLink'])
if snapshot:
- volume_data['sourceSnapshot'] = snapshot
- volume_data['description'] = 'Snapshot: %s' % (snapshot)
+ # Check for full URI to not break backward-compatibility
+ if snapshot.startswith('https'):
+ snapshot_link = snapshot
+ else:
+ if not hasattr(snapshot, 'name'):
+ snapshot = self.ex_get_snapshot(snapshot)
+ snapshot_link = snapshot.extra['selfLink']
+ volume_data['sourceSnapshot'] = snapshot_link
+ volume_data['description'] = 'Snapshot: %s' % (snapshot_link)
location = location or self.zone
if not hasattr(location, 'name'):
location = self.ex_get_zone(location)
@@ -1636,7 +1670,7 @@ class GCENodeDriver(NodeDriver):
return request, volume_data, params
def create_volume(self, size, name, location=None, image=None,
- snapshot=None, use_existing=False):
+ snapshot=None, use_existing=True):
"""
Create a volume (disk).
@@ -1654,8 +1688,8 @@ class GCENodeDriver(NodeDriver):
:keyword image: Image to create disk from.
:type image: :class:`NodeImage` or ``str`` or ``None``
- :keyword snapshot: Snapshot to create image from (needs full URI)
- :type snapshot: ``str``
+ :keyword snapshot: Snapshot to create image from
+ :type snapshot: :class:`GCESnapshot` or ``str`` or ``None``
:keyword use_existing: If True and a disk with the given name already
exists, return an object for that disk instead
@@ -1666,20 +1700,37 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`StorageVolume`
"""
vol = None
- if use_existing:
- try:
- vol = self.ex_get_volume(name, location)
- except:
- pass
- if vol:
- return vol
request, volume_data, params = self._create_vol_req(
size, name, location, image, snapshot)
- self.connection.async_request(request, method='POST', data=volume_data,
- params=params)
+ try:
+ self.connection.async_request(request, method='POST',
+ data=volume_data, params=params)
+ except ResourceExistsError:
+ e = sys.exc_info()[1]
+ if not use_existing:
+ raise e
return self.ex_get_volume(name, location)
+ def create_volume_snapshot(self, volume, name):
+ """
+ Create a snapshot of the provided Volume.
+
+ :param volume: A StorageVolume object
+ :type volume: :class:`StorageVolume`
+
+ :return: A GCE Snapshot object
+ :rtype: :class:`GCESnapshot`
+ """
+ snapshot_data = {}
+ snapshot_data['name'] = name
+ request = '/zones/%s/disks/%s/createSnapshot' % (
+ volume.extra['zone'].name, volume.name)
+ self.connection.async_request(request, method='POST',
+ data=snapshot_data)
+
+ return self.ex_get_snapshot(name)
+
def ex_update_healthcheck(self, healthcheck):
"""
Update a health check with new values.
@@ -2093,22 +2144,31 @@ class GCENodeDriver(NodeDriver):
self.connection.async_request(request, method='DELETE')
return True
- def destroy_node(self, node):
+ def destroy_node(self, node, destroy_boot_disk=False):
"""
Destroy a node.
:param node: Node object to destroy
:type node: :class:`Node`
+ :keyword destroy_boot_disk: If true, also destroy the node's
+ boot disk. (Note that this keyword is not
+ accessible from the node's .destroy()
+ method.)
+ :type destroy_boot_disk: ``bool``
+
:return: True if successful
:rtype: ``bool``
"""
request = '/zones/%s/instances/%s' % (node.extra['zone'].name,
node.name)
self.connection.async_request(request, method='DELETE')
+ if destroy_boot_disk and node.extra['boot_disk']:
+ node.extra['boot_disk'].destroy()
return True
def ex_destroy_multiple_nodes(self, nodelist, ignore_errors=True,
+ destroy_boot_disk=False,
timeout=DEFAULT_TASK_COMPLETION_TIMEOUT):
"""
Destroy multiple nodes at once.
@@ -2120,6 +2180,10 @@ class GCENodeDriver(NodeDriver):
more nodes fails to be destroyed.
:type ignore_errors: ``bool``
+ :keyword destroy_boot_disk: If true, also destroy the nodes' boot
+ disks.
+ :type destroy_boot_disk: ``bool``
+
:keyword timeout: Number of seconds to wait for all nodes to be
destroyed.
:type timeout: ``int``
@@ -2194,8 +2258,21 @@ class GCENodeDriver(NodeDriver):
"""
request = '/zones/%s/disks/%s' % (volume.extra['zone'].name,
volume.name)
- self.connection.async_request(request,
- method='DELETE')
+ self.connection.async_request(request, method='DELETE')
+ return True
+
+ def destroy_volume_snapshot(self, snapshot):
+ """
+ Destroy a snapshot.
+
+ :param snapshot: Snapshot object to destroy
+ :type snapshot: :class:`GCESnapshot`
+
+ :return: True if successfull
+ :rtype: ``bool``
+ """
+ request = '/global/snapshots/%s' % (snapshot.name)
+ self.connection.async_request(request, method='DELETE')
return True
def ex_get_address(self, name, region=None):
@@ -2356,6 +2433,20 @@ class GCENodeDriver(NodeDriver):
response = self.connection.request(request, method='GET').object
return self._to_node_size(response)
+ def ex_get_snapshot(self, name):
+ """
+ Return a Snapshot object based on snapshot name.
+
+ :param name: The name of the snapshot
+ :type name: ``str``
+
+ :return: A GCESnapshot object for the snapshot
+ :rtype: :class:`GCESnapshot`
+ """
+ request = '/global/snapshots/%s' % (name)
+ response = self.connection.request(request, method='GET').object
+ return self._to_snapshot(response)
+
def ex_get_volume(self, name, zone=None):
"""
Return a Volume object based on a volume name and optional zone.
@@ -2460,9 +2551,9 @@ class GCENodeDriver(NodeDriver):
region = self.ex_get_region(address['region'])
- extra['selfLink'] = address['selfLink']
- extra['status'] = address['status']
- extra['creationTimestamp'] = address['creationTimestamp']
+ extra['selfLink'] = address.get('selfLink')
+ extra['status'] = address.get('status')
+ extra['creationTimestamp'] = address.get('creationTimestamp')
return GCEAddress(id=address['id'], name=address['name'],
address=address['address'],
@@ -2479,18 +2570,18 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCEHealthCheck`
"""
extra = {}
- extra['selfLink'] = healthcheck['selfLink']
- extra['creationTimestamp'] = healthcheck['creationTimestamp']
+ extra['selfLink'] = healthcheck.get('selfLink')
+ extra['creationTimestamp'] = healthcheck.get('creationTimestamp')
extra['description'] = healthcheck.get('description')
extra['host'] = healthcheck.get('host')
return GCEHealthCheck(
id=healthcheck['id'], name=healthcheck['name'],
- path=healthcheck['requestPath'], port=healthcheck['port'],
- interval=healthcheck['checkIntervalSec'],
- timeout=healthcheck['timeoutSec'],
- unhealthy_threshold=healthcheck['unhealthyThreshold'],
- healthy_threshold=healthcheck['healthyThreshold'],
+ path=healthcheck.get('requestPath'), port=healthcheck.get('port'),
+ interval=healthcheck.get('checkIntervalSec'),
+ timeout=healthcheck.get('timeoutSec'),
+ unhealthy_threshold=healthcheck.get('unhealthyThreshold'),
+ healthy_threshold=healthcheck.get('healthyThreshold'),
driver=self, extra=extra)
def _to_firewall(self, firewall):
@@ -2504,8 +2595,8 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCEFirewall`
"""
extra = {}
- extra['selfLink'] = firewall['selfLink']
- extra['creationTimestamp'] = firewall['creationTimestamp']
+ extra['selfLink'] = firewall.get('selfLink')
+ extra['creationTimestamp'] = firewall.get('creationTimestamp')
extra['description'] = firewall.get('description')
extra['network_name'] = self._get_components_from_path(
firewall['network'])['name']
@@ -2515,7 +2606,7 @@ class GCENodeDriver(NodeDriver):
source_tags = firewall.get('sourceTags')
return GCEFirewall(id=firewall['id'], name=firewall['name'],
- allowed=firewall['allowed'], network=network,
+ allowed=firewall.get('allowed'), network=network,
source_ranges=source_ranges,
source_tags=source_tags,
driver=self, extra=extra)
@@ -2531,10 +2622,9 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCEForwardingRule`
"""
extra = {}
- # Use .get to work around a current API bug.
extra['selfLink'] = forwarding_rule.get('selfLink')
- extra['portRange'] = forwarding_rule['portRange']
- extra['creationTimestamp'] = forwarding_rule['creationTimestamp']
+ extra['portRange'] = forwarding_rule.get('portRange')
+ extra['creationTimestamp'] = forwarding_rule.get('creationTimestamp')
extra['description'] = forwarding_rule.get('description')
region = self.ex_get_region(forwarding_rule['region'])
@@ -2543,8 +2633,8 @@ class GCENodeDriver(NodeDriver):
return GCEForwardingRule(id=forwarding_rule['id'],
name=forwarding_rule['name'], region=region,
- address=forwarding_rule['IPAddress'],
- protocol=forwarding_rule['IPProtocol'],
+ address=forwarding_rule.get('IPAddress'),
+ protocol=forwarding_rule.get('IPProtocol'),
targetpool=targetpool,
driver=self, extra=extra)
@@ -2560,13 +2650,13 @@ class GCENodeDriver(NodeDriver):
"""
extra = {}
- extra['selfLink'] = network['selfLink']
- extra['gatewayIPv4'] = network['gatewayIPv4']
+ extra['selfLink'] = network.get('selfLink')
+ extra['gatewayIPv4'] = network.get('gatewayIPv4')
extra['description'] = network.get('description')
- extra['creationTimestamp'] = network['creationTimestamp']
+ extra['creationTimestamp'] = network.get('creationTimestamp')
return GCENetwork(id=network['id'], name=network['name'],
- cidr=network['IPv4Range'],
+ cidr=network.get('IPv4Range'),
driver=self, extra=extra)
def _to_node_image(self, image):
@@ -2582,8 +2672,8 @@ class GCENodeDriver(NodeDriver):
extra = {}
extra['preferredKernel'] = image.get('preferredKernel', None)
extra['description'] = image.get('description', None)
- extra['creationTimestamp'] = image['creationTimestamp']
- extra['selfLink'] = image['selfLink']
+ extra['creationTimestamp'] = image.get('creationTimestamp')
+ extra['selfLink'] = image.get('selfLink')
return NodeImage(id=image['id'], name=image['name'], driver=self,
extra=extra)
@@ -2615,29 +2705,35 @@ class GCENodeDriver(NodeDriver):
private_ips = []
extra = {}
- extra['status'] = node['status']
+ extra['status'] = node.get('status')
extra['description'] = node.get('description')
extra['zone'] = self.ex_get_zone(node['zone'])
extra['image'] = node.get('image')
- extra['machineType'] = node['machineType']
- extra['disks'] = node['disks']
- extra['networkInterfaces'] = node['networkInterfaces']
+ extra['machineType'] = node.get('machineType')
+ extra['disks'] = node.get('disks', [])
+ extra['networkInterfaces'] = node.get('networkInterfaces')
extra['id'] = node['id']
- extra['selfLink'] = node['selfLink']
+ extra['selfLink'] = node.get('selfLink')
extra['name'] = node['name']
- extra['metadata'] = node['metadata']
+ extra['metadata'] = node.get('metadata')
extra['tags_fingerprint'] = node['tags']['fingerprint']
+ extra['boot_disk'] = None
+ for disk in extra['disks']:
+ if disk.get('boot') and disk.get('type') == 'PERSISTENT':
+ bd = self._get_components_from_path(disk['source'])
+ extra['boot_disk'] = self.ex_get_volume(bd['name'], bd['zone'])
+
if 'items' in node['tags']:
tags = node['tags']['items']
else:
tags = []
extra['tags'] = tags
- for network_interface in node['networkInterfaces']:
- private_ips.append(network_interface['networkIP'])
- for access_config in network_interface['accessConfigs']:
- public_ips.append(access_config['natIP'])
+ for network_interface in node.get('networkInterfaces', []):
+ private_ips.append(network_interface.get('networkIP'))
+ for access_config in network_interface.get('accessConfigs'):
+ public_ips.append(access_config.get('natIP'))
# For the node attributes, use just machine and image names, not full
# paths. Full paths are available in the "extra" dict.
@@ -2663,19 +2759,19 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCENodeSize`
"""
extra = {}
- extra['selfLink'] = machine_type['selfLink']
+ extra['selfLink'] = machine_type.get('selfLink')
extra['zone'] = self.ex_get_zone(machine_type['zone'])
- extra['description'] = machine_type['description']
- extra['guestCpus'] = machine_type['guestCpus']
- extra['creationTimestamp'] = machine_type['creationTimestamp']
+ extra['description'] = machine_type.get('description')
+ extra['guestCpus'] = machine_type.get('guestCpus')
+ extra['creationTimestamp'] = machine_type.get('creationTimestamp')
try:
price = self._get_size_price(size_id=machine_type['name'])
except KeyError:
price = None
return GCENodeSize(id=machine_type['id'], name=machine_type['name'],
- ram=machine_type['memoryMb'],
- disk=machine_type['imageSpaceGb'],
+ ram=machine_type.get('memoryMb'),
+ disk=machine_type.get('imageSpaceGb'),
bandwidth=0, price=price, driver=self, extra=extra)
def _to_project(self, project):
@@ -2689,13 +2785,13 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCEProject`
"""
extra = {}
- extra['selfLink'] = project['selfLink']
- extra['creationTimestamp'] = project['creationTimestamp']
- extra['description'] = project['description']
+ extra['selfLink'] = project.get('selfLink')
+ extra['creationTimestamp'] = project.get('creationTimestamp')
+ extra['description'] = project.get('description')
metadata = project['commonInstanceMetadata'].get('items')
return GCEProject(id=project['id'], name=project['name'],
- metadata=metadata, quotas=project['quotas'],
+ metadata=metadata, quotas=project.get('quotas'),
driver=self, extra=extra)
def _to_region(self, region):
@@ -2709,9 +2805,9 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCERegion`
"""
extra = {}
- extra['selfLink'] = region['selfLink']
- extra['creationTimestamp'] = region['creationTimestamp']
- extra['description'] = region['description']
+ extra['selfLink'] = region.get('selfLink')
+ extra['creationTimestamp'] = region.get('creationTimestamp')
+ extra['description'] = region.get('description')
quotas = region.get('quotas')
zones = [self.ex_get_zone(z) for z in region['zones']]
@@ -2721,10 +2817,30 @@ class GCENodeDriver(NodeDriver):
deprecated = region.get('deprecated')
return GCERegion(id=region['id'], name=region['name'],
- status=region['status'], zones=zones,
+ status=region.get('status'), zones=zones,
quotas=quotas, deprecated=deprecated,
driver=self, extra=extra)
+ def _to_snapshot(self, snapshot):
+ """
+ Return a Snapshot object from the json-response dictionary.
+
+ :param snapshot: The dictionary describing the snapshot
+ :type snapshot: ``dict``
+
+ :return: Snapshot object
+ :rtype: :class:`VolumeSnapshot`
+ """
+ extra = {}
+ extra['selfLink'] = snapshot.get('selfLink')
+ extra['creationTimestamp'] = snapshot.get('creationTimestamp')
+ extra['sourceDisk'] = snapshot.get('sourceDisk')
+
+ return GCESnapshot(id=snapshot['id'], name=snapshot['name'],
+ size=snapshot['diskSizeGb'],
+ status=snapshot.get('status'), driver=self,
+ extra=extra)
+
def _to_storage_volume(self, volume):
"""
Return a Volume object from the json-response dictionary.
@@ -2736,10 +2852,10 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`StorageVolume`
"""
extra = {}
- extra['selfLink'] = volume['selfLink']
+ extra['selfLink'] = volume.get('selfLink')
extra['zone'] = self.ex_get_zone(volume['zone'])
- extra['status'] = volume['status']
- extra['creationTimestamp'] = volume['creationTimestamp']
+ extra['status'] = volume.get('status')
+ extra['creationTimestamp'] = volume.get('creationTimestamp')
extra['description'] = volume.get('description')
return StorageVolume(id=volume['id'], name=volume['name'],
@@ -2756,7 +2872,7 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCETargetPool`
"""
extra = {}
- extra['selfLink'] = targetpool['selfLink']
+ extra['selfLink'] = targetpool.get('selfLink')
extra['description'] = targetpool.get('description')
region = self.ex_get_region(targetpool['region'])
healthcheck_list = [self.ex_get_healthcheck(h.split('/')[-1]) for h
@@ -2788,9 +2904,9 @@ class GCENodeDriver(NodeDriver):
:rtype: :class:`GCEZone`
"""
extra = {}
- extra['selfLink'] = zone['selfLink']
- extra['creationTimestamp'] = zone['creationTimestamp']
- extra['description'] = zone['description']
+ extra['selfLink'] = zone.get('selfLink')
+ extra['creationTimestamp'] = zone.get('creationTimestamp')
+ extra['description'] = zone.get('description')
deprecated = zone.get('deprecated')
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2d3caa8c/libcloud/test/compute/fixtures/gce/aggregated_addresses.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/aggregated_addresses.json b/libcloud/test/compute/fixtures/gce/aggregated_addresses.json
index eee3552..4bab3a2 100644
--- a/libcloud/test/compute/fixtures/gce/aggregated_addresses.json
+++ b/libcloud/test/compute/fixtures/gce/aggregated_addresses.json
@@ -10,8 +10,8 @@
"id": "10955781597205896134",
"kind": "compute#address",
"name": "libcloud-demo-europe-address",
- "region": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/europe-west1",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/europe-west1/addresses/libcloud-demo-europe-address",
+ "region": "https://www.googleapis.com/compute/v1/projects/project_name/regions/europe-west1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/regions/europe-west1/addresses/libcloud-demo-europe-address",
"status": "RESERVED"
}
]
@@ -25,8 +25,8 @@
"id": "01531551729918243104",
"kind": "compute#address",
"name": "lcaddress",
- "region": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1/addresses/lcaddress",
+ "region": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/addresses/lcaddress",
"status": "RESERVED"
},
{
@@ -36,8 +36,8 @@
"id": "17634862894218443422",
"kind": "compute#address",
"name": "libcloud-demo-address",
- "region": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1/addresses/libcloud-demo-address",
+ "region": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/addresses/libcloud-demo-address",
"status": "RESERVED"
},
{
@@ -47,8 +47,8 @@
"id": "11879548153827627972",
"kind": "compute#address",
"name": "testaddress",
- "region": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1/addresses/testaddress",
+ "region": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/addresses/testaddress",
"status": "RESERVED"
}
]
@@ -67,5 +67,5 @@
}
},
"kind": "compute#addressAggregatedList",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/aggregated/addresses"
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/aggregated/addresses"
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2d3caa8c/libcloud/test/compute/fixtures/gce/aggregated_disks.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/aggregated_disks.json b/libcloud/test/compute/fixtures/gce/aggregated_disks.json
index 00d9112..9133041 100644
--- a/libcloud/test/compute/fixtures/gce/aggregated_disks.json
+++ b/libcloud/test/compute/fixtures/gce/aggregated_disks.json
@@ -4,25 +4,53 @@
"zones/europe-west1-a": {
"disks": [
{
- "creationTimestamp": "2013-11-01T14:45:38.422-07:00",
- "description": "Image: https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20131014",
- "id": "4294778976520895166",
+ "creationTimestamp": "2013-12-13T10:43:33.753-08:00",
+ "description": "Image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "id": "0819226106922408217",
"kind": "compute#disk",
"name": "libcloud-demo-europe-boot-disk",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-boot-disk",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-boot-disk",
"sizeGb": "10",
+ "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "sourceImageId": "17312518942796567788",
"status": "READY",
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a"
},
{
- "creationTimestamp": "2013-11-01T14:45:27.063-07:00",
- "id": "2488119868186709482",
+ "creationTimestamp": "2013-12-13T10:43:20.420-08:00",
+ "id": "30789070506648158",
"kind": "compute#disk",
"name": "libcloud-demo-europe-attach-disk",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-attach-disk",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-attach-disk",
"sizeGb": "1",
"status": "READY",
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a"
+ },
+ {
+ "creationTimestamp": "2013-12-13T10:43:07.390-08:00",
+ "description": "Image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "id": "01221310665639400697",
+ "kind": "compute#disk",
+ "name": "libcloud-demo-europe-np-node",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-np-node",
+ "sizeGb": "10",
+ "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "sourceImageId": "17312518942796567788",
+ "status": "READY",
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a"
+ },
+ {
+ "creationTimestamp": "2013-12-13T10:43:53.598-08:00",
+ "description": "Image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "id": "17495188440080825940",
+ "kind": "compute#disk",
+ "name": "libcloud-demo-europe-multiple-nodes-000",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-multiple-nodes-000",
+ "sizeGb": "10",
+ "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "sourceImageId": "17312518942796567788",
+ "status": "READY",
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a"
}
]
},
@@ -58,39 +86,80 @@
"id": "8658241308250794904",
"kind": "compute#disk",
"name": "test1",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central1-b/disks/test1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central1-b/disks/test1",
"sizeGb": "10",
"status": "READY",
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central1-b"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central1-b"
}
]
},
"zones/us-central2-a": {
"disks": [
{
- "creationTimestamp": "2013-11-01T14:43:36.763-07:00",
- "id": "01690270691106097961",
+ "creationTimestamp": "2013-12-13T10:41:59.430-08:00",
+ "description": "Image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "id": "3371304879167251249",
+ "kind": "compute#disk",
+ "name": "libcloud-demo-boot-disk",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-boot-disk",
+ "sizeGb": "10",
+ "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "sourceImageId": "17312518942796567788",
+ "status": "READY",
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
+ },
+ {
+ "creationTimestamp": "2013-12-13T10:42:15.355-08:00",
+ "description": "Image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "id": "12650345960824309663",
+ "kind": "compute#disk",
+ "name": "libcloud-demo-multiple-nodes-000",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-multiple-nodes-000",
+ "sizeGb": "10",
+ "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "sourceImageId": "17312518942796567788",
+ "status": "READY",
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
+ },
+ {
+ "creationTimestamp": "2013-12-13T10:41:52.533-08:00",
+ "id": "01867312924613359214",
"kind": "compute#disk",
"name": "libcloud-demo-attach-disk",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/disks/libcloud-demo-attach-disk",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-attach-disk",
"sizeGb": "1",
"status": "READY",
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
},
{
- "creationTimestamp": "2013-11-01T14:43:46.039-07:00",
- "description": "Image: https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20131014",
- "id": "01805374214887472027",
+ "creationTimestamp": "2013-12-13T10:42:15.949-08:00",
+ "description": "Image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "id": "12498700959701905851",
"kind": "compute#disk",
- "name": "libcloud-demo-boot-disk",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/disks/libcloud-demo-boot-disk",
+ "name": "libcloud-demo-multiple-nodes-001",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-multiple-nodes-001",
+ "sizeGb": "10",
+ "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "sourceImageId": "17312518942796567788",
+ "status": "READY",
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
+ },
+ {
+ "creationTimestamp": "2013-12-13T10:41:44.063-08:00",
+ "description": "Image: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "id": "345757781195247006",
+ "kind": "compute#disk",
+ "name": "libcloud-demo-np-node",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-np-node",
"sizeGb": "10",
+ "sourceImage": "https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-7-wheezy-v20131120",
+ "sourceImageId": "17312518942796567788",
"status": "READY",
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
}
]
}
},
"kind": "compute#diskAggregatedList",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/aggregated/disks"
-}
\ No newline at end of file
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/aggregated/disks"
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2d3caa8c/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
index fd3827b..06a1a0e 100644
--- a/libcloud/test/compute/fixtures/gce/aggregated_forwardingRules.json
+++ b/libcloud/test/compute/fixtures/gce/aggregated_forwardingRules.json
@@ -16,26 +16,28 @@
"regions/us-central1": {
"forwardingRules": [
{
- "IPAddress": "173.255.119.224",
+ "IPAddress": "108.59.86.60",
"IPProtocol": "TCP",
- "creationTimestamp": "2013-09-03T00:17:25.544-07:00",
- "id": "10901665092293158938",
+ "creationTimestamp": "2013-12-13T10:51:47.602-08:00",
+ "id": "0401221837226610637",
"kind": "compute#forwardingRule",
- "name": "lcforwardingrule",
- "portRange": "8000-8500",
- "region": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1",
- "target": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+ "name": "libcloud-lb-demo-lb",
+ "portRange": "80-80",
+ "region": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/forwardingRules/libcloud-lb-demo-lb",
+ "target": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
},
{
- "IPAddress": "173.255.119.185",
+ "IPAddress": "173.255.114.35",
"IPProtocol": "TCP",
- "creationTimestamp": "2013-09-02T22:25:50.575-07:00",
- "id": "15826316229163619337",
+ "creationTimestamp": "2013-12-13T10:52:57.170-08:00",
+ "id": "06342111469679701315",
"kind": "compute#forwardingRule",
- "name": "libcloud-lb-demo-lb",
- "portRange": "80-80",
- "region": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1",
- "target": "https://www.googleapis.com/compute/v1beta16/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
+ "name": "lcforwardingrule",
+ "portRange": "8000-8500",
+ "region": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1",
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/forwardingRules/lcforwardingrule",
+ "target": "https://www.googleapis.com/compute/v1/projects/project_name/regions/us-central1/targetPools/libcloud-lb-demo-lb-tp"
}
]
},
@@ -53,5 +55,5 @@
}
},
"kind": "compute#forwardingRuleAggregatedList",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/aggregated/forwardingRules"
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/aggregated/forwardingRules"
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2d3caa8c/libcloud/test/compute/fixtures/gce/aggregated_instances.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/gce/aggregated_instances.json b/libcloud/test/compute/fixtures/gce/aggregated_instances.json
index 056cbb2..3624fd0 100644
--- a/libcloud/test/compute/fixtures/gce/aggregated_instances.json
+++ b/libcloud/test/compute/fixtures/gce/aggregated_instances.json
@@ -5,123 +5,132 @@
"instances": [
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:45:44.186-07:00",
+ "creationTimestamp": "2013-12-13T10:43:58.782-08:00",
"disks": [
{
"boot": true,
- "deviceName": "libcloud-demo-europe-boot-disk",
+ "deviceName": "libcloud-demo-europe-multiple-nodes-000",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "source": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-boot-disk",
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-multiple-nodes-000",
"type": "PERSISTENT"
}
],
- "id": "8051468456709756069",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-no-conn-track-v20130813",
+ "id": "10947706194464948790",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
},
- "name": "libcloud-demo-europe-persist-node",
+ "name": "libcloud-demo-europe-multiple-nodes-000",
"networkInterfaces": [
{
"accessConfigs": [
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "8.34.211.23",
+ "natIP": "192.158.28.252",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.188.108"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.122.85"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/instances/libcloud-demo-europe-persist-node",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/instances/libcloud-demo-europe-multiple-nodes-000",
"status": "RUNNING",
"tags": {
- "fingerprint": "EbZdwVRtKyg=",
+ "fingerprint": "W7t6ZyTyIrc=",
"items": [
- "libcloud",
- "newtag"
+ "libcloud"
]
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a"
},
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:46:02.933-07:00",
+ "creationTimestamp": "2013-12-13T10:43:37.267-08:00",
"disks": [
{
+ "boot": true,
+ "deviceName": "libcloud-demo-europe-boot-disk",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "type": "SCRATCH"
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-boot-disk",
+ "type": "PERSISTENT"
}
],
- "id": "04184465693678804555",
- "image": "https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20131014",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-no-conn-track-v20130813",
+ "id": "517678477070693411",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
},
- "name": "libcloud-demo-europe-multiple-nodes-000",
+ "name": "libcloud-demo-europe-persist-node",
"networkInterfaces": [
{
"accessConfigs": [
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "8.34.211.48",
+ "natIP": "23.251.128.32",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.141.92"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.240.204"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/instances/libcloud-demo-europe-multiple-nodes-000",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/instances/libcloud-demo-europe-persist-node",
"status": "RUNNING",
"tags": {
- "fingerprint": "W7t6ZyTyIrc=",
+ "fingerprint": "EbZdwVRtKyg=",
"items": [
- "libcloud"
+ "libcloud",
+ "newtag"
]
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a"
},
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:44:57.127-07:00",
+ "creationTimestamp": "2013-12-13T10:43:12.706-08:00",
"disks": [
{
+ "boot": true,
+ "deviceName": "libcloud-demo-europe-np-node",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "type": "SCRATCH"
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-np-node",
+ "type": "PERSISTENT"
},
{
"deviceName": "libcloud-demo-europe-attach-disk",
"index": 1,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "source": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-attach-disk",
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/disks/libcloud-demo-europe-attach-disk",
"type": "PERSISTENT"
}
],
- "id": "4450078356274958103",
- "image": "https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20131014",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-no-conn-track-v20130813",
+ "id": "3421745795082776097",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
@@ -133,16 +142,20 @@
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "8.34.208.52",
+ "natIP": "23.251.128.10",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.48.164"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.221.125"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a/instances/libcloud-demo-europe-np-node",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a/instances/libcloud-demo-europe-np-node",
"status": "RUNNING",
"tags": {
"fingerprint": "W7t6ZyTyIrc=",
@@ -150,7 +163,7 @@
"libcloud"
]
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/europe-west1-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/europe-west1-a"
}
]
},
@@ -170,20 +183,21 @@
"instances": [
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:47:29.154-07:00",
+ "creationTimestamp": "2013-12-13T10:45:23.351-08:00",
"disks": [
{
+ "boot": true,
+ "deviceName": "persistent-disk-0",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "type": "SCRATCH"
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central1-a/disks/node-name",
+ "type": "PERSISTENT"
}
],
- "id": "10348912619288589086",
- "image": "https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20130617",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-v20130603",
+ "id": "4006034190819017667",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central1-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central1-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
@@ -195,21 +209,25 @@
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "8.35.197.91",
+ "natIP": "23.236.58.15",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.123.204"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.72.75"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central1-a/instances/node-name",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central1-a/instances/node-name",
"status": "RUNNING",
"tags": {
"fingerprint": "42WmSpB8rSM="
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central1-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central1-a"
}
]
},
@@ -229,115 +247,132 @@
"instances": [
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:44:03.801-07:00",
+ "creationTimestamp": "2013-12-13T10:42:03.180-08:00",
"disks": [
{
+ "boot": true,
+ "deviceName": "libcloud-demo-boot-disk",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "type": "SCRATCH"
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-boot-disk",
+ "type": "PERSISTENT"
}
],
- "id": "8843444782291050664",
- "image": "https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20131014",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-no-conn-track-v20130813",
+ "id": "2184470466384636715",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
},
- "name": "libcloud-demo-multiple-nodes-001",
+ "name": "libcloud-demo-persist-node",
"networkInterfaces": [
{
"accessConfigs": [
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "173.255.121.180",
+ "natIP": "173.255.120.70",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.167.120"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.235.148"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/instances/libcloud-demo-multiple-nodes-001",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/instances/libcloud-demo-persist-node",
"status": "RUNNING",
"tags": {
- "fingerprint": "W7t6ZyTyIrc=",
+ "fingerprint": "EbZdwVRtKyg=",
"items": [
- "libcloud"
+ "libcloud",
+ "newtag"
]
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
},
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:43:49.457-07:00",
+ "creationTimestamp": "2013-12-13T10:41:47.059-08:00",
"disks": [
{
"boot": true,
- "deviceName": "libcloud-demo-boot-disk",
+ "deviceName": "libcloud-demo-np-node",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "source": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/disks/libcloud-demo-boot-disk",
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-np-node",
+ "type": "PERSISTENT"
+ },
+ {
+ "deviceName": "libcloud-demo-attach-disk",
+ "index": 1,
+ "kind": "compute#attachedDisk",
+ "mode": "READ_WRITE",
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-attach-disk",
"type": "PERSISTENT"
}
],
- "id": "2278280472037226745",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-no-conn-track-v20130813",
+ "id": "18059053700460342373",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
},
- "name": "libcloud-demo-persist-node",
+ "name": "libcloud-demo-np-node",
"networkInterfaces": [
{
"accessConfigs": [
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "173.255.121.109",
+ "natIP": "173.255.120.58",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.102.153"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.45.206"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/instances/libcloud-demo-persist-node",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/instances/libcloud-demo-np-node",
"status": "RUNNING",
"tags": {
- "fingerprint": "EbZdwVRtKyg=",
+ "fingerprint": "W7t6ZyTyIrc=",
"items": [
- "libcloud",
- "newtag"
+ "libcloud"
]
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
},
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:44:03.256-07:00",
+ "creationTimestamp": "2013-12-13T10:42:24.841-08:00",
"disks": [
{
+ "boot": true,
+ "deviceName": "libcloud-demo-multiple-nodes-000",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "type": "SCRATCH"
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-multiple-nodes-000",
+ "type": "PERSISTENT"
}
],
- "id": "0994482023759804723",
- "image": "https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20131014",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-no-conn-track-v20130813",
+ "id": "4196532528539285480",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
@@ -349,16 +384,20 @@
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "173.255.121.133",
+ "natIP": "173.255.120.211",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.164.41"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.218.251"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/instances/libcloud-demo-multiple-nodes-000",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/instances/libcloud-demo-multiple-nodes-000",
"status": "RUNNING",
"tags": {
"fingerprint": "W7t6ZyTyIrc=",
@@ -366,53 +405,50 @@
"libcloud"
]
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
},
{
"canIpForward": false,
- "creationTimestamp": "2013-11-01T14:43:15.485-07:00",
+ "creationTimestamp": "2013-12-13T10:42:19.041-08:00",
"disks": [
{
+ "boot": true,
+ "deviceName": "libcloud-demo-multiple-nodes-001",
"index": 0,
"kind": "compute#attachedDisk",
"mode": "READ_WRITE",
- "type": "SCRATCH"
- },
- {
- "deviceName": "libcloud-demo-attach-disk",
- "index": 1,
- "kind": "compute#attachedDisk",
- "mode": "READ_WRITE",
- "source": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/disks/libcloud-demo-attach-disk",
+ "source": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/disks/libcloud-demo-multiple-nodes-001",
"type": "PERSISTENT"
}
],
- "id": "08480381647283539833",
- "image": "https://www.googleapis.com/compute/v1beta16/projects/debian-cloud/global/images/debian-7-wheezy-v20131014",
- "kernel": "https://www.googleapis.com/compute/v1beta16/projects/google/global/kernels/gce-no-conn-track-v20130813",
+ "id": "1066146046261788296",
"kind": "compute#instance",
- "machineType": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
+ "machineType": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/machineTypes/n1-standard-1",
"metadata": {
"fingerprint": "42WmSpB8rSM=",
"kind": "compute#metadata"
},
- "name": "libcloud-demo-np-node",
+ "name": "libcloud-demo-multiple-nodes-001",
"networkInterfaces": [
{
"accessConfigs": [
{
"kind": "compute#accessConfig",
"name": "External NAT",
- "natIP": "173.255.121.95",
+ "natIP": "173.255.120.207",
"type": "ONE_TO_ONE_NAT"
}
],
"name": "nic0",
- "network": "https://www.googleapis.com/compute/v1beta16/projects/project_name/global/networks/default",
- "networkIP": "10.240.37.226"
+ "network": "https://www.googleapis.com/compute/v1/projects/project_name/global/networks/default",
+ "networkIP": "10.240.24.29"
}
],
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a/instances/libcloud-demo-np-node",
+ "scheduling": {
+ "automaticRestart": true,
+ "onHostMaintenance": "MIGRATE"
+ },
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a/instances/libcloud-demo-multiple-nodes-001",
"status": "RUNNING",
"tags": {
"fingerprint": "W7t6ZyTyIrc=",
@@ -420,11 +456,11 @@
"libcloud"
]
},
- "zone": "https://www.googleapis.com/compute/v1beta16/projects/project_name/zones/us-central2-a"
+ "zone": "https://www.googleapis.com/compute/v1/projects/project_name/zones/us-central2-a"
}
]
}
},
"kind": "compute#instanceAggregatedList",
- "selfLink": "https://www.googleapis.com/compute/v1beta16/projects/project_name/aggregated/instances"
+ "selfLink": "https://www.googleapis.com/compute/v1/projects/project_name/aggregated/instances"
}
\ No newline at end of file