Author: tomaz
Date: Fri Feb 17 21:29:25 2012
New Revision: 1245771
URL: http://svn.apache.org/viewvc?rev=1245771&view=rev
Log:
Add an extension method (ex_balancer_attach_members) for attaching
multiple members to a load balancer in the Rackspace driver. This
patch has been submitted by Adam Pickeral <adam dot pickeral at rackspace dot
com> and is part of LIBCLOUD-152.
Added:
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292.json
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292_nodes_post.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=1245771&r1=1245770&r2=1245771&view=diff
==============================================================================
--- libcloud/trunk/CHANGES (original)
+++ libcloud/trunk/CHANGES Fri Feb 17 21:29:25 2012
@@ -37,6 +37,10 @@ Changes with Apache Libcloud in developm
the Rackspace driver.
[Adam Pickeral]
+ - Add an extension method (ex_balancer_attach_members) for attaching
+ multiple members to a load balancer in the Rackspace driver.
+ [Adam Pickeral]
+
Changes with Apache Libcloud 0.8.0:
*) General:
Modified: libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py?rev=1245771&r1=1245770&r2=1245771&view=diff
==============================================================================
--- libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py (original)
+++ libcloud/trunk/libcloud/loadbalancer/drivers/rackspace.py Fri Feb 17
21:29:25 2012
@@ -418,6 +418,24 @@ class RackspaceLBDriver(Driver):
data=json.dumps(member_object))
return self._to_members(resp.object)[0]
+ def ex_balancer_attach_members(self, balancer, members):
+ """
+ Attaches a list of members to a load balancer.
+
+ @param balancer: The Balancer to which members will be attached.
+ @type balancer: C{Balancer}
+
+ @param members: A list of Members to attach.
+ @type members: C{list}
+ """
+ member_objects = {"nodes": [self._member_attributes(member) for member
+ in members]}
+
+ uri = '/loadbalancers/%s/nodes' % (balancer.id)
+ resp = self.connection.request(uri, method='POST',
+ data=json.dumps(member_objects))
+ return self._to_members(resp.object)
+
def balancer_detach_member(self, balancer, member):
# Loadbalancer always needs to have at least 1 member.
# Last member cannot be detached. You can only disable it or destroy
Added:
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292.json
URL:
http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292.json?rev=1245771&view=auto
==============================================================================
---
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292.json
(added)
+++
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292.json
Fri Feb 17 21:29:25 2012
@@ -0,0 +1,56 @@
+{
+ "loadBalancer": {
+ "algorithm": "RANDOM",
+ "cluster": {
+ "name": "ztm-n05.lbaas.ord1.rackspace.net"
+ },
+ "connectionLogging": {
+ "enabled": false
+ },
+ "created": {
+ "time": "2011-04-07T16:27:50Z"
+ },
+ "id": 8292,
+ "name": "test8292",
+ "nodes": [
+ {
+ "address": "10.1.0.11",
+ "condition": "ENABLED",
+ "id": 30944,
+ "port": 80,
+ "status": "ONLINE",
+ "weight": 12
+ },
+ {
+ "address": "10.1.0.10",
+ "condition": "DISABLED",
+ "id": 30945,
+ "port": 80,
+ "status": "OFFLINE",
+ "weight": 8
+ },
+ {
+ "address": "10.1.0.9",
+ "condition": "DRAINING",
+ "id": 30946,
+ "port": 8080,
+ "status": "DRAINING",
+ "weight": 20
+ }
+ ],
+ "port": 80,
+ "protocol": "HTTP",
+ "status": "ACTIVE",
+ "updated": {
+ "time": "2011-04-07T16:28:12Z"
+ },
+ "virtualIps": [
+ {
+ "address": "1.1.1.2",
+ "id": 1151,
+ "ipVersion": "IPV4",
+ "type": "PUBLIC"
+ }
+ ]
+ }
+}
Added:
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292_nodes_post.json
URL:
http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292_nodes_post.json?rev=1245771&view=auto
==============================================================================
---
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292_nodes_post.json
(added)
+++
libcloud/trunk/test/loadbalancer/fixtures/rackspace/v1_slug_loadbalancers_8292_nodes_post.json
Fri Feb 17 21:29:25 2012
@@ -0,0 +1,20 @@
+{
+ "nodes": [
+ {
+ "address": "10.1.0.12",
+ "condition": "ENABLED",
+ "id": 30972,
+ "port": 80,
+ "status": "ONLINE",
+ "weight": 1
+ },
+ {
+ "address": "10.1.0.13",
+ "condition": "ENABLED",
+ "id": 30973,
+ "port": 80,
+ "status": "ONLINE",
+ "weight": 1
+ }
+ ]
+}
Modified: libcloud/trunk/test/loadbalancer/test_rackspace.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/test/loadbalancer/test_rackspace.py?rev=1245771&r1=1245770&r2=1245771&view=diff
==============================================================================
--- libcloud/trunk/test/loadbalancer/test_rackspace.py (original)
+++ libcloud/trunk/test/loadbalancer/test_rackspace.py Fri Feb 17 21:29:25 2012
@@ -615,6 +615,21 @@ class RackspaceLBTests(unittest.TestCase
self.assertEquals(member.ip, '10.1.0.12')
self.assertEquals(member.port, 80)
+ def test_balancer_attach_members(self):
+ balancer = self.driver.get_balancer(balancer_id='8292')
+ members = [Member(None, ip='10.1.0.12', port='80'),
+ Member(None, ip='10.1.0.13', port='80')]
+
+ attached_members = self.driver.ex_balancer_attach_members(balancer,
+ members)
+
+ first_member = attached_members[0]
+ second_member = attached_members[1]
+ self.assertEquals(first_member.ip, '10.1.0.12')
+ self.assertEquals(first_member.port, 80)
+ self.assertEquals(second_member.ip, '10.1.0.13')
+ self.assertEquals(second_member.port, 80)
+
def test_balancer_detach_member(self):
balancer = self.driver.get_balancer(balancer_id='8290')
member = balancer.list_members()[0]
@@ -897,6 +912,26 @@ class RackspaceLBMockHttp(MockHttpTestCa
raise NotImplementedError
+ def _v1_0_slug_loadbalancers_8292(self, method, url, body, headers):
+ if method == "GET":
+ body = self.fixtures.load('v1_slug_loadbalancers_8292.json')
+ return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+ raise NotImplementedError
+
+ def _v1_0_slug_loadbalancers_8292_nodes(self, method, url, body, headers):
+ if method == "POST":
+ json_body = json.loads(body)
+ json_node_1 = json_body['nodes'][0]
+ json_node_2 = json_body['nodes'][1]
+ self.assertEqual('10.1.0.12', json_node_1['address'])
+ self.assertEqual('10.1.0.13', json_node_2['address'])
+ response_body =
self.fixtures.load('v1_slug_loadbalancers_8292_nodes_post.json')
+ return (httplib.ACCEPTED, response_body, {},
+ httplib.responses[httplib.ACCEPTED])
+
+ raise NotImplementedError
+
def _v1_0_slug_loadbalancers_8290_nodes_30944(self, method, url, body,
headers):
if method == "PUT":
json_body = json.loads(body)