You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2017/04/10 22:16:42 UTC
[2/3] libcloud git commit: Merge branch 'github-1023' into trunk
Closes #1023
Merge branch 'github-1023' into trunk
Closes #1023
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/c3dde041
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/c3dde041
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/c3dde041
Branch: refs/heads/trunk
Commit: c3dde041a5648cf5f4138561e75443758f292d25
Parents: 9f4d0a2 0e73f77
Author: Anthony Shaw <an...@apache.org>
Authored: Tue Apr 11 08:07:49 2017 +1000
Committer: Anthony Shaw <an...@apache.org>
Committed: Tue Apr 11 08:07:49 2017 +1000
----------------------------------------------------------------------
libcloud/compute/drivers/ec2.py | 226 +++++++++++++++++++
.../ec2/describe_import_snapshot_tasks.xml | 18 ++
.../describe_import_snapshot_tasks_active.xml | 17 ++
.../compute/fixtures/ec2/import_snapshot.xml | 16 ++
libcloud/test/compute/test_ec2.py | 41 ++++
5 files changed, 318 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c3dde041/libcloud/compute/drivers/ec2.py
----------------------------------------------------------------------
diff --cc libcloud/compute/drivers/ec2.py
index 31b8b8e,461248c..5177327
--- a/libcloud/compute/drivers/ec2.py
+++ b/libcloud/compute/drivers/ec2.py
@@@ -6799,27 -6859,69 +6962,90 @@@ class BaseEC2NodeDriver(NodeDriver)
% (idx, k, key)] = str(value)
return params
+ def _get_billing_product_params(self, billing_products):
+ """
+ Return a list of dictionaries with valid param for billing product.
+
+ :param billing_product: List of billing code values(str)
+ :type billing product: ``list``
+
+ :return: Dictionary representation of the billing product codes
+ :rtype: ``dict``
+ """
+
+ if not isinstance(billing_products, (list, tuple)):
+ raise AttributeError(
+ 'billing_products not list or tuple')
+
+ params = {}
+
+ for idx, v in enumerate(billing_products):
+ idx += 1 # We want 1-based indexes
+ params['BillingProduct.%d' % (idx)] = str(v)
+
+ def _get_disk_container_params(self, disk_container):
+ """
+ Return a list of dictionaries with query parameters for
+ a valid disk container.
+
+ :param disk_container: List of dictionaries with
+ disk_container details
+ :type disk_container: ``list`` or ``dict``
+
+ :return: Dictionary representation of the disk_container
+ :rtype: ``dict``
+ """
+
+ if not isinstance(disk_container, (list, tuple)):
+ raise AttributeError('disk_container not list or tuple')
+
+ params = {}
+
+ for idx, content in enumerate(disk_container):
+ idx += 1 # We want 1-based indexes
+ if not isinstance(content, dict):
+ raise AttributeError(
+ 'content %s in disk_container not a dict' % content)
+
+ for k, v in content.items():
+ if not isinstance(v, dict):
+ params['DiskContainer.%s' % (k)] = str(v)
+
+ else:
+ for key, value in v.items():
+ params['DiskContainer.%s.%s'
+ % (k, key)] = str(value)
+
+ return params
+
+ def _get_client_data_params(self, client_data):
+ """
+ Return a dictionary with query parameters for
+ a valid client data.
+
+ :param client_data: List of dictionaries with the disk
+ upload details
+ :type client_data: ``dict``
+
+ :return: Dictionary representation of the client data
+ :rtype: ``dict``
+ """
+
+ if not isinstance(client_data, (list, tuple)):
+ raise AttributeError('client_data not list or tuple')
+
+ params = {}
+
+ for idx, content in enumerate(client_data):
+ idx += 1 # We want 1-based indexes
+ if not isinstance(content, dict):
+ raise AttributeError(
+ 'content %s in client_data'
+ 'not a dict' % content)
+
+ for k, v in content.items():
+ params['ClientData.%s' % (k)] = str(v)
+
return params
def _get_common_security_group_params(self, group_id, protocol,
http://git-wip-us.apache.org/repos/asf/libcloud/blob/c3dde041/libcloud/test/compute/test_ec2.py
----------------------------------------------------------------------
diff --cc libcloud/test/compute/test_ec2.py
index 3e761a5,6b942e3..4d34e47
--- a/libcloud/test/compute/test_ec2.py
+++ b/libcloud/test/compute/test_ec2.py
@@@ -564,11 -559,38 +564,40 @@@ class EC2Tests(LibcloudTestCase, TestCa
description='My Image',
architecture='x86_64',
block_device_mapping=mapping,
- ena_support=True)
+ ena_support=True,
+ billing_products=['ab-5dh78019'],
+ sriov_net_support='simple')
self.assertEqual(image.id, 'ami-57c2fb3e')
+ def test_ex_import_snapshot(self):
+ disk_container = [{'Description': 'Dummy import snapshot task',
+ 'Format': 'raw',
+ 'UserBucket': {'S3Bucket': 'dummy-bucket', 'S3Key': 'dummy-key'}}]
+
+ snap = self.driver.ex_import_snapshot(disk_container=disk_container)
+ self.assertEqual(snap.id, 'snap-0ea83e8a87e138f39')
+
+ def test_wait_for_import_snapshot_completion(self):
+ snap = self.driver._wait_for_import_snapshot_completion(
+ import_task_id='import-snap-fhdysyq6')
+ self.assertEqual(snap.id, 'snap-0ea83e8a87e138f39')
+
+ def test_timeout_wait_for_import_snapshot_completion(self):
+ import_task_id = 'import-snap-fhdysyq6'
+ EC2MockHttp.type = 'timeout'
+ with self.assertRaises(Exception) as context:
+ self.driver._wait_for_import_snapshot_completion(
+ import_task_id=import_task_id, timeout=0.01, interval=0.001)
+ self.assertEqual('Timeout while waiting for import task Id %s'
+ % import_task_id, str(context.exception))
+
+ def test_ex_describe_import_snapshot_tasks(self):
+ snap = self.driver.ex_describe_import_snapshot_tasks(
+ import_task_id='import-snap-fh7y6i6w<')
+
+ self.assertEqual(snap.snapshotId, 'snap-0ea83e8a87e138f39')
+ self.assertEqual(snap.status, 'completed')
+
def test_ex_list_availability_zones(self):
availability_zones = self.driver.ex_list_availability_zones()
availability_zone = availability_zones[0]