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 2011/11/10 01:13:04 UTC

svn commit: r1200058 - in /libcloud/trunk: CHANGES libcloud/compute/drivers/openstack.py test/compute/test_openstack.py

Author: tomaz
Date: Thu Nov 10 00:13:03 2011
New Revision: 1200058

URL: http://svn.apache.org/viewvc?rev=1200058&view=rev
Log:
Add list_locations method to the OpenStack driver and fix some inconsistencies in
the OpenStack driver extension method signatures. This patch has been submitted
by Brad Morgan <morgabra at cloudkick dot com> and is part of LIBCLOUD-129.

Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/compute/drivers/openstack.py
    libcloud/trunk/test/compute/test_openstack.py

Modified: libcloud/trunk/CHANGES
URL: http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1200058&r1=1200057&r2=1200058&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Thu Nov 10 00:13:03 2011
@@ -8,6 +8,10 @@ Changes with Apache Libcloud in developm
        connection class.
        [Brad Morgan]
 
+     - Add list_locations method to the OpenStack driver and fix some
+       inconsistencies in the OpenStack driver extension method signatures.
+       [Brad Morgan]
+
 Changes with Apache Libcloud 0.6.1:
 
   *) General:

Modified: libcloud/trunk/libcloud/compute/drivers/openstack.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/openstack.py?rev=1200058&r1=1200057&r2=1200058&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/openstack.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/openstack.py Thu Nov 10 00:13:03 2011
@@ -33,7 +33,7 @@ from libcloud.common.openstack import Op
 from libcloud.common.types import MalformedResponseError
 from libcloud.compute.types import NodeState, Provider
 from libcloud.compute.base import NodeSize, NodeImage
-from libcloud.compute.base import NodeDriver, Node
+from libcloud.compute.base import NodeDriver, Node, NodeLocation
 from libcloud.pricing import get_size_price
 from libcloud.common.base import Response
 from libcloud.utils import findall
@@ -195,6 +195,9 @@ class OpenStackNodeDriver(NodeDriver):
         return self._to_sizes(self.connection.request('/flavors/detail')
                                              .object)
 
+    def list_locations(self):
+        return [NodeLocation(0, '', '', self)]
+
     def _ex_connection_class_kwargs(self):
         rv = {}
         if self._ex_force_base_url:
@@ -796,7 +799,7 @@ class OpenStack_1_1_NodeDriver(OpenStack
         @type       ex_files:   C{dict}
         """
 
-        server_params = self._create_args_to_params(None, kwargs)
+        server_params = self._create_args_to_params(None, **kwargs)
 
         resp = self.connection.request("/servers",
                                        method='POST',
@@ -835,7 +838,7 @@ class OpenStack_1_1_NodeDriver(OpenStack
         flavors = obj['flavors']
         return [self._to_size(flavor) for flavor in flavors]
 
-    def _create_args_to_params(self, node, kwargs):
+    def _create_args_to_params(self, node, **kwargs):
         server_params = {
             'name': kwargs.get('name'),
             'metadata': kwargs.get('ex_metadata', {}),
@@ -877,13 +880,33 @@ class OpenStack_1_1_NodeDriver(OpenStack
         node.extra['password'] = password
         return resp.status == httplib.ACCEPTED
 
-    def ex_rebuild(self, node, **kwargs):
-        server_params = self._create_args_to_params(node, kwargs)
+    def ex_rebuild(self, node, image):
+        """
+        Rebuild a Node.
+
+        @type node: C{Node}
+        @param node: Node to rebuild.
+
+        @type image: C{NodeImage}
+        @param image: New image to use.
+        """
+        server_params = self._create_args_to_params(node, image=image)
         resp = self._node_action(node, 'rebuild', **server_params)
         return resp.status == httplib.ACCEPTED
 
     def ex_resize(self, node, size):
-        resp = self._node_action(node, 'resize', flavorRef=size.id)
+        """
+        Change a node size.
+
+        @type node: C{Node}
+        @param node: Node to resize.
+
+        @type image: C{NodeSize}
+        @param image: New size to use.
+        """
+
+        server_params = self._create_args_to_params(node, size=size)
+        resp = self._node_action(node, 'resize', **server_params)
         return resp.status == httplib.ACCEPTED
 
     def ex_confirm_resize(self, node):
@@ -945,7 +968,7 @@ class OpenStack_1_1_NodeDriver(OpenStack
         @keyword    name:   New name for the server
         @type       name:   C{str}
         """
-        potential_data = self._create_args_to_params(node, node_updates)
+        potential_data = self._create_args_to_params(node, **node_updates)
         updates = {'name': potential_data['name']}
         return self._update_node(node, **updates)
 

Modified: libcloud/trunk/test/compute/test_openstack.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_openstack.py?rev=1200058&r1=1200057&r2=1200058&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_openstack.py (original)
+++ libcloud/trunk/test/compute/test_openstack.py Thu Nov 10 00:13:03 2011
@@ -106,6 +106,10 @@ class OpenStack_1_0_Tests(unittest.TestC
         else:
             self.fail('test should have thrown')
 
+    def test_list_locations(self):
+        locations = self.driver.list_locations()
+        self.assertEqual(len(locations), 1)
+
     def test_list_nodes(self):
         OpenStackMockHttp.type = 'EMPTY'
         ret = self.driver.list_nodes()