Author: tomaz
Date: Tue Jun 21 09:55:42 2011
New Revision: 1137923

URL: http://svn.apache.org/viewvc?rev=1137923&view=rev
Log:
Fix handling of the ex_shared_ip_group argument in the Rackspace driver
create_node() method.
Also add test case for it.

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=1137923&r1=1137922&r2=1137923&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/rackspace.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/rackspace.py Tue Jun 21 09:55:42 
2011
@@ -18,6 +18,7 @@ Rackspace driver
 import os
 
 import base64
+import warnings
 
 from xml.etree import ElementTree as ET
 from xml.parsers.expat import ExpatError
@@ -232,13 +233,26 @@ class RackspaceNodeDriver(NodeDriver):
         name = kwargs['name']
         image = kwargs['image']
         size = kwargs['size']
-        server_elm = ET.Element(
-            'server',
-            {'xmlns': NAMESPACE,
+
+        attributes = {'xmlns': NAMESPACE,
              'name': name,
              'imageId': str(image.id),
-             'flavorId': str(size.id)}
-        )
+             'flavorId': str(size.id)
+        }
+
+        if 'ex_shared_ip_group' in kwargs:
+            # Deprecate this. Be explicit and call the variable
+            # ex_shared_ip_group_id since user needs to pass in the id, not the
+            # name.
+            warnings.warn('ex_shared_ip_group argument is deprecated. Please'
+                          + ' use ex_shared_ip_group_id')
+
+
+        if 'ex_shared_ip_group_id' in kwargs:
+            shared_ip_group_id = kwargs['ex_shared_ip_group_id']
+            attributes['sharedIpGroupId'] = shared_ip_group_id
+
+        server_elm = ET.Element('server', attributes)
 
         metadata_elm = self._metadata_to_xml(kwargs.get("ex_metadata", {}))
         if metadata_elm:
@@ -247,12 +261,6 @@ class RackspaceNodeDriver(NodeDriver):
         files_elm = self._files_to_xml(kwargs.get("ex_files", {}))
         if files_elm:
             server_elm.append(files_elm)
-
-        shared_ip_elm = self._shared_ip_group_to_xml(
-            kwargs.get("ex_shared_ip_group", None))
-        if shared_ip_elm:
-            server_elm.append(shared_ip_elm)
-
         resp = self.connection.request("/servers",
                                        method='POST',
                                        data=ET.tostring(server_elm))
@@ -531,12 +539,6 @@ class RackspaceNodeDriver(NodeDriver):
              self._findall(self._findall(el, 'private')[0], 'ip')]
         )
 
-    def _shared_ip_group_to_xml(self, shared_ip_group):
-        if not shared_ip_group:
-            return None
-
-        return ET.Element('sharedIpGroupId', shared_ip_group)
-
 class RackspaceUKConnection(RackspaceConnection):
     """
     Connection class for the Rackspace UK driver

Modified: libcloud/trunk/test/compute/test_rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_rackspace.py?rev=1137923&r1=1137922&r2=1137923&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_rackspace.py (original)
+++ libcloud/trunk/test/compute/test_rackspace.py Tue Jun 21 09:55:42 2011
@@ -20,7 +20,7 @@ from libcloud.common.types import Invali
 from libcloud.compute.drivers.rackspace import RackspaceNodeDriver as Rackspace
 from libcloud.compute.base import Node, NodeImage, NodeSize
 
-from test import MockHttp
+from test import MockHttpTestCase
 from test.compute import TestCaseMixin
 from test.file_fixtures import ComputeFileFixtures
 
@@ -96,7 +96,16 @@ class RackspaceTests(unittest.TestCase, 
     def test_create_node(self):
         image = NodeImage(id=11, name='Ubuntu 8.10 (intrepid)', 
driver=self.driver)
         size = NodeSize(1, '256 slice', None, None, None, None, 
driver=self.driver)
-        node = self.driver.create_node(name='racktest', image=image, 
size=size, shared_ip_group='group1')
+        node = self.driver.create_node(name='racktest', image=image, size=size)
+        self.assertEqual(node.name, 'racktest')
+        self.assertEqual(node.extra.get('password'), 'racktestvJq7d3')
+
+    def test_create_node_ex_shared_ip_group(self):
+        RackspaceMockHttp.type = 'EX_SHARED_IP_GROUP'
+        image = NodeImage(id=11, name='Ubuntu 8.10 (intrepid)', 
driver=self.driver)
+        size = NodeSize(1, '256 slice', None, None, None, None, 
driver=self.driver)
+        node = self.driver.create_node(name='racktest', image=image, size=size,
+                                       ex_shared_ip_group_id='12345')
         self.assertEqual(node.name, 'racktest')
         self.assertEqual(node.extra.get('password'), 'racktestvJq7d3')
 
@@ -190,7 +199,7 @@ class RackspaceTests(unittest.TestCase, 
         self.assertEquals(True, ret)
 
 
-class RackspaceMockHttp(MockHttp):
+class RackspaceMockHttp(MockHttpTestCase):
 
     fixtures = ComputeFileFixtures('rackspace')
 
@@ -247,6 +256,13 @@ class RackspaceMockHttp(MockHttp):
         body = self.fixtures.load('v1_slug_servers.xml')
         return (httplib.ACCEPTED, body, {}, 
httplib.responses[httplib.ACCEPTED])
 
+    def _v1_0_slug_servers_EX_SHARED_IP_GROUP(self, method, url, body, 
headers):
+        # test_create_node_ex_shared_ip_group
+        # Verify that the body contains sharedIpGroupId XML element
+        self.assertTrue(body.find('sharedIpGroupId="12345"') != -1)
+        body = self.fixtures.load('v1_slug_servers.xml')
+        return (httplib.ACCEPTED, body, {}, 
httplib.responses[httplib.ACCEPTED])
+
     def _v1_0_slug_servers_METADATA(self, method, url, body, headers):
         body = self.fixtures.load('v1_slug_servers_metadata.xml')
         return (httplib.ACCEPTED, body, {}, 
httplib.responses[httplib.ACCEPTED])


Reply via email to