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 2016/04/16 19:39:43 UTC
[02/11] libcloud git commit: Changed add/remove disk for
dimensiondata driver to use new API
Changed add/remove disk for dimensiondata driver to use new API
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/fce3074f
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/fce3074f
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/fce3074f
Branch: refs/heads/ex_connection_class_kwargs_regression_fix
Commit: fce3074f29e936b06c09248ea26e30c8805202f6
Parents: 8185276
Author: anthony-shaw <an...@apache.org>
Authored: Fri Apr 15 15:59:56 2016 +1000
Committer: anthony-shaw <an...@apache.org>
Committed: Sat Apr 16 15:35:19 2016 +1000
----------------------------------------------------------------------
libcloud/compute/drivers/dimensiondata.py | 55 ++++++++++++++++----
.../fixtures/dimensiondata/server_addDisk.xml | 9 ++++
.../dimensiondata/server_removeDisk.xml | 6 +++
libcloud/test/compute/test_dimensiondata.py | 13 ++++-
4 files changed, 71 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/fce3074f/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py
index 29009db..1b9695f 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -1674,7 +1674,8 @@ class DimensionDataNodeDriver(NodeDriver):
response_code = findtext(result, 'responseCode', TYPES_URN)
return response_code in ['IN_PROGRESS', 'OK']
- def ex_add_storage_to_node(self, node, amount, speed='STANDARD'):
+ def ex_add_storage_to_node(self, node, amount,
+ speed='STANDARD', scsi_id=None):
"""
Add storage to the node
@@ -1687,13 +1688,25 @@ class DimensionDataNodeDriver(NodeDriver):
:param speed: The disk speed type
:type speed: ``str``
+ :param scsi_id: The target SCSI ID (optional)
+ :type scsi_id: ``int``
+
:rtype: ``bool``
"""
- result = self.connection.request_with_orgId_api_1(
- 'server/%s?addLocalStorage&amount=%s&speed=%s' %
- (node.id, amount, speed)).object
- response_code = findtext(result, 'result', GENERAL_NS)
- return response_code in ['IN_PROGRESS', 'SUCCESS']
+ update_node = ET.Element('addDisk',
+ {'xmlns': TYPES_URN})
+ update_node.set('id', node.id)
+ ET.SubElement(update_node, 'sizeGb').text = str(amount)
+ ET.SubElement(update_node, 'speed').text = speed.upper()
+ if scsi_id is not None:
+ ET.SubElement(update_node, 'scsiId').text = str(scsi_id)
+
+ result = self.connection.request_with_orgId_api_2(
+ 'server/addDisk',
+ method='POST',
+ data=ET.tostring(update_node)).object
+ response_code = findtext(result, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
def ex_remove_storage_from_node(self, node, disk_id):
"""
@@ -1707,11 +1720,31 @@ class DimensionDataNodeDriver(NodeDriver):
:rtype: ``bool``
"""
- result = self.connection.request_with_orgId_api_1(
- 'server/%s/disk/%s?delete' %
- (node.id, disk_id)).object
- response_code = findtext(result, 'result', GENERAL_NS)
- return response_code in ['IN_PROGRESS', 'SUCCESS']
+ disk = [disk for disk in node.extra['disks']
+ if disk.scsi_id == disk_id][0]
+ return self.ex_remove_storage(disk.id)
+
+ def ex_remove_storage(self, disk_id):
+ """
+ Remove storage from a node
+
+ :param node: The server to add storage to
+ :type node: :class:`Node`
+
+ :param disk_id: The ID of the disk to remove
+ :type disk_id: ``str``
+
+ :rtype: ``bool``
+ """
+ update_node = ET.Element('removeDisk',
+ {'xmlns': TYPES_URN})
+ update_node.set('id', disk_id)
+ result = self.connection.request_with_orgId_api_2(
+ 'server/removeDisk',
+ method='POST',
+ data=ET.tostring(update_node)).object
+ response_code = findtext(result, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
def ex_change_storage_speed(self, node, disk_id, speed):
"""
http://git-wip-us.apache.org/repos/asf/libcloud/blob/fce3074f/libcloud/test/compute/fixtures/dimensiondata/server_addDisk.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/server_addDisk.xml b/libcloud/test/compute/fixtures/dimensiondata/server_addDisk.xml
new file mode 100644
index 0000000..4e49bd5
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/server_addDisk.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<response requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107 © 2016 Dimension Data Cloud Solutions 260 9d52fe57d0ad" xmlns="urn:didata.com:api:cloud:types">
+ <operation>ADD_DISK</operation>
+ <responseCode>IN_PROGRESS</responseCode>
+ <message>The request to add a 20 GB Standard Speed Disk on Server 'SERVER-1' has been accepted and is being processed.</message>
+ <info name="diskId" value="9e6b496d-5261-4542-91aa-b50c7f569c54" />
+ <info name="scsiId" value="4" />
+ <info name="speed" value="STANDARD" />
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/fce3074f/libcloud/test/compute/fixtures/dimensiondata/server_removeDisk.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/server_removeDisk.xml b/libcloud/test/compute/fixtures/dimensiondata/server_removeDisk.xml
new file mode 100644
index 0000000..8b2d17f
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/server_removeDisk.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<response requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-91079d52fe57d0ad" xmlns="urn:didata.com:api:cloud:types">
+ <operation>REMOVE_DISK</operation>
+ <responseCode>IN_PROGRESS</responseCode>
+ <message>Request to Remove disk '540c4d86-4d84-11e4-a91c-0030487e0302' from Server 'Server 1' has been accepted and is being processed.</message>
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/fce3074f/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata.py b/libcloud/test/compute/test_dimensiondata.py
index 2402cb8..721b37e 100644
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@ -798,7 +798,7 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
def test_ex_remove_storage_from_node(self):
node = self.driver.list_nodes()[0]
- result = self.driver.ex_remove_storage_from_node(node, 1)
+ result = self.driver.ex_remove_storage_from_node(node, 0)
self.assertTrue(result)
def test_ex_change_storage_speed(self):
@@ -1733,5 +1733,16 @@ class DimensionDataMockHttp(MockHttp):
'server_cleanServer.xml')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+ def _caas_2_2_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_addDisk(self, method, url, body, headers):
+ body = self.fixtures.load(
+ 'server_addDisk.xml')
+ return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+ def _caas_2_2_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_removeDisk(self, method, url, body, headers):
+ body = self.fixtures.load(
+ 'server_removeDisk.xml')
+ return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+
if __name__ == '__main__':
sys.exit(unittest.main())