Author: tomaz
Date: Mon Jul 11 19:39:05 2011
New Revision: 1145304

URL: http://svn.apache.org/viewvc?rev=1145304&view=rev
Log:
Add the following new extension methods to the Rackspace compute driver:
- ex_resize
- ex_confirm_resize
- ex_revert_resize

Modified:
    libcloud/trunk/libcloud/compute/drivers/rackspace.py
    libcloud/trunk/test/compute/test_rackspace.py

Modified: libcloud/trunk/libcloud/compute/drivers/rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/rackspace.py?rev=1145304&r1=1145303&r2=1145304&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/rackspace.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/rackspace.py Mon Jul 11 19:39:05 
2011
@@ -272,6 +272,41 @@ class RackspaceNodeDriver(NodeDriver):
                                        data=ET.tostring(server_elm))
         return self._to_node(resp.object)
 
+    def ex_resize(self, node, image):
+        elm = ET.Element(
+            'resize',
+            {'xmlns': NAMESPACE,
+             'imageId': str(image.id),
+            }
+        )
+
+        resp = self.connection.request("/servers/%s/action" % (node.id),
+                                       method='POST',
+                                       data=ET.tostring(elm))
+        return resp.status == 202
+
+    def ex_confirm_resize(self, node):
+        elm = ET.Element(
+            'confirmResize',
+            {'xmlns': NAMESPACE}
+        )
+
+        resp = self.connection.request("/servers/%s/action" % (node.id),
+                                       method='POST',
+                                       data=ET.tostring(elm))
+        return resp.status == 204
+
+    def ex_revert_resize(self, node):
+        elm = ET.Element(
+            'revertResize',
+            {'xmlns': NAMESPACE}
+        )
+
+        resp = self.connection.request("/servers/%s/action" % (node.id),
+                                       method='POST',
+                                       data=ET.tostring(elm))
+        return resp.status == 204
+
     def ex_rebuild(self, node_id, image_id):
         # @TODO: Remove those ifs in 0.6
         if isinstance(node_id, Node):

Modified: libcloud/trunk/test/compute/test_rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_rackspace.py?rev=1145304&r1=1145303&r2=1145304&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_rackspace.py (original)
+++ libcloud/trunk/test/compute/test_rackspace.py Mon Jul 11 19:39:05 2011
@@ -212,6 +212,23 @@ class RackspaceTests(unittest.TestCase, 
         ret = self.driver.ex_unshare_ip('3445', '67.23.21.133')
         self.assertEquals(True, ret)
 
+    def test_ex_resize(self):
+        node = Node(id=444222, name=None, state=None, public_ip=None,
+                    private_ip=None, driver=self.driver)
+        image = NodeImage(id=11, name='Ubuntu 8.10 (intrepid)',
+                          driver=self.driver)
+        self.assertTrue(self.driver.ex_resize(node=node, image=image))
+
+    def test_ex_confirm_resize(self):
+        node = Node(id=444222, name=None, state=None, public_ip=None,
+                    private_ip=None, driver=self.driver)
+        self.assertTrue(self.driver.ex_confirm_resize(node=node))
+
+    def test_ex_revert_resize(self):
+        node = Node(id=444222, name=None, state=None, public_ip=None,
+                    private_ip=None, driver=self.driver)
+        self.assertTrue(self.driver.ex_revert_resize(node=node))
+
 
 class RackspaceMockHttp(MockHttpTestCase):
 
@@ -319,6 +336,17 @@ class RackspaceMockHttp(MockHttpTestCase
     def _v1_0_slug_servers_3445_ips_public_67_23_21_133(self, method, url, 
body, headers):
         return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])
 
+    def _v1_0_slug_servers_444222_action(self, method, url, body, headers):
+        if body.find('resize') != -1:
+            # test_ex_resize_server
+            return (httplib.ACCEPTED, "", headers, 
httplib.responses[httplib.NO_CONTENT])
+        elif body.find('confirmResize') != -1:
+            # test_ex_confirm_resize
+            return (httplib.NO_CONTENT, "", headers, 
httplib.responses[httplib.NO_CONTENT])
+        elif body.find('revertResize') != -1:
+            # test_ex_revert_resize
+            return (httplib.NO_CONTENT, "", headers, 
httplib.responses[httplib.NO_CONTENT])
+
 
 class OpenStackResponseTestCase(unittest.TestCase):
     XML = """<?xml version="1.0" encoding="UTF-8"?><root/>"""


Reply via email to