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])