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 2015/12/09 11:19:26 UTC

[08/11] libcloud git commit: Added support for reconfiguring a live node

Added support for reconfiguring a live node

Signed-off-by: Anthony Shaw <an...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/41c02f51
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/41c02f51
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/41c02f51

Branch: refs/heads/trunk
Commit: 41c02f5109a31bd98ab80729d8e3d6a1a02476c6
Parents: a543be0
Author: Anthony Shaw <an...@gmail.com>
Authored: Tue Dec 8 21:14:13 2015 +1100
Committer: Anthony Shaw <an...@gmail.com>
Committed: Wed Dec 9 21:19:14 2015 +1100

----------------------------------------------------------------------
 libcloud/compute/drivers/dimensiondata.py       | 40 ++++++++++++++++++++
 ...bc_8dabe5a7d0e4_server_reconfigureServer.xml |  5 +++
 libcloud/test/compute/test_dimensiondata.py     | 15 ++++++++
 3 files changed, 60 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/41c02f51/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py
index 1221f71..de8384c 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -1312,6 +1312,46 @@ class DimensionDataNodeDriver(NodeDriver):
         response_code = findtext(result, 'result', GENERAL_NS)
         return response_code in ['IN_PROGRESS', 'SUCCESS']
 
+    def ex_reconfigure_node(self, node, memory_gb, cpu_count, cores_per_socket,
+                            cpu_performance):
+        """
+        Reconfigure the virtual hardware specification of a node
+
+        :param  node: The server to change
+        :type   node: :class:`Node`
+
+        :param  memory_gb: The amount of memory in GB (optional)
+        :type   memory_gb: ``int``
+
+        :param  cpu_count: The number of CPU (optional)
+        :type   cpu_count: ``int``
+
+        :param  cores_per_socket: Number of CPU cores per socket (optional)
+        :type   cores_per_socket: ``int``
+
+        :param  cpu_performance: CPU Performance type (optional)
+        :type   cpu_performance: ``str``
+
+        :rtype: ``bool``
+        """
+        update = ET.Element('reconfigureServer', {'xmlns': TYPES_URN})
+        update.set('id', node.id)
+        if memory_gb is not None:
+            ET.SubElement(update, 'memoryGb').text = str(memory_gb)
+        if cpu_count is not None:
+            ET.SubElement(update, 'cpuCount').text = str(cpu_count)
+        if cpu_performance is not None:
+            ET.SubElement(update, 'cpuSpeed').text = cpu_performance
+        if cores_per_socket is not None:
+            ET.SubElement(update, 'coresPerSocket').text = \
+                str(cores_per_socket)
+        result = self.connection.request_with_orgId_api_2(
+            'server/reconfigureServer',
+            method='POST',
+            data=ET.tostring(update)).object
+        response_code = findtext(result, 'responseCode', TYPES_URN)
+        return response_code in ['IN_PROGRESS', 'OK']
+
     def ex_clone_node_to_image(self, node, image_name, image_description=None):
         """
         Clone a server into a customer image.

http://git-wip-us.apache.org/repos/asf/libcloud/blob/41c02f51/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_reconfigureServer.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_reconfigureServer.xml b/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_reconfigureServer.xml
new file mode 100644
index 0000000..e28e8d7
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_reconfigureServer.xml
@@ -0,0 +1,5 @@
+<response xmlns="urn:didata.com:api:cloud:types" requestId="na9/2015-1130T12:07:27.838-05:00/1e22a049-d772-4c39-943c-5c773a7ac9ae">
+    <operation>RECONFIGURE_SERVER</operation>
+    <responseCode>OK</responseCode>
+    <message>Request to reconfigure Server 'Production Server' has been accepted and is being processed.</message>
+</response>

http://git-wip-us.apache.org/repos/asf/libcloud/blob/41c02f51/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata.py b/libcloud/test/compute/test_dimensiondata.py
index f8f3f44..6f06a0e 100644
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@ -471,6 +471,11 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
         result = self.driver.ex_update_node(node, 'my new name', 'a description', 2, 4048)
         self.assertTrue(result)
 
+    def test_ex_reconfigure_node(self):
+        node = self.driver.list_nodes()[0]
+        result = self.driver.ex_reconfigure_node(node, 4, 4, 1,'HIGHPERFORMANCE')
+        self.assertTrue(result)
+    
 
 class InvalidRequestError(Exception):
     def __init__(self, tag):
@@ -947,5 +952,15 @@ class DimensionDataMockHttp(MockHttp):
             'caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_image_customerImage.xml')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    def _caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_reconfigureServer(self, method, url, body, headers):
+        request = ET.fromstring(body)
+        if request.tag != "{urn:didata.com:api:cloud:types}reconfigureServer":
+            raise InvalidRequestError(request.tag)
+        body = self.fixtures.load(
+            'caas_2_1_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_server_reconfigureServer.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+
+
 if __name__ == '__main__':
     sys.exit(unittest.main())