libcloud/loadbalancer/drivers/elb.py | 56 ++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/libcloud/loadbalancer/drivers/elb.py b/libcloud/loadbalancer/drivers/elb.py index 0b408d5..c4915c6 100644 --- a/libcloud/loadbalancer/drivers/elb.py +++ b/libcloud/loadbalancer/drivers/elb.py @@ -67,16 +67,15 @@ class ElasticLBDriver(Driver): ex_members_availability_zones=None): if ex_members_availability_zones is None: ex_members_availability_zones = ['a'] - + params = { 'Action': 'CreateLoadBalancer', 'LoadBalancerName': name, 'Listeners.member.1.InstancePort': str(port), 'Listeners.member.1.InstanceProtocol': protocol.upper(), - 'Listeners.member.1.LoadBalancerPort': str(port), - 'Listeners.member.1.Protocol': protocol.upper(), - } - + 'Listeners.member.1.LoadBalancerPort': str(port), + 'Listeners.member.1.Protocol': protocol.upper() + } for i, z in enumerate(ex_members_availability_zones): zone = ''.join((self.region, z)) params['AvailabilityZones.member.%d' % (i + 1)] = zone @@ -93,7 +92,49 @@ class ElasticLBDriver(Driver): ) balancer._members = [] return balancer + + def create_balancer_listener(self, name, ports, protocols,certificate_Id = ''): + + if not (len(ports) == len(protocols)): + raise SizeFit('ports and protocols not same size') + + params = { + 'Action': 'CreateLoadBalancerListeners', + 'LoadBalancerName': name + } + #iter = 1 + for iter , port in enumerate(ports,1): + params['Listeners.member.{0}.InstancePort'.format(str(iter))] = str(port) + params['Listeners.member.{0}.InstanceProtocol'.format(str(iter))] =protocols[iter-1].upper() + params['Listeners.member.{0}.LoadBalancerPort'.format(str(iter))] = str(port) + params['Listeners.member.{0}.Protocol'.format(str(iter))] = protocols[iter-1].upper() + if port == 433: + params['Listeners.member.{0}.SSLCertificateId'.format(str(iter))] = certificate_Id + + + data = self.connection.request(ROOT, params=params).object + + return data + + def create_health_check(self, name, port, protocol, interval=30,timeout=5, unhealthyThreshold=2, + healthyThreshold=10, path = ''): + if path is None: + path = '' + + params = { + 'Action': 'ConfigureHealthCheck', + 'LoadBalancerName': name, + 'HealthCheck.HealthyThreshold': str(healthyThreshold), + 'HealthCheck.UnhealthyThreshold': str(unhealthyThreshold), + 'HealthCheck.Interval': str(interval), + 'HealthCheck.Timeout': str(timeout), + 'HealthCheck.Target': '{0}:{1}/{2}'.format(protocol,str(port),path) + } + healt_Check = self.connection.request(ROOT, params=params).object + + return healt_Check + def destroy_balancer(self, balancer): params = { 'Action': 'DeleteLoadBalancer', @@ -160,3 +201,8 @@ class ElasticLBDriver(Driver): balancer=balancer)) return balancer +class SizeFit(Exception): + def __init__(self, value): + self.value = value + def __str__(self): + return repr(self.value) \ No newline at end of file