Merge branch 'equinix-update' of https://github.com/dimgal1/libcloud into dimgal1-equinix-update
diff --git a/libcloud/compute/drivers/equinixmetal.py b/libcloud/compute/drivers/equinixmetal.py
index 2dc93fa..b14e54a 100644
--- a/libcloud/compute/drivers/equinixmetal.py
+++ b/libcloud/compute/drivers/equinixmetal.py
@@ -208,7 +208,12 @@
result = yield from future
retval.extend(result)
return retval""" % resource_type, glob, loc)
- loop = asyncio.get_event_loop()
+ try:
+ loop = asyncio.get_event_loop()
+ except RuntimeError:
+ asyncio.set_event_loop(asyncio.new_event_loop())
+ loop = asyncio.get_event_loop()
+
return loop.run_until_complete(loc['_list_async'](loc['self']))
def ex_list_nodes_for_project(self, ex_project_id, include='plan', page=1,
@@ -246,7 +251,7 @@
def create_node(self, name, size, image, location,
ex_project_id=None, ip_addresses=[], cloud_init=None,
- **kwargs):
+ disk=None, disk_size=0, **kwargs):
"""
Create a node.
@@ -281,10 +286,10 @@
error_message = data.object.get('error_message', message)
raise ValueError('Failed to create node: %s' % (error_message))
node = self._to_node(data=data.object)
- if kwargs.get('disk'):
- self.attach_volume(node, kwargs.get('disk'))
- if kwargs.get('disk_size'):
- volume = self.create_volume(size=kwargs.get('disk_size'),
+ if disk:
+ self.attach_volume(node, disk)
+ if disk_size:
+ volume = self.create_volume(size=disk_size,
location=location)
self.attach_volume(node, volume)
return node
@@ -433,7 +438,11 @@
return node
def _to_image(self, data):
- extra = {'distro': data['distro'], 'version': data['version']}
+ extra = {
+ 'distro': data['distro'],
+ 'version': data['version'],
+ 'supported_sizes': data.get('provisionable_on', [])
+ }
return NodeImage(id=data['slug'], name=data['name'], extra=extra,
driver=self)
@@ -443,22 +452,31 @@
driver=self, extra=extra)
def _to_size(self, data):
- cpus = data['specs']['cpus'][0].get('count')
+ try:
+ cpus = data['specs']['cpus'][0].get('count')
+ except KeyError:
+ cpus = None
+ regions = [region.get('href').replace('/metal/v1/facilities/', '')
+ for region in data.get('available_in', [])]
extra = {'description': data['description'], 'line': data['line'],
- 'cpus': cpus}
-
- ram = data['specs']['memory']['total']
- disk = 0
- for disks in data['specs']['drives']:
- disk_size = disks['size'].replace('GB', '')
- if 'TB' in disk_size:
- disk_size = float(disks['size'].replace('TB', '')) * 1000
- disk += disks['count'] * int(disk_size)
+ 'cpus': cpus, 'regions': regions}
+ try:
+ ram = int(data['specs']['memory']['total'].replace('GB', '')) * 1024 # noqa
+ except KeyError:
+ ram = None
+ disk = None
+ if data['specs'].get('drives', ''):
+ disk = 0
+ for disks in data['specs']['drives']:
+ disk_size = disks['size'].replace('GB', '')
+ if 'TB' in disk_size:
+ disk_size = float(disks['size'].replace('TB', '')) * 1000
+ disk += disks['count'] * int(disk_size)
name = "%s - %s RAM" % (data.get('name'), ram)
price = data['pricing'].get('hour')
return NodeSize(id=data['slug'], name=name,
- ram=int(ram.replace('GB', '')) * 1024, disk=disk,
- bandwidth=0, price=price, extra=extra, driver=self)
+ ram=ram, disk=disk, bandwidth=0,
+ price=price, extra=extra, driver=self)
def _to_key_pairs(self, data):
extra = {'label': data['label'],
diff --git a/libcloud/test/compute/test_equinixmetal.py b/libcloud/test/compute/test_equinixmetal.py
index 42d87b7..98979a7 100644
--- a/libcloud/test/compute/test_equinixmetal.py
+++ b/libcloud/test/compute/test_equinixmetal.py
@@ -61,7 +61,7 @@
self.assertEqual(node.extra['billing_cycle'], 'hourly')
self.assertEqual(node.extra['locked'], False)
self.assertEqual(node.size.id, 'baremetal_1')
- self.assertEqual(node.size.name, 'Type 1 - 16GB RAM')
+ self.assertEqual(node.size.name, 'Type 1 - 16384 RAM')
self.assertEqual(node.size.ram, 16384)
self.assertEqual(node.size.disk, 240)
self.assertEqual(node.size.price, 0.4)