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/19 21:56:47 UTC

svn commit: r1204075 - in /libcloud/trunk: CHANGES libcloud/loadbalancer/drivers/rackspace.py test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_nodeaddress.json test/loadbalancer/test_rackspace.py

Author: tomaz
Date: Sat Nov 19 20:56:47 2011
New Revision: 1204075

URL: http://svn.apache.org/viewvc?rev=1204075&view=rev
Log:
Add ex_member_address argument to the Rackspace LoadBalancer driver
list_balancers method.

Added:
    libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_nodeaddress.json
Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
    libcloud/trunk/test/loadbalancer/test_rackspace.py

Modified: libcloud/trunk/CHANGES
URL: http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1204075&r1=1204074&r2=1204075&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Sat Nov 19 20:56:47 2011
@@ -12,6 +12,13 @@ Changes with Apache Libcloud in developm
        ex_stop_node.
        [Suvish Vt]
 
+  *) Load-baancer:
+
+    - Add ex_member_address argument to the Rackspace driver list_balancers
+      method. If this argument is provided, only loadbalancers which have a
+      member with the provided IP address attached are returned.
+      [Tomaz Muraus]
+
 Changes with Apache Libcloud 0.6.2:
 
   *) General

Modified: libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py?rev=1204075&r1=1204074&r2=1204075&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py Sat Nov 19 20:56:47 2011
@@ -87,9 +87,21 @@ class RackspaceLBDriver(Driver):
         return self._to_protocols(
                    self.connection.request('/loadbalancers/protocols').object)
 
-    def list_balancers(self):
+    def list_balancers(self, ex_member_address=None):
+        """
+        @param ex_member_address: Optional IP address of the attachment member.
+                                  If provided, only the load balancers which
+                                  have this member attached will be returned.
+        @type ex_member_address: C{str}
+        """
+        params = {}
+
+        if ex_member_address:
+            params['nodeaddress'] = ex_member_address
+
         return self._to_balancers(
-                self.connection.request('/loadbalancers').object)
+                self.connection.request('/loadbalancers', params=params)
+                    .object)
 
     def create_balancer(self, name, members, protocol='http',
                         port=80, algorithm=DEFAULT_ALGORITHM):
@@ -163,12 +175,21 @@ class RackspaceLBDriver(Driver):
         return [ self._to_balancer(el) for el in object["loadBalancers"] ]
 
     def _to_balancer(self, el):
+        ip = None
+        port = None
+
+        if 'virtualIps' in el:
+            ip = el["virtualIps"][0]["address"]
+
+        if 'port' in el:
+            port = el["port"]
+
         lb = LoadBalancer(id=el["id"],
                 name=el["name"],
                 state=self.LB_STATE_MAP.get(
                     el["status"], State.UNKNOWN),
-                ip=el["virtualIps"][0]["address"],
-                port=el["port"],
+                ip=ip,
+                port=port,
                 driver=self.connection.driver)
         return lb
 

Added: libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_nodeaddress.json
URL: http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_nodeaddress.json?rev=1204075&view=auto
==============================================================================
--- libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_nodeaddress.json (added)
+++ libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_nodeaddress.json Sat Nov 19 20:56:47 2011
@@ -0,0 +1,18 @@
+{"loadBalancers": [
+        {
+            "name": "First Loadbalancer",
+            "id": 1,
+            "status": "ACTIVE"
+        },
+        {
+            "name": "Second Loadbalancer",
+            "id": 2,
+            "status": "PENDING_UPDATE"
+        },
+        {
+            "name": "Third Loadbalancer",
+            "id": 8,
+            "status": "ERROR"
+        }
+    ]
+}

Modified: libcloud/trunk/test/loadbalancer/test_rackspace.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/test_rackspace.py?rev=1204075&r1=1204074&r2=1204075&view=diff
==============================================================================
--- libcloud/trunk/test/loadbalancer/test_rackspace.py (original)
+++ libcloud/trunk/test/loadbalancer/test_rackspace.py Sat Nov 19 20:56:47 2011
@@ -49,9 +49,24 @@ class RackspaceLBTests(unittest.TestCase
         self.assertEquals(len(balancers), 2)
         self.assertEquals(balancers[0].name, "test0")
         self.assertEquals(balancers[0].id, "8155")
+        self.assertEquals(balancers[0].port, 80)
+        self.assertEquals(balancers[0].ip, "1.1.1.25")
         self.assertEquals(balancers[1].name, "test1")
         self.assertEquals(balancers[1].id, "8156")
 
+    def test_list_balancers_ex_member_address(self):
+        RackspaceLBMockHttp.type = 'EX_MEMBER_ADDRESS'
+        balancers = self.driver.list_balancers(ex_member_address='127.0.0.1')
+
+        self.assertEquals(len(balancers), 3)
+        self.assertEquals(balancers[0].name, "First Loadbalancer")
+        self.assertEquals(balancers[0].id, "1")
+        self.assertEquals(balancers[1].name, "Second Loadbalancer")
+        self.assertEquals(balancers[1].id, "2")
+        self.assertEquals(balancers[2].name, "Third Loadbalancer")
+        self.assertEquals(balancers[2].id, "8")
+
+
     def test_create_balancer(self):
         balancer = self.driver.create_balancer(name='test2',
                 port=80,
@@ -140,6 +155,11 @@ class RackspaceLBMockHttp(MockHttpTestCa
 
         raise NotImplementedError
 
+    def _v1_0_slug_loadbalancers_EX_MEMBER_ADDRESS(self, method, url, body, headers):
+        body = self.fixtures.load('v1_slug_loadbalancers_nodeaddress.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+
     def _v1_0_slug_loadbalancers_8155(self, method, url, body, headers):
         if method == "DELETE":
             return (httplib.ACCEPTED, "", {}, httplib.responses[httplib.ACCEPTED])