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