Author: tomaz
Date: Mon Dec 19 23:31:36 2011
New Revision: 1221010

URL: http://svn.apache.org/viewvc?rev=1221010&view=rev
Log:
Add 'extra' attribute to the Member object and populate it in 
the Rackspace driver. This patch has been contributed by Mark Everett
<[email protected]> and is part of GH-46.

Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/loadbalancer/base.py
    libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
    
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8290_nodes.json
    libcloud/trunk/test/loadbalancer/test_rackspace.py

Modified: libcloud/trunk/CHANGES
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1221010&r1=1221009&r2=1221010&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Mon Dec 19 23:31:36 2011
@@ -50,6 +50,10 @@ Changes with Apache Libcloud in developm
       connection class.
       [Dave King]
 
+    - Add 'extra' attribute to the Member object and populate it in 
+      the Rackspace driver.
+      [Mark Everett]
+
 Changes with Apache Libcloud 0.7.1:
 
   *) General:

Modified: libcloud/trunk/libcloud/loadbalancer/base.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/base.py?rev=1221010&r1=1221009&r2=1221010&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/base.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/base.py Mon Dec 19 23:31:36 2011
@@ -26,10 +26,11 @@ __all__ = [
 
 class Member(object):
 
-    def __init__(self, id, ip, port):
+    def __init__(self, id, ip, port, extra=None):
         self.id = str(id) if id else None
         self.ip = ip
         self.port = port
+        self.extra = extra or {}
 
     def __repr__(self):
         return ('<Member: id=%s, address=%s:%s>' % (self.id,

Modified: libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py?rev=1221010&r1=1221009&r2=1221010&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py Mon Dec 19 
23:31:36 2011
@@ -365,6 +365,9 @@ class RackspaceLBDriver(Driver):
             logging = el["connectionLogging"]
             extra["connectionLoggingEnabled"] = logging.get("enabled")
 
+        if 'nodes' in el:
+            extra['members'] = self._to_members(el)
+
         return LoadBalancer(id=el["id"],
                 name=el["name"],
                 state=self.LB_STATE_MAP.get(
@@ -378,9 +381,17 @@ class RackspaceLBDriver(Driver):
         return [self._to_member(el) for el in object["nodes"]]
 
     def _to_member(self, el):
+        extra = {}
+        if 'weight' in el:
+            extra['weight'] = el["weight"]
+
+        if 'condition' in el:
+            extra['condition'] = el["condition"]
+
         lbmember = Member(id=el["id"],
                 ip=el["address"],
-                port=el["port"])
+                port=el["port"],
+                extra=extra)
         return lbmember
 
     def _ex_private_virtual_ips(self, el):

Modified: 
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8290_nodes.json
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8290_nodes.json?rev=1221010&r1=1221009&r2=1221010&view=diff
==============================================================================
--- 
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8290_nodes.json
 (original)
+++ 
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8290_nodes.json
 Mon Dec 19 23:31:36 2011
@@ -5,14 +5,16 @@
             "condition": "ENABLED", 
             "id": 30944, 
             "port": 80, 
-            "status": "ONLINE"
+            "status": "ONLINE",
+            "weight": 12
         }, 
         {
             "address": "10.1.0.10", 
-            "condition": "ENABLED", 
+            "condition": "DISABLED", 
             "id": 30945, 
             "port": 80, 
-            "status": "ONLINE"
+            "status": "ONLINE",
+            "weight": 8
         }
     ]
 }

Modified: libcloud/trunk/test/loadbalancer/test_rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/test_rackspace.py?rev=1221010&r1=1221009&r2=1221010&view=diff
==============================================================================
--- libcloud/trunk/test/loadbalancer/test_rackspace.py (original)
+++ libcloud/trunk/test/loadbalancer/test_rackspace.py Mon Dec 19 23:31:36 2011
@@ -137,6 +137,13 @@ class RackspaceLBTests(unittest.TestCase
         balancer = self.driver.get_balancer(balancer_id='18940')
         self.assertEquals(balancer.extra["ipv4PrivateSource"], '10.183.252.25')
 
+    def test_get_balancer_extra_members(self):
+        balancer = self.driver.get_balancer(balancer_id='8290')
+        members = balancer.extra['members']
+        self.assertEquals(2, len(members))
+        self.assertEquals('10.1.0.11', members[0].ip)
+        self.assertEquals('10.1.0.10', members[1].ip)
+
     def test_get_balancer_algorithm(self):
         balancer = self.driver.get_balancer(balancer_id='8290')
         self.assertEquals(balancer.extra["algorithm"], Algorithm.RANDOM)
@@ -242,6 +249,20 @@ class RackspaceLBTests(unittest.TestCase
         self.assertEquals(set(['10.1.0.10:80', '10.1.0.11:80']),
                 set(["%s:%s" % (member.ip, member.port) for member in 
members]))
 
+    def test_balancer_members_extra_weight(self):
+        balancer = self.driver.get_balancer(balancer_id='8290')
+        members = balancer.list_members()
+
+        self.assertEquals(12, members[0].extra['weight'])
+        self.assertEquals(8, members[1].extra['weight'])
+
+    def test_balancer_members_extra_condition(self):
+        balancer = self.driver.get_balancer(balancer_id='8290')
+        members = balancer.list_members()
+
+        self.assertEquals('ENABLED', members[0].extra['condition'])
+        self.assertEquals('DISABLED', members[1].extra['condition'])
+
     def test_balancer_attach_member(self):
         balancer = self.driver.get_balancer(balancer_id='8290')
         member = balancer.attach_member(Member(None, ip='10.1.0.12', 
port='80'))


Reply via email to