in footmark/slb/connection.py [0:0]
def modify_vserver_group_backend_server(self, vserver_group_id, purge_backend_servers, backend_servers):
'''
Modify VServer Group Backend Server
:type vserver_group_id: string
:param vserver_group_id:Virtual server group Id
:type purge_backend_servers: List of hash/dictionary
:param purge_backend_servers:
- List of hash/dictionary of backend servers to add in
- '[{"key":"value", "key":"value"}]', keys allowed:
- server_id (required:true, description: Unique id of Instance to add)
- port (required:true, description: The back-end server using the port, range: 1-65535)
:type backend_servers: List of hash/dictionary
:param backend_servers:
- List of hash/dictionary of backend servers to add in
- '[{"key":"value", "key":"value"}]', keys allowed:
- server_id (required:true, description: Unique id of Instance to add)
- port (required:true, description: The back-end server using the port, range: 1-65535)
- weight (required:true; default: 100, description: Weight of the backend server, in the range of 1-100 )
:return: Change the virtual back-end servers in the server group, in a particular SLB virtual server
group by adding / deleting the back-end server to replace the current server group, the group returned
to the virtual server back-end server list.
'''
params = {}
results = []
set_results = []
add_results = []
set_server_attribute = []
add_backend_server = []
delete_backend_servers = []
delete_backend_servers_id = []
filter_backend_servers_id = []
final_backend_servers_id = []
changed = False
serverid_param = 'server_id'
try:
self.build_list_params(params, vserver_group_id, 'VServerGroupId')
result_all_backend_servers = self.get_status('DescribeVServerGroupAttribute', params)
all_backend_servers = result_all_backend_servers['BackendServers']['BackendServer']
if all_backend_servers:
for purge_backend_server in purge_backend_servers:
for all_backend_server in all_backend_servers:
if purge_backend_server[serverid_param] in all_backend_server['ServerId']:
delete_backend_servers.append(purge_backend_server)
delete_backend_servers_id.append(purge_backend_server[serverid_param])
break
for backend_server in backend_servers:
flag = False
for all_backend_server in all_backend_servers:
if backend_server[serverid_param] == all_backend_server['ServerId'] \
and backend_server[serverid_param] not in delete_backend_servers_id:
set_server_attribute.append(backend_server)
flag = True
break
if not flag:
add_backend_server.append(backend_server)
else:
add_backend_server.append(backend_servers[0])
if delete_backend_servers:
changed, result = self.remove_vserver_group_backend_server(vserver_group_id, delete_backend_servers)
if set_server_attribute:
changed, set_results = self.set_vservergroup_attribute(vserver_group_id, vserver_group_name=None,
backend_servers=set_server_attribute)
if add_backend_server:
changed, add_results = self.add_vservergroup_backend_server(vserver_group_id, add_backend_server)
changed = True
if set_results:
results = set_results
filter_backend_servers_id = set_results['BackendServers']['BackendServer']
if add_results:
results = add_results
filter_backend_servers_id += add_results['BackendServers']['BackendServer']
for backend_server in backend_servers:
flag = False
for filter_backend_servers in filter_backend_servers_id:
if filter_backend_servers["ServerId"] == backend_server[serverid_param] and\
filter_backend_servers["Port"] == backend_server["port"] and not flag:
flag = True
final_backend_servers_id.append(filter_backend_servers)
if final_backend_servers_id:
results['BackendServers']['BackendServer'] = final_backend_servers_id
if 'VServerGroupName' in results:
del results['VServerGroupName']
except Exception as ex:
error_code = str(ex.error_code)
error_msg = str(ex.message)
results.append({"Error Code": error_code, "Error Message": error_msg})
return changed, results