Selaa lähdekoodia

add alb weight

xuekailun 5 kuukautta sitten
vanhempi
commit
63cb5e9e94
1 muutettua tiedostoa jossa 51 lisäystä ja 77 poistoa
  1. 51 77
      utils.py

+ 51 - 77
utils.py

@@ -21,9 +21,9 @@ from aliyunsdkcore.request import CommonRequest
 from alibabacloud_alb20200616.client import Client as Alb20200616Client
 from alibabacloud_tea_openapi import models as open_api_models
 from alibabacloud_alb20200616 import models as alb_models
+from alibabacloud_alb20200616 import models as alb_20200616_models
 from alibabacloud_tea_util import models as util_models
 
-
 logging.basicConfig(level=logging.INFO,
                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                     datefmt='%a, %d %b %Y %H:%M:%S')
@@ -247,18 +247,20 @@ def run_per_command(client, instance, command):
     return response
 
 
-def get_instance_ids(client, slb_id):
+def get_instance_ids(client, server_group_id):
     """
-    获取slb下所有服务器instanceId
+    获取指定服务器组下所有服务器的instanceId
     :param client: 客户端连接
-    :param slb_id: 负载均衡id type-string
+    :param server_group_id: 服务器组ID type-string
     :return: instance_ids type-list
     """
-    request = DescribeLoadBalancerAttributeRequest()
-    request.set_accept_format('json')
-    request.set_LoadBalancerId(slb_id)
-    response = send_request(client=client, request=request)
-    instance_ids = [instance["ServerId"] for instance in response["BackendServers"]["BackendServer"]]
+    request = alb_20200616_models.ListServerGroupServersRequest(
+        server_group_id=server_group_id
+    )
+    runtime = util_models.RuntimeOptions()
+    response = client.list_server_group_servers_with_options(request, runtime)
+
+    instance_ids = [server["ServerId"] for server in response["Servers"]["Server"]]
     return instance_ids
 
 
@@ -511,85 +513,57 @@ def remove_backend_servers(client, slb_id, instances):
         sys.exit()
 
 
-def set_instance_weight_process_with_slbs(client, slb_id_list, instance_id_list, weight_list):
+def set_weight_for_instances_alb(alb_client, server_group_id, instance_id_list, weights):
     """
-    修改服务器的权重值
-    :param client: slb客户端连接
-    :param slb_id_list: slb id list
-    :param instance_id_list: instance id list
+    设置ALB服务器组中实例的权重
+    :param alb_client: ALB客户端连接
+    :param server_group_id: 服务器组ID
+    :param instance_id_list: 实例ID列表
+    :param weights: 权重列表
+    :return: None
+    """
+    servers = []
+    for instance_id, weight in zip(instance_id_list, weights):
+        server = alb_models.AddServersToServerGroupRequestServers(
+            server_id=instance_id,
+            server_type='ecs',
+            weight=weight
+        )
+        servers.append(server)
+
+    request = alb_models.AddServersToServerGroupRequest(
+        server_group_id=server_group_id,
+        servers=servers
+    )
+
+    runtime = util_models.RuntimeOptions()
+    try:
+        alb_client.add_servers_to_server_group_with_options(request, runtime)
+        logging.info(f"Successfully set weights for instances in server group {server_group_id}.")
+    except Exception as e:
+        logging.error(f"Failed to set weights for instances: {str(e)}")
+
+def set_instance_weight_process_with_alb(alb_client, server_group_id_list, instance_id_list, weight_list):
+    """
+    修改ALB服务器组中实例的权重值
+    :param alb_client: ALB客户端连接
+    :param server_group_id_list: 服务器组ID列表
+    :param instance_id_list: 实例ID列表
     :param weight_list: 权重修改列表 type-list [(weight, sleep_time), ...]
     :return:
     """
     for weight, sleep_time in weight_list:
         logging.info(f"修改权重中: weight = {weight}")
-        for slb_id in slb_id_list:
+        for server_group_id in server_group_id_list:
             flag = True
             while flag:
                 try:
-                    set_weight_for_instances(client=client, slb_id=slb_id, instance_id_list=instance_id_list, weight=weight)
-                    logging.info(f"slb: {slb_id} finished!")
+                    # 使用新的权重设置函数
+                    set_weight_for_instances_alb(alb_client, server_group_id, instance_id_list, [weight] * len(instance_id_list))
+                    logging.info(f"服务器组: {server_group_id} 权重设置完成!")
                     flag = False
                 except Exception as e:
+                    logging.error(f"更新权重失败: {e}, 将重试...")
                     time.sleep(10)
                     continue
         time.sleep(sleep_time)
-
-
-def add_backend_servers_with_slbs(client, slb_id_list, instances):
-    """
-    服务器挂载到负载均衡(必须是状态为运行中的后端服务器才可以加入负载均衡实例,每次调用最多可添加20个后端服务器)
-    :param client:
-    :param slb_id_list:
-    :param instances: 实例列表 [(instance_id, ip), ...]
-    :return:
-    """
-    try:
-        for i in range(len(instances)//20 + 1):
-            instances_list = instances[i*20:(i+1)*20]
-            if len(instances_list) == 0:
-                return
-            for slb_id in slb_id_list:
-                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_list]
-                request.set_BackendServers(backend_servers)
-                response = client.do_action_with_exception(request)
-                logging.info(f"slb: {slb_id} add backend servers finished!")
-            logging.info(f"i: {i}, count: {len(instances_list)}, instances: {instances_list} "
-                         f"add backend servers finished!")
-    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, ...]
-    :return:
-    """
-    try:
-        for i in range(len(instances)//20 + 1):
-            instances_list = instances[i*20:(i+1)*20]
-            if len(instances_list) == 0:
-                return
-            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_list]
-                request.set_BackendServers(backend_servers)
-                response = client.do_action_with_exception(request)
-                logging.info(f"slb: {slb_id} remove backend servers finished!")
-            logging.info(f"i: {i}, count: {len(instances_list)}, instances: {instances_list} "
-                         f"remove backend servers finished!")
-    except Exception as e:
-        logging.error(e)
-        sys.exit()