Author: tomaz
Date: Sat Aug 11 06:25:46 2012
New Revision: 1371873

URL: http://svn.apache.org/viewvc?rev=1371873&view=rev
Log:
Add 'balancer' attribute to the Member instance. This attribute refers to
the LoadBalancer instance this member belongs to.

Modified:
    libcloud/trunk/CHANGES
    libcloud/trunk/libcloud/loadbalancer/base.py
    libcloud/trunk/libcloud/loadbalancer/drivers/brightbox.py
    libcloud/trunk/libcloud/loadbalancer/drivers/cloudstack.py
    libcloud/trunk/libcloud/loadbalancer/drivers/gogrid.py
    libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
    libcloud/trunk/libcloud/test/loadbalancer/test_brightbox.py
    libcloud/trunk/libcloud/test/loadbalancer/test_cloudstack.py
    libcloud/trunk/libcloud/test/loadbalancer/test_gogrid.py
    libcloud/trunk/libcloud/test/loadbalancer/test_rackspace.py

Modified: libcloud/trunk/CHANGES
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/CHANGES?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Sat Aug 11 06:25:46 2012
@@ -13,6 +13,12 @@ Changes with Apache Libcloud in developm
       ex_set_account_metadata_temp_url_key, ex_get_object_temp_url. ; GITHUB-72
       [Shawn Smith]
 
+  *) Load-balancer
+
+    - Add 'balancer' attribute to the Member instance. This attribute refers to
+      the LoadBalancer instance this member belongs to.
+      [Tomaz Muraus]
+
 Changes with Apache Libcloud 0.11.1:
 
   *) General

Modified: libcloud/trunk/libcloud/loadbalancer/base.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/base.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/base.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/base.py Sat Aug 11 06:25:46 2012
@@ -26,10 +26,11 @@ __all__ = [
 
 class Member(object):
 
-    def __init__(self, id, ip, port, extra=None):
+    def __init__(self, id, ip, port, balancer=None, extra=None):
         self.id = str(id) if id else None
         self.ip = ip
         self.port = port
+        self.balancer = balancer
         self.extra = extra or {}
 
     def __repr__(self):
@@ -210,9 +211,9 @@ class Driver(BaseDriver):
         @rtype: L{Member}
         """
 
-        return self.balancer_attach_member(balancer, Member(None,
-                                                            node.public_ips[0],
-                                                            balancer.port))
+        return self.balancer_attach_member(balancer, Member(id=None,
+                                                            
ip=node.public_ips[0],
+                                                            
port=balancer.port))
 
     def balancer_attach_member(self, balancer, member):
         """

Modified: libcloud/trunk/libcloud/loadbalancer/drivers/brightbox.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/brightbox.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/brightbox.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/brightbox.py Sat Aug 11 
06:25:46 2012
@@ -102,7 +102,8 @@ class BrightboxLBDriver(Driver):
 
         data = self.connection.request(path).object
 
-        return list(map(self._node_to_member, data['nodes']))
+        func = lambda data: self._node_to_member(data, balancer)
+        return list(map(func, data['nodes']))
 
     def _post(self, path, data={}):
         headers = {'Content-Type': 'application/json'}
@@ -123,8 +124,8 @@ class BrightboxLBDriver(Driver):
     def _member_to_node(self, member):
         return {'node': member.id}
 
-    def _node_to_member(self, data):
-        return Member(data['id'], None, None)
+    def _node_to_member(self, data, balancer):
+        return Member(id=data['id'], ip=None, port=None, balancer=balancer)
 
     def _public_ip(self, data):
         if len(data['cloud_ips']) > 0:

Modified: libcloud/trunk/libcloud/loadbalancer/drivers/cloudstack.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/cloudstack.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/cloudstack.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/cloudstack.py Sat Aug 11 
06:25:46 2012
@@ -122,7 +122,8 @@ class CloudStackLBDriver(CloudStackDrive
         members = self._sync_request('listLoadBalancerRuleInstances',
                                      id=balancer.id)
         members = members['loadbalancerruleinstance']
-        return [self._to_member(m, balancer.ex_private_port) for m in members]
+        return [self._to_member(m, balancer.ex_private_port, balancer) \
+                for m in members]
 
     def _to_balancer(self, obj):
         balancer = LoadBalancer(
@@ -137,9 +138,10 @@ class CloudStackLBDriver(CloudStackDrive
         balancer.ex_public_ip_id = obj['publicipid']
         return balancer
 
-    def _to_member(self, obj, port):
+    def _to_member(self, obj, port, balancer):
         return Member(
             id=obj['id'],
             ip=obj['nic'][0]['ipaddress'],
-            port=port
+            port=port,
+            balancer=balancer
         )

Modified: libcloud/trunk/libcloud/loadbalancer/drivers/gogrid.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/gogrid.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/gogrid.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/gogrid.py Sat Aug 11 06:25:46 
2012
@@ -164,8 +164,8 @@ class GoGridLBDriver(BaseGoGridDriver, D
 
         resp = self._update_balancer(params)
         return [m for m in
-                self._to_members(resp.object["list"][0]["realiplist"])
-                if m.ip == member.ip][0]
+               self._to_members(resp.object["list"][0]["realiplist"], balancer)
+               if m.ip == member.ip][0]
 
     def balancer_detach_member(self, balancer, member):
         members = self.balancer_list_members(balancer)
@@ -182,7 +182,7 @@ class GoGridLBDriver(BaseGoGridDriver, D
     def balancer_list_members(self, balancer):
         resp = self.connection.request('/api/grid/loadbalancer/get',
                                        params={'id': balancer.id})
-        return self._to_members(resp.object["list"][0]["realiplist"])
+        return self._to_members(resp.object["list"][0]["realiplist"], balancer)
 
     def _update_balancer(self, params):
         try:
@@ -227,11 +227,12 @@ class GoGridLBDriver(BaseGoGridDriver, D
                           driver=self.connection.driver)
         return lb
 
-    def _to_members(self, object):
-        return [self._to_member(el) for el in object]
+    def _to_members(self, object, balancer=None):
+        return [self._to_member(el, balancer) for el in object]
 
-    def _to_member(self, el):
+    def _to_member(self, el, balancer=None):
         member = Member(id=el["ip"]["id"],
                         ip=el["ip"]["ip"],
-                        port=el["port"])
+                        port=el["port"],
+                        balancer=balancer)
         return member

Modified: libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py Sat Aug 11 
06:25:46 2012
@@ -474,7 +474,7 @@ class RackspaceLBDriver(Driver, OpenStac
         uri = '/loadbalancers/%s/nodes' % (balancer.id)
         resp = self.connection.request(uri, method='POST',
                                        data=json.dumps(member_object))
-        return self._to_members(resp.object)[0]
+        return self._to_members(resp.object, balancer)[0]
 
     def ex_balancer_attach_members(self, balancer, members):
         """
@@ -494,7 +494,7 @@ class RackspaceLBDriver(Driver, OpenStac
         uri = '/loadbalancers/%s/nodes' % (balancer.id)
         resp = self.connection.request(uri, method='POST',
                                        data=json.dumps(member_objects))
-        return self._to_members(resp.object)
+        return self._to_members(resp.object, balancer)
 
     def balancer_detach_member(self, balancer, member):
         # Loadbalancer always needs to have at least 1 member.
@@ -550,8 +550,8 @@ class RackspaceLBDriver(Driver, OpenStac
 
     def balancer_list_members(self, balancer):
         uri = '/loadbalancers/%s/nodes' % (balancer.id)
-        return self._to_members(
-            self.connection.request(uri).object)
+        data = self.connection.request(uri).object
+        return self._to_members(data, balancer)
 
     def update_balancer(self, balancer, **kwargs):
         attrs = self._kwargs_to_mutable_attrs(**kwargs)
@@ -1383,10 +1383,10 @@ class RackspaceLBDriver(Driver, OpenStac
                             driver=self.connection.driver,
                             extra=extra)
 
-    def _to_members(self, object):
-        return [self._to_member(el) for el in object["nodes"]]
+    def _to_members(self, object, balancer=None):
+        return [self._to_member(el, balancer) for el in object["nodes"]]
 
-    def _to_member(self, el):
+    def _to_member(self, el, balancer=None):
         extra = {}
         if 'weight' in el:
             extra['weight'] = el["weight"]
@@ -1402,6 +1402,7 @@ class RackspaceLBDriver(Driver, OpenStac
         lbmember = Member(id=el["id"],
                           ip=el["address"],
                           port=el["port"],
+                          balancer=balancer,
                           extra=extra)
         return lbmember
 

Modified: libcloud/trunk/libcloud/test/loadbalancer/test_brightbox.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/test/loadbalancer/test_brightbox.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/test/loadbalancer/test_brightbox.py (original)
+++ libcloud/trunk/libcloud/test/loadbalancer/test_brightbox.py Sat Aug 11 
06:25:46 2012
@@ -74,6 +74,7 @@ class BrightboxLBTests(unittest.TestCase
         members = balancer.list_members()
 
         self.assertEquals(len(members), 1)
+        self.assertEquals(members[0].balancer, balancer)
         self.assertEquals('srv-lv426', members[0].id)
 
     def test_balancer_attach_member(self):

Modified: libcloud/trunk/libcloud/test/loadbalancer/test_cloudstack.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/test/loadbalancer/test_cloudstack.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/test/loadbalancer/test_cloudstack.py (original)
+++ libcloud/trunk/libcloud/test/loadbalancer/test_cloudstack.py Sat Aug 11 
06:25:46 2012
@@ -68,6 +68,7 @@ class CloudStackLBTests(unittest.TestCas
         members = balancer.list_members()
         for member in members:
             self.assertTrue(isinstance(member, Member))
+            self.assertEquals(member.balancer, balancer)
 
 class CloudStackMockHttp(MockHttpTestCase):
     fixtures = LoadBalancerFileFixtures('cloudstack')

Modified: libcloud/trunk/libcloud/test/loadbalancer/test_gogrid.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/test/loadbalancer/test_gogrid.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/test/loadbalancer/test_gogrid.py (original)
+++ libcloud/trunk/libcloud/test/loadbalancer/test_gogrid.py Sat Aug 11 
06:25:46 2012
@@ -115,6 +115,7 @@ class GoGridTests(unittest.TestCase):
         self.assertEquals(len(members2), 3)
         self.assertEquals(expected_members,
                 set(["%s:%s" % (member.ip, member.port) for member in 
members1]))
+        self.assertEquals(members1[0].balancer, balancer)
 
     def test_balancer_attach_compute_node(self):
         balancer = LoadBalancer(23530, None, None, None, None, self.driver)

Modified: libcloud/trunk/libcloud/test/loadbalancer/test_rackspace.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/test/loadbalancer/test_rackspace.py?rev=1371873&r1=1371872&r2=1371873&view=diff
==============================================================================
--- libcloud/trunk/libcloud/test/loadbalancer/test_rackspace.py (original)
+++ libcloud/trunk/libcloud/test/loadbalancer/test_rackspace.py Sat Aug 11 
06:25:46 2012
@@ -667,6 +667,7 @@ class RackspaceLBTests(unittest.TestCase
         members = balancer.list_members()
 
         self.assertEquals(len(members), 3)
+        self.assertEquals(members[0].balancer, balancer)
         self.assertEquals(expected, set(["%s:%s" % (member.ip, member.port) for
                                          member in members]))
 


Reply via email to