Browse Source

add remove backend servers

liqian 2 years ago
parent
commit
7ff2c9aacd
3 changed files with 63 additions and 9 deletions
  1. 7 3
      longvideo_update.py
  2. 5 3
      rov_server_update.py
  3. 51 3
      utils.py

+ 7 - 3
longvideo_update.py

@@ -237,10 +237,14 @@ def remove_instances(create_client, slb_client, instance_ids):
                                                 weight_list=[(0, 60)])
     logging.info(f"set weight = 0 finished, instances: {instance_ids}")
     time.sleep(10)
-    # 2. 停止机器
+    # 2.移除slb
+    utils.remove_backend_servers_with_slbs(client=slb_client,
+                                           slb_id_list=longvideo_config.slb_id_list,
+                                           instances=instance_ids)
+    # 3. 停止机器
     utils.stop_instances(client=create_client, instance_ids=instance_ids)
     logging.info(f"instances stop finished, instances: {instance_ids}")
-    # 3. 判断机器运行状态是否为Stopped
+    # 4. 判断机器运行状态是否为Stopped
     while True:
         response = utils.get_instances_status(client=create_client, instance_ids=instance_ids)
         if response.get('Code') is None:
@@ -257,7 +261,7 @@ def remove_instances(create_client, slb_client, instance_ids):
         else:
             logging.error(response)
             sys.exit()
-    # 4. 释放机器
+    # 5. 释放机器
     response = utils.release_instances(client=create_client, instance_ids=stopped_instances)
     if response.get('Code') is None:
         logging.info(f"release instances finished, instances: {stopped_instances}")

+ 5 - 3
rov_server_update.py

@@ -257,10 +257,12 @@ def remove_instances(create_client, slb_client, instance_ids):
                                       weight_list=[(0, 60)])
     logging.info(f"set weight = 0 finished, instances: {instance_ids}")
     time.sleep(10)
-    # 2. 停止机器
+    # 2.移除slb
+    utils.remove_backend_servers(client=slb_client, slb_id=rov_server_config.slb_id, instances=instance_ids)
+    # 3. 停止机器
     utils.stop_instances(client=create_client, instance_ids=instance_ids)
     logging.info(f"instances stop finished, instances: {instance_ids}")
-    # 3. 判断机器运行状态是否为Stopped
+    # 4. 判断机器运行状态是否为Stopped
     while True:
         response = utils.get_instances_status(client=create_client, instance_ids=instance_ids)
         if response.get('Code') is None:
@@ -277,7 +279,7 @@ def remove_instances(create_client, slb_client, instance_ids):
         else:
             logging.error(response)
             sys.exit()
-    # 4. 释放机器
+    # 5. 释放机器
     response = utils.release_instances(client=create_client, instance_ids=stopped_instances)
     if response.get('Code') is None:
         logging.info(f"release instances finished, instances: {stopped_instances}")

+ 51 - 3
utils.py

@@ -7,6 +7,7 @@ import asyncio
 
 from aliyunsdkcore.client import AcsClient
 from aliyunsdkslb.request.v20140515.AddBackendServersRequest import AddBackendServersRequest
+from aliyunsdkslb.request.v20140515.RemoveBackendServersRequest import RemoveBackendServersRequest
 from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest
 from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
 from aliyunsdkecs.request.v20140526.DescribeNetworkInterfacesRequest import DescribeNetworkInterfacesRequest
@@ -345,12 +346,35 @@ def add_backend_servers(client, slb_id, instances):
     :param instances: 实例列表 [(instance_id, ip), ...]
     :return:
     """
-    request = AddBackendServersRequest()
+    try:
+        request = AddBackendServersRequest()
+        request.set_accept_format('json')
+        request.set_LoadBalancerId(slb_id)
+        backend_servers = [
+            {"ServerId": instance_id, "Weight": "0", "Type": "ecs", "ServerIp": ip_address}
+            for instance_id, ip_address in instances]
+        request.set_BackendServers(backend_servers)
+        response = client.do_action_with_exception(request)
+        return response
+    except Exception as e:
+        logging.error(e)
+        sys.exit()
+
+
+def remove_backend_servers(client, slb_id, instances):
+    """
+    服务器从负载均衡移除(一次调用最多可以移除20个后端服务器)
+    :param client:
+    :param slb_id:
+    :param instances: 实例列表 [(instance_id, ip), ...]
+    :return:
+    """
+    request = RemoveBackendServersRequest()
     request.set_accept_format('json')
     request.set_LoadBalancerId(slb_id)
     backend_servers = [
-        {"ServerId": instance_id, "Weight": "0", "Type": "ecs", "ServerIp": ip_address}
-        for instance_id, ip_address in instances]
+        {"ServerId": instance_id, "Weight": "0", "Type": "ecs"}
+        for instance_id in instances]
     request.set_BackendServers(backend_servers)
     response = client.do_action_with_exception(request)
     return response
@@ -402,3 +426,27 @@ def add_backend_servers_with_slbs(client, slb_id_list, instances):
     except Exception as e:
         logging.error(e)
         sys.exit()
+
+
+def remove_backend_servers_with_slbs(client, slb_id_list, instances):
+    """
+    服务器从负载均衡移除(一次调用最多可以移除20个后端服务器)
+    :param client:
+    :param slb_id_list:
+    :param instances: 实例列表 [(instance_id, ip), ...]
+    :return:
+    """
+    try:
+        for slb_id in slb_id_list:
+            request = RemoveBackendServersRequest()
+            request.set_accept_format('json')
+            request.set_LoadBalancerId(slb_id)
+            backend_servers = [
+                {"ServerId": instance_id, "Weight": "0", "Type": "ecs"}
+                for instance_id in instances]
+            request.set_BackendServers(backend_servers)
+            response = client.do_action_with_exception(request)
+            logging.info(f"slb: {slb_id} remove backend servers finished!")
+    except Exception as e:
+        logging.error(e)
+        sys.exit()