in footmark/slb/connection.py [0:0]
def add_listeners(self, load_balancer_id, purge_listener=None, listeners=None):
"""
Add Listeners to existing ServerLoadBalancer
:type load_balancer_id: str
:param load_balancer_id: Id of ServerLoadBalancer
:type purge_listener: bool
:param purge_listener: Whether to remove existing Listener or not
:type listeners: dict
:param listeners: List of ports/protocols for this SLB to listen on
:return: returns RequestId id of request
"""
params = {}
results = []
deleted_listener = []
changed = False
try:
# find out all listeners of the load balancer
self.build_list_params(params, load_balancer_id, 'LoadBalancerId')
slb_details = self.get_status('DescribeLoadBalancerAttribute', params)
# if purge_listener is true then delete existing listeners
if purge_listener:
if slb_details:
if len(slb_details['ListenerPortsAndProtocal']['ListenerPortAndProtocal']) > 0:
for slb_listener in slb_details['ListenerPortsAndProtocal']['ListenerPortAndProtocal']:
params = {}
self.build_list_params(params, load_balancer_id, 'LoadBalancerId')
self.build_list_params(params, slb_listener['ListenerPort'], 'ListenerPort')
response = self.get_status('DeleteLoadBalancerListener', params)
deleted_listener.append(response)
changed = True
# add listeners to load balancer
if listeners:
for listener in listeners:
if listener:
if 'protocol' in listener:
protocol = str(listener['protocol']).lower()
# Add HTTP Listener to Load Balancer
if protocol in ['http']:
listener_result = self.create_load_balancer_http_listener(load_balancer_id, listener)
if listener_result:
results.append({"http_listener_result": listener_result[1]})
# modify changed param according to listener result
if changed is False:
changed = listener_result[0]
# Add HTTPS Listener to Load Balancer
elif protocol in ['https']:
listener_result = self.create_load_balancer_https_listener(load_balancer_id, listener)
if listener_result:
results.append({"https_listener_result": listener_result[1]})
# modify changed param according to listener result
if changed is False:
changed = listener_result[0]
# Add TCP Listener to Load Balancer
elif protocol in ['tcp']:
listener_result = self.create_load_balancer_tcp_listener(load_balancer_id, listener)
if listener_result:
results.append({"tcp_listener_result": listener_result[1]})
# modify changed param according to listener result
if changed is False:
changed = listener_result[0]
# Add UDP Listener to Load Balancer
elif protocol in ['udp']:
listener_result = self.create_load_balancer_udp_listener(load_balancer_id, listener)
if listener_result:
results.append({"udp_listener_result": listener_result[1]})
# modify changed param according to listener result
if changed is False:
changed = listener_result[0]
else:
results.append({"Error Message": "Invalid Listener Protocol " + listener['protocol']})
except Exception as ex:
error_code = ex.error_code
error_msg = ex.message
results.append({"Error Code": error_code, "Error Message": error_msg})
return changed, results