in footmark/slb/connection.py [0:0]
def purge_add_backend_server(self, load_balancer_id, instance_ids=None, purge_instance_ids=None):
"""
Remove existing Instances or Backend Server and Add new instances or Backend Server to Load Balancer
:type load_balancer_id: str
:param load_balancer_id: Id of ServerLoadBalancer
:type instance_ids:list
:param instance_ids: Id of Instances or Backend Server
:type purge_instance_ids: bool
:param purge_instance_ids: Whether to remove existing Instances or Backend Servers
:return: Returns Id of newly added Load Balancer
"""
params = {}
results = []
instances = []
changed = False
try:
# List all Backend Servers
self.build_list_params(params, load_balancer_id, 'LoadBalancerId')
response = self.get_status('DescribeLoadBalancerAttribute', params)
for instance in response['BackendServers']['BackendServer']:
# append id of all Backend Servers to list
instances.append(str(instance['ServerId']))
# Remove instances only when purge_instance_ids is True
if len(instances) > 0 and (purge_instance_ids is True):
# Remove all Backend Servers
response = self.remove_backend_servers(load_balancer_id=load_balancer_id, backend_server_ids=instances)
if 'error' in (''.join(str(response))).lower():
results.append(response[2])
else:
results.append(response[2][0])
changed = True
# Add Backend Server to Load Balancer
if instance_ids:
if len(instance_ids) > 0:
backend_servers = []
for backend_server_id in instance_ids:
backend_servers.append({"server_id": backend_server_id, "weight": 100})
response = self.add_backend_servers(load_balancer_id, backend_servers)
if 'error' in (''.join(str(response))).lower():
results.append({"backend_server_result": response[2]})
else:
results.append({"backend_server_result": response[1][0]})
changed = True
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