xuekailun 4 months ago
parent
commit
d0372cb78a

+ 3 - 0
.idea/.gitignore

@@ -0,0 +1,3 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml

+ 6 - 0
.idea/inspectionProfiles/profiles_settings.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <settings>
+    <option name="USE_PROJECT_PROFILE" value="false" />
+    <version value="1.0" />
+  </settings>
+</component>

+ 7 - 0
.idea/misc.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Black">
+    <option name="sdkName" value="Python 3.12" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12" project-jdk-type="Python SDK" />
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/scripts.iml" filepath="$PROJECT_DIR$/.idea/scripts.iml" />
+    </modules>
+  </component>
+</project>

+ 12 - 0
.idea/scripts.iml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="PYTHON_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="PyDocumentationSettings">
+    <option name="format" value="PLAIN" />
+    <option name="myDocStringFormat" value="Plain" />
+  </component>
+</module>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

+ 1 - 1
longvideoapi/longvideo_restart.py

@@ -1,7 +1,7 @@
 import logging
 import time
 import docker
-import longvideo_config
+import longvideoapi_config
 import utils
 from longvideo_update import server_health_check
 

+ 2 - 2
longvideoapi/longvideo_config.py → longvideoapi/longvideoapi_config.py

@@ -14,7 +14,7 @@ alb_client_params = {
     'region_id': 'cn-hangzhou'
 }
 # 购买机器权限
-create_client_params = {
+ecs_client_params = {
     'access_key_id': 'LTAI4GBWbFvvXoXsSVBe1o9f',
     'access_key_secret': 'kRAikWitb4kDxaAyBqNrmLmllMEDO3',
     'region_id': 'cn-hangzhou'
@@ -129,7 +129,7 @@ instance_config_k = {
     # 硬盘的大小,单位:G
     'disk_size': '200',
     # 服务器命名
-    'instance_name': 'ESS-vlogapi-[1,2]',
+    'instance_name': 'ESS-longvideoapi-alb-[1,2]',
     # 服务器所在区域
     'zone_id': 'cn-hangzhou-k',
     # 磁盘类型:云盘

+ 25 - 22
longvideoapi/longvideo_grayscale_update.py → longvideoapi/longvideoapi_grayscale_update.py

@@ -6,7 +6,7 @@ import utils
 import logging
 import os
 import docker
-import longvideo_config
+import longvideoapi_config
 
 from concurrent.futures import ThreadPoolExecutor
 
@@ -92,10 +92,10 @@ def remove_container_image(client, instance_id, container_name_list):
         except Exception as e:
             j += 1
 
-def update_instance(create_client, alb_client, instance_id, version):
+def update_instance(ecs_client, alb_client, instance_id, version):
     """
     线上机器更新
-    :param create_client:
+    :param ecs_client:
     :param alb_client: alb客户端连接
     :param instance_id: instanceId
     :param version: 版本标记
@@ -104,9 +104,9 @@ def update_instance(create_client, alb_client, instance_id, version):
     logging.info(f"update instance: {instance_id}")
     # 1. 摘流量,将权重降为0
     health_instance_ids = [instance_id]
-    weight_list = [(0, 10)]  # 设置权重为0,等待10
+    weight_list = [(0, 15)]  # 设置权重为0,等待15
     utils.set_instance_weight_process_with_alb(alb_client,
-                                               longvideo_config.server_group_id_list,
+                                               longvideoapi_config.server_group_id_list,
                                                health_instance_ids,
                                                weight_list)
     logging.info(f"Set weight to 0 for instance: {instance_id}")
@@ -123,13 +123,13 @@ def update_instance(create_client, alb_client, instance_id, version):
         sys.exit()
 
     # 3. 发送启动脚本到机器上
-    utils.send_file_to_ecs(client=create_client, instance_id_list=[instance_id], **longvideo_config.start_sh)
+    utils.send_file_to_ecs(ecs_client=ecs_client, instance_id_list=[instance_id], **longvideoapi_config.start_sh)
     logging.info(f"send start shell file finished, instance: {instance_id}")
 
     # 4. 启动服务
-    server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
+    server_start_sh = os.path.join(longvideoapi_config.start_sh['target_dir'], longvideoapi_config.start_sh['name'])
     server_start_command = f"sh {server_start_sh} {version}"
-    utils.run_command(client=create_client, instance_ids=[instance_id], command=server_start_command)
+    utils.run_command(ecs_client=ecs_client, instance_ids=[instance_id], command=server_start_command)
 
     # 5. 探活
     global health_instances
@@ -144,15 +144,16 @@ def update_instance(create_client, alb_client, instance_id, version):
     # 机器探活成功
     time.sleep(10)
     # 使用 ALB 的函数挂载实例
-    health_instance_ids = [instance_id for instance_id, _ in health_instances]
-    for server_group_id in longvideo_config.server_group_id_list:
-        for instance_id in health_instance_ids:
-            utils.add_servers_to_server_group(alb_client, server_group_id, instance_id, weight=0)
-            logging.info(f"Successfully added instance {instance_id} to server group {server_group_id}.")
+    # health_instance_ids = [instance_id for instance_id, _ in health_instances]
+    # todo
+    # for server_group_id in longvideoapi_config.server_group_id_list:
+    #     for instance_id in health_instance_ids:
+    #         utils.add_servers_to_server_group(alb_client, server_group_id, instance_id, weight=0)
+    #         logging.info(f"Successfully added instance {instance_id} to server group {server_group_id}.")
 
     add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
     utils.set_instance_weight_process_with_alb(alb_client,
-                                               longvideo_config.server_group_id_list,
+                                               longvideoapi_config.server_group_id_list,
                                                health_instance_ids,
                                                add_weight_list)
     logging.info(f"finished instances: {health_instances}, count: {len(health_instances)}")
@@ -161,16 +162,18 @@ def update_instance(create_client, alb_client, instance_id, version):
 def main():
     try:
         version = sys.argv[1]
-        alb_client = utils.connect_alb_client(access_key_id=longvideo_config.alb_client_params['access_key_id'],
-                                              access_key_secret=longvideo_config.alb_client_params['access_key_secret'])
-        create_client = utils.connect_client(access_key_id=longvideo_config.create_client_params['access_key_id'],
-                                             access_key_secret=longvideo_config.create_client_params[
+        alb_client = utils.connect_alb_client(access_key_id=longvideoapi_config.alb_client_params['access_key_id'],
+                                              access_key_secret=longvideoapi_config.alb_client_params['access_key_secret'])
+        # todo
+
+        ecs_client = utils.connect_client(access_key_id=longvideoapi_config.ecs_client_params['access_key_id'],
+                                             access_key_secret=longvideoapi_config.ecs_client_params[
                                                  'access_key_secret'],
-                                             region_id=longvideo_config.create_client_params['region_id'])
+                                             region_id=longvideoapi_config.ecs_client_params['region_id'])
 
         # 1. 获取ALB下所有机器
-        online_instance_ids = utils.get_instance_ids(client=alb_client,
-                                                     server_group_id=longvideo_config.server_group_id_list[0])
+        online_instance_ids = utils.get_instance_ids(alb_client=alb_client,
+                                                     server_group_id=longvideoapi_config.server_group_id_list[0])
         online_instance_count = len(online_instance_ids)
         logging.info(f"online instance count: {online_instance_count}.")
         logging.info(f"online instance ids: {online_instance_ids}")
@@ -178,7 +181,7 @@ def main():
         # 2. 对其中一台机器进行更新
         instance_id = online_instance_ids[0]
         logging.info(f"update instance start ...")
-        update_instance(create_client=create_client, alb_client=alb_client, instance_id=instance_id, version=version)
+        update_instance(ecs_client=ecs_client, alb_client=alb_client, instance_id=instance_id, version=version)
         logging.info(f"update instances end!")
 
     except Exception as e:

+ 19 - 17
longvideoapi/longvideo_reduce_with_count.py → longvideoapi/longvideoapi_reduce_with_count.py

@@ -1,7 +1,7 @@
 import sys
 import time
 import utils
-import longvideo_config
+import longvideoapi_config
 import logging
 
 logging.basicConfig(level=logging.INFO,
@@ -9,19 +9,20 @@ logging.basicConfig(level=logging.INFO,
                     datefmt='%a, %d %b %Y %H:%M:%S')
 
 
-def remove_instances(create_client, alb_client, instance_ids):
+def remove_instances(ecs_client, alb_client, instance_ids):
     """
     停止并释放机器
-    :param create_client: 创建客户端
+    :param ecs_client: 创建客户端
     :param alb_client: ALB 客户端
     :param instance_ids: instanceId 类型列表
     :return: None
     """
     # 1. 摘除流量
-    weight_list = [(0, 10)]  # 设置权重为0,等待10秒
+    # todo 20
+    weight_list = [(0, 20)]  # 设置权重为0,等待20秒
     try:
         utils.set_instance_weight_process_with_alb(alb_client,
-                                                   longvideo_config.server_group_id_list,
+                                                   longvideoapi_config.server_group_id_list,
                                                    instance_ids,
                                                    weight_list)
     except Exception as e:
@@ -32,7 +33,7 @@ def remove_instances(create_client, alb_client, instance_ids):
     time.sleep(10)
 
     # 2. 从 ALB 服务器组中移除实例
-    for server_group_id in longvideo_config.server_group_id_list:
+    for server_group_id in longvideoapi_config.server_group_id_list:
         try:
             utils.remove_servers_from_server_group(alb_client=alb_client, server_group_id=server_group_id,
                                                    instance_id=instance_ids)
@@ -43,7 +44,7 @@ def remove_instances(create_client, alb_client, instance_ids):
     logging.info(f"Remove from ALB finished, instances: {instance_ids}")
 
     # 3. 停止机器
-    stop_response = utils.stop_instances(client=create_client, instance_ids=instance_ids)
+    stop_response = utils.stop_instances(ecs_client=ecs_client, instance_ids=instance_ids)
     if stop_response.get('Code') is None:
         logging.info(f"Instances stop finished, instances: {instance_ids}")
     else:
@@ -52,7 +53,7 @@ def remove_instances(create_client, alb_client, instance_ids):
 
     # 4. 判断机器运行状态是否为 Stopped
     while True:
-        response = utils.get_instances_status(client=create_client, instance_ids=instance_ids)
+        response = utils.get_instances_status(ecs_client=ecs_client, instance_ids=instance_ids)
         if response.get('Code') is None:
             instances_list = response.get('InstanceStatuses').get('InstanceStatus')
             stopped_instances = [instance.get('InstanceId') for instance in instances_list if
@@ -68,7 +69,7 @@ def remove_instances(create_client, alb_client, instance_ids):
             sys.exit()
 
     # 5. 释放机器
-    release_response = utils.release_instances(client=create_client, instance_ids=stopped_instances)
+    release_response = utils.release_instances(ecs_client=ecs_client, instance_ids=stopped_instances)
     if release_response.get('Code') is None:
         logging.info(f"Release instances finished, instances: {stopped_instances}")
     else:
@@ -79,13 +80,14 @@ def remove_instances(create_client, alb_client, instance_ids):
 def main():
     try:
         alb_client = utils.connect_alb_client(
-            access_key_id=longvideo_config.alb_client_params['access_key_id'],
-            access_key_secret=longvideo_config.alb_client_params['access_key_secret']
+            access_key_id=longvideoapi_config.alb_client_params['access_key_id'],
+            access_key_secret=longvideoapi_config.alb_client_params['access_key_secret']
         )
-        create_client = utils.connect_client(
-            access_key_id=longvideo_config.create_client_params['access_key_id'],
-            access_key_secret=longvideo_config.create_client_params['access_key_secret'],
-            region_id=longvideo_config.create_client_params['region_id']
+        # todo
+        ecs_client = utils.connect_client(
+            access_key_id=longvideoapi_config.ecs_client_params['access_key_id'],
+            access_key_secret=longvideoapi_config.ecs_client_params['access_key_secret'],
+            region_id=longvideoapi_config.ecs_client_params['region_id']
         )
 
         # 获取指定释放的机器数量
@@ -93,7 +95,7 @@ def main():
         logging.info(f"reduce instances count: {reduce_count}")
 
         # 获取 ALB 下所有机器
-        online_instance_ids = utils.get_instance_ids(client=alb_client, server_group_id=longvideo_config.server_group_id_list[0])
+        online_instance_ids = utils.get_instance_ids(alb_client=alb_client, server_group_id=longvideoapi_config.server_group_id_list[0])
         online_instance_count = len(online_instance_ids)
         logging.info(f"online instance count: {online_instance_count}.")
         logging.info(f"online instance ids: {online_instance_ids}")
@@ -103,7 +105,7 @@ def main():
         logging.info(f"reduce instances: {reduce_instance_ids}")
 
         # 停止并释放机器
-        remove_instances(create_client=create_client, alb_client=alb_client, instance_ids=reduce_instance_ids)
+        remove_instances(ecs_client=ecs_client, alb_client=alb_client, instance_ids=reduce_instance_ids)
         logging.info(f"stop & release instances end!")
     except Exception as e:
         logging.error(e)

+ 17 - 18
longvideoapi/ess_longvideo_k.py → longvideoapi/longvideoapi_scaling_k_count.py

@@ -6,7 +6,7 @@ import time
 import requests
 
 import utils
-import longvideo_config
+import longvideoapi_config
 
 from concurrent.futures import ThreadPoolExecutor
 
@@ -48,10 +48,10 @@ def longvideo_health_check(client, instance_id, max_wait_time=None):
             time.sleep(10)
 
 
-async def ess_instance(create_client, alb_client, ess_count, max_workers):
+async def ess_instance(ecs_client, alb_client, ess_count, max_workers):
     """
     扩容机器并运行新服务
-    :param create_client: 购买机器客户端连接
+    :param ecs_client: 购买机器客户端连接
     :param alb_client: 修改负载均衡权限
     :param ess_count: 扩容数量
     :param max_workers: 线程数
@@ -60,25 +60,25 @@ async def ess_instance(create_client, alb_client, ess_count, max_workers):
     # 1. 购买机器并启动
     ess_instance_ids = utils.create_multiple_instances(
         amount=ess_count,
-        client=create_client,
-        **longvideo_config.instance_config_k,
+        client=ecs_client,
+        **longvideoapi_config.instance_config_k,
     )
     time.sleep(60)
 
     # 2. 发送启动脚本到机器上
-    utils.send_file_to_ecs(client=create_client, instance_id_list=ess_instance_ids, **longvideo_config.start_sh)
+    utils.send_file_to_ecs(client=ecs_client, instance_id_list=ess_instance_ids, **longvideoapi_config.start_sh)
     logging.info(f"send start shell file finished, instances: {ess_instance_ids}")
     # 3. 启动服务
     start_sh_param = "latest"
-    server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
+    server_start_sh = os.path.join(longvideoapi_config.start_sh['target_dir'], longvideoapi_config.start_sh['name'])
     server_start_commend = f"sh {server_start_sh} {start_sh_param}"
-    utils.run_command(client=create_client, instance_ids=ess_instance_ids, command=server_start_commend)
+    utils.run_command(client=ecs_client, instance_ids=ess_instance_ids, command=server_start_commend)
     # 4. 异步探活
     global health_instances
     health_instances = []
     max_wait_time = 180
     loop = asyncio.get_running_loop()
-    executor = ThreadPoolExecutor(max_workers=max_workers)
+    executor = ThreadPoolExecutor(max_workers=max_workers) # todo
     tasks = [
         loop.run_in_executor(executor, longvideo_health_check, *args) for args in
         [(alb_client, instance_id, max_wait_time) for instance_id in ess_instance_ids]
@@ -91,10 +91,8 @@ async def ess_instance(create_client, alb_client, ess_count, max_workers):
         # 所有机器探活成功
         time.sleep(20)
         for instance_id, ip in health_instances:
-            for server_group_id in longvideo_config.server_group_id_list:
+            for server_group_id in longvideoapi_config.server_group_id_list:
                 utils.add_servers_to_server_group(alb_client, server_group_id, instance_id, weight=100)
-
-
         logging.info(f"ess count: {ess_count}, "
                      f"create count: {len(ess_instance_ids)}, "
                      f"finished count: {len(health_instances)}")
@@ -106,19 +104,20 @@ async def ess_instance(create_client, alb_client, ess_count, max_workers):
 
 def main():
     try:
-        create_client = utils.connect_client(access_key_id=longvideo_config.create_client_params['access_key_id'],
-                                             access_key_secret=longvideo_config.create_client_params['access_key_secret'],
-                                             region_id=longvideo_config.create_client_params['region_id'])
+        ecs_client = utils.connect_client(access_key_id=longvideoapi_config.ecs_client_params['access_key_id'],
+                                             access_key_secret=longvideoapi_config.ecs_client_params['access_key_secret'],
+                                             region_id=longvideoapi_config.ecs_client_params['region_id'])
         alb_client = utils.connect_alb_client(
-            access_key_id=longvideo_config.slb_client_params['access_key_id'],
-            access_key_secret=longvideo_config.slb_client_params['access_key_secret']
+            access_key_id=longvideoapi_config.alb_client_params['access_key_id'],
+            access_key_secret=longvideoapi_config.alb_client_params['access_key_secret']  # todo
+
         )
         # 获取批量创建ECS实例的数量
         ess_instance_count = int(sys.argv[1])
         # 扩容机器并启动服务
         logging.info(f"ess instances start ...")
         logging.info(f"ess instance count: {ess_instance_count}")
-        asyncio.run(ess_instance(create_client=create_client,
+        asyncio.run(ess_instance(ecs_client=ecs_client,
                                  alb_client=alb_client,
                                  ess_count=ess_instance_count, max_workers=2))
         logging.info(f"ess instances end!")

+ 42 - 41
longvideoapi/longvideo_update_k.py → longvideoapi/longvideoapi_update_k.py

@@ -6,7 +6,7 @@ import utils
 import logging
 import os
 import docker
-import longvideo_config
+import longvideoapi_config
 
 from concurrent.futures import ThreadPoolExecutor
 
@@ -24,7 +24,7 @@ def server_health_check(client, instance_id):
     :return:
     """
     global health_instances
-    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
+    ip_address = utils.get_ip_address(ecs_client=ecs_client, instance_id=instance_id)
     while True:
         health_check_url = f"http://{ip_address}:8080/longvideoapi/test"
         try:
@@ -41,11 +41,11 @@ def server_health_check(client, instance_id):
             time.sleep(10)
 
 
-async def ess_instance(create_client, alb_client, ess_count, max_workers, version):
+async def ess_instance(ecs_client, alb_client, ess_count, max_workers, version):
     """
     扩容机器并运行新服务
-    :param create_client: 购买机器客户端连接
-    :param slb_client: 修改负载均衡权限
+    :param ecs_client: 购买机器客户端连接
+    :param alb_client: 修改负载均衡权限
     :param ess_count: 扩容数量
     :param max_workers: 线程数
     :param version: 版本标记
@@ -54,18 +54,18 @@ async def ess_instance(create_client, alb_client, ess_count, max_workers, versio
     # 1. 购买机器并启动
     ess_instance_ids = utils.create_multiple_instances(
         amount=ess_count,
-        client=create_client,
-        **longvideo_config.instance_config_k,
+        ecs_client=ecs_client,
+        **longvideoapi_config.instance_config_k,
     )
     time.sleep(60)
 
     # 2. 发送启动脚本到机器上
-    utils.send_file_to_ecs(client=create_client, instance_id_list=ess_instance_ids, **longvideo_config.start_sh)
+    utils.send_file_to_ecs(ecs_client=ecs_client, instance_id_list=ess_instance_ids, **longvideoapi_config.start_sh)
     logging.info(f"send start shell file finished, instances: {ess_instance_ids}")
     # 3. 启动服务
-    server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
+    server_start_sh = os.path.join(longvideoapi_config.start_sh['target_dir'], longvideoapi_config.start_sh['name'])
     server_start_commend = f"sh {server_start_sh} {version}"
-    utils.run_command(client=create_client, instance_ids=ess_instance_ids, command=server_start_commend)
+    utils.run_command(ecs_client=ecs_client, instance_ids=ess_instance_ids, command=server_start_commend)
     # 4. 异步探活
     global health_instances
     health_instances = []
@@ -82,29 +82,29 @@ async def ess_instance(create_client, alb_client, ess_count, max_workers, versio
         # 所有机器探活成功
         time.sleep(10)
         health_instance_ids = [instance_id for instance_id, _ in health_instances]
-        for server_group_id in longvideo_config.server_group_id_list:
+        for server_group_id in longvideoapi_config.server_group_id_list:
             for instance_id in health_instance_ids:
                 utils.add_servers_to_server_group(alb_client, server_group_id, instance_id, weight=0)
                 logging.info(f"Successfully added instance {instance_id} to server group {server_group_id}.")
 
         add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
         utils.set_instance_weight_process_with_alb(alb_client,
-                                                   longvideo_config.server_group_id_list,
+                                                   longvideoapi_config.server_group_id_list,
                                                    health_instance_ids,
                                                    add_weight_list)
         logging.info(f"finished instances: {health_instances}, count: {len(health_instances)}")
 
 
 
-def remove_container_image(client, instance_id, container_name_list):
+def remove_container_image(ecs_client, instance_id, container_name_list):
     """
     移除旧容器并删除旧镜像
-    :param client: 客户端连接
+    :param ecs_client: 客户端连接
     :param instance_id: instanceId type-string
     :param container_name: 容器名称 type-string
     :return:
     """
-    ip_address = utils.get_ip_address(client=client, instance_id=instance_id)
+    ip_address = utils.get_ip_address(ecs_client=ecs_client, instance_id=instance_id)
     logging.info(f"服务器信息:{instance_id}/{ip_address}")
     client = docker.DockerClient(base_url=f'tcp://{ip_address}:2375', timeout=60)
     # 移除旧的容器
@@ -148,10 +148,10 @@ def remove_container_image(client, instance_id, container_name_list):
             i += 1
 
 
-async def update_instance(create_client, alb_client, instance_ids, max_workers, version):
+async def update_instance(ecs_client, alb_client, instance_ids, max_workers, version):
     """
     线上机器更新
-    :param create_client:
+    :param ecs_client:
     :param alb_client: slb客户端连接
     :param instance_ids: instanceId type-list
     :param max_workers:
@@ -165,7 +165,7 @@ async def update_instance(create_client, alb_client, instance_ids, max_workers,
         logging.info(f"update instances: {instance_id_list}")
         # 1. 摘流量
         utils.set_instance_weight_process_with_alb(alb_client=alb_client,
-                                                    server_group_id_list=longvideo_config.server_group_id_list,
+                                                    server_group_id_list=longvideoapi_config.server_group_id_list,
                                                     instance_id_list=instance_id_list,
                                                     weight_list=[(0, 15)])
         logging.info(f"set weight with 0 finished, instances: {instance_id_list}")
@@ -188,12 +188,12 @@ async def update_instance(create_client, alb_client, instance_ids, max_workers,
                           f"request count: {len(instance_id_list)}, removed count: {len(remove_container_instances)}")
             sys.exit()
         # 3. 发送启动脚本到机器上
-        utils.send_file_to_ecs(client=create_client, instance_id_list=instance_id_list, **longvideo_config.start_sh)
+        utils.send_file_to_ecs(ecs_client=ecs_client, instance_id_list=instance_id_list, **longvideoapi_config.start_sh)
         logging.info(f"send start shell file finished, instances: {instance_id_list}, count: {len(instance_id_list)}")
         # 4. 启动服务
-        server_start_sh = os.path.join(longvideo_config.start_sh['target_dir'], longvideo_config.start_sh['name'])
+        server_start_sh = os.path.join(longvideoapi_config.start_sh['target_dir'], longvideoapi_config.start_sh['name'])
         server_start_commend = f"sh {server_start_sh} {version}"
-        utils.run_command(client=create_client, instance_ids=instance_id_list, command=server_start_commend)
+        utils.run_command(ecs_client=ecs_client, instance_ids=instance_id_list, command=server_start_commend)
         # 5. 异步探活
         global health_instances
         health_instances = []
@@ -210,14 +210,14 @@ async def update_instance(create_client, alb_client, instance_ids, max_workers,
             # 所有机器探活成功
             time.sleep(10)
             health_instance_ids = [instance_id for instance_id, _ in health_instances]
-            for server_group_id in longvideo_config.server_group_id_list:
-                for instance_id in health_instance_ids:
-                    utils.add_servers_to_server_group(alb_client, server_group_id, instance_id, weight=100)  # 设定权重为100
-                    logging.info(f"Successfully added instance {instance_id} to server group {server_group_id}.")
+            # for server_group_id in longvideoapi_config.server_group_id_list:
+            #     for instance_id in health_instance_ids:
+            #         utils.add_servers_to_server_group(alb_client, server_group_id, instance_id, weight=0)
+            #        logging.info(f"Successfully added instance {instance_id} to server group {server_group_id}.")
 
             add_weight_list = [(10, 5), (20, 5), (40, 5), (60, 5), (80, 5), (100, 5)]
             utils.set_instance_weight_process_with_alb(alb_client,
-                                                       longvideo_config.server_group_id_list,
+                                                       longvideoapi_config.server_group_id_list,
                                                        health_instance_ids,
                                                        add_weight_list)
             logging.info(f"finished instances: {health_instances}, count: {len(health_instances)}")
@@ -228,7 +228,7 @@ async def update_instance(create_client, alb_client, instance_ids, max_workers,
             sys.exit()
 
 
-def remove_instances(create_client, alb_client, instance_ids):
+def remove_instances(ecs_client, alb_client, instance_ids):
     """
     停止并释放机器
     :param create_client:
@@ -238,9 +238,10 @@ def remove_instances(create_client, alb_client, instance_ids):
     """
     # 1. 摘流量
     weight_list = [(0, 10)]  # 设置权重为0,等待10秒
+    # todo
     try:
         utils.set_instance_weight_process_with_alb(alb_client,
-                                                   longvideo_config.server_group_id_list,
+                                                   longvideoapi_config.server_group_id_list,
                                                    instance_ids,
                                                    weight_list)
     except Exception as e:
@@ -249,7 +250,7 @@ def remove_instances(create_client, alb_client, instance_ids):
 
     time.sleep(10)
     # 2.移除alb
-    for server_group_id in longvideo_config.server_group_id_list:
+    for server_group_id in longvideoapi_config.server_group_id_list:
         try:
             utils.remove_servers_from_server_group(alb_client=alb_client, server_group_id=server_group_id,
                                                    instance_id=instance_ids)
@@ -260,7 +261,7 @@ def remove_instances(create_client, alb_client, instance_ids):
     logging.info(f"Remove from ALB finished, instances: {instance_ids}")
 
     # 3. 停止机器
-    stop_response = utils.stop_instances(client=create_client, instance_ids=instance_ids)
+    stop_response = utils.stop_instances(ecs_client=ecs_client, instance_ids=instance_ids)
     if stop_response.get('Code') is None:
         logging.info(f"Instances stop finished, instances: {instance_ids}")
     else:
@@ -269,7 +270,7 @@ def remove_instances(create_client, alb_client, instance_ids):
 
     # 4. 判断机器运行状态是否为Stopped
     while True:
-        response = utils.get_instances_status(client=create_client, instance_ids=instance_ids)
+        response = utils.get_instances_status(ecs_client=ecs_client, instance_ids=instance_ids)
         if response.get('Code') is None:
             instances_list = response.get('InstanceStatuses').get('InstanceStatus')
             stopped_instances = [instance.get('InstanceId') for instance in instances_list if
@@ -284,7 +285,7 @@ def remove_instances(create_client, alb_client, instance_ids):
             logging.error(response)
             sys.exit()
     # 5. 释放机器
-    release_response = utils.release_instances(client=create_client, instance_ids=stopped_instances)
+    release_response = utils.release_instances(ecs_client=ecs_client, instance_ids=stopped_instances)
     if release_response.get('Code') is None:
         logging.info(f"Release instances finished, instances: {stopped_instances}")
     else:
@@ -296,15 +297,15 @@ def remove_instances(create_client, alb_client, instance_ids):
 def main():
     try:
         version = sys.argv[1]
-        alb_client = utils.connect_client(access_key_id=longvideo_config.alb_client_params['access_key_id'],
-                                          access_key_secret=longvideo_config.alb_client_params['access_key_secret'],
-                                          region_id=longvideo_config.alb_client_params['region_id'])
-        create_client = utils.connect_client(access_key_id=longvideo_config.create_client_params['access_key_id'],
-                                             access_key_secret=longvideo_config.create_client_params['access_key_secret'],
-                                             region_id=longvideo_config.create_client_params['region_id'])
+        alb_client = utils.connect_client(access_key_id=longvideoapi_config.alb_client_params['access_key_id'],
+                                          access_key_secret=longvideoapi_config.alb_client_params['access_key_secret'],
+                                          region_id=longvideoapi_config.alb_client_params['region_id'])
+        create_client = utils.connect_client(access_key_id=longvideoapi_config.ecs_client_params['access_key_id'],
+                                             access_key_secret=longvideoapi_config.ecs_client_params['access_key_secret'],
+                                             region_id=longvideoapi_config.ecs_client_params['region_id'])
 
         # 1. 获取slb下所有机器
-        online_instance_ids = utils.get_instance_ids(client=alb_client, server_group_id=longvideo_config.server_group_id_list[0])
+        online_instance_ids = utils.get_instance_ids(alb_client=alb_client, server_group_id=longvideoapi_config.server_group_id_list[0])
         online_instance_count = len(online_instance_ids)
         logging.info(f"online instance count: {online_instance_count}.")
         logging.info(f"online instance ids: {online_instance_ids}")
@@ -313,13 +314,13 @@ def main():
         logging.info(f"ess instances start ...")
         ess_instance_count = online_instance_count // 2
         logging.info(f"ess instance count: {ess_instance_count}")
-        asyncio.run(ess_instance(create_client=create_client, alb_client=alb_client,
+        asyncio.run(ess_instance(ecs_client=ecs_client, alb_client=alb_client,
                                  ess_count=ess_instance_count, max_workers=2, version=version))
         logging.info(f"ess instances end!")
 
         # 3. 原有机器进行更新
         logging.info(f"update online instances start ...")
-        asyncio.run(update_instance(create_client=create_client, alb_client=alb_client,
+        asyncio.run(update_instance(ecs_client=ecs_client, alb_client=alb_client,
                                     instance_ids=online_instance_ids, max_workers=8, version=version))
         logging.info(f"update online instances end!")
 

+ 24 - 24
utils.py

@@ -89,16 +89,16 @@ def build_create_instances_request(image_id, vswitch_id, security_group_id, zone
     return request
 
 
-def send_request(client, request):
+def send_request(ecs_client, request):
     """
     发送API请求
-    :param client: 客户端连接
+    :param ecs_client: 客户端连接
     :param request: 请求配置
     :return: response
     """
     request.set_accept_format('json')
     try:
-        response = client.do_action_with_exception(request)
+        response = ecs_client.do_action_with_exception(request)
         response = json.loads(response)
         # logging.info(response)
         return response
@@ -208,10 +208,10 @@ def create_multiple_instances(amount, client,
         sys.exit()
 
 
-def run_command(client, instance_ids, command):
+def run_command(ecs_client, instance_ids, command):
     """
     批量执行命令
-    :param client: 客户端连接
+    :param ecs_client: 客户端连接
     :param instance_ids: 实例id列表, type-list, 最多能指定50台ECS实例ID
     :param command: 命令 type-string
     :return:
@@ -225,7 +225,7 @@ def run_command(client, instance_ids, command):
         request.set_Type("RunShellScript")
         request.set_CommandContent(command)
         request.set_InstanceIds(instance_id_list)
-        response = send_request(client=client, request=request)
+        response = send_request(ecs_client=ecs_client, request=request)
         logging.info(response)
 
 def run_per_command(client, instance, command):
@@ -247,10 +247,10 @@ def run_per_command(client, instance, command):
     return response
 
 
-def get_instance_ids(client, server_group_id):
+def get_instance_ids(alb_client, server_group_id):
     """
     获取指定服务器组下所有服务器的instanceId
-    :param client: 客户端连接
+    :param alb_client: 客户端连接
     :param server_group_id: 服务器组ID type-string
     :return: instance_ids type-list
     """
@@ -258,23 +258,23 @@ def get_instance_ids(client, server_group_id):
         server_group_id=server_group_id
     )
     runtime = util_models.RuntimeOptions()
-    response = client.list_server_group_servers_with_options(request, runtime)
+    response = alb_client.list_server_group_servers_with_options(request, runtime)
 
     instance_ids = [server["ServerId"] for server in response["Servers"]["Server"]]
     return instance_ids
 
 
-def get_ip_address(client, instance_id):
+def get_ip_address(ecs_client, instance_id):
     """
     获取实例IP地址
-    :param client: 客户端连接
+    :param ecs_client: 客户端连接
     :param instance_id: 实例id, type-string
     :return: ip_address, type-string
     """
     request = DescribeNetworkInterfacesRequest()
     request.set_accept_format('json')
     request.set_InstanceId(instance_id)
-    response = send_request(client=client, request=request)
+    response = send_request(ecs_client=ecs_client, request=request)
     ip_address = response['NetworkInterfaceSets']['NetworkInterfaceSet'][0]['PrivateIpAddress']
     return ip_address
 
@@ -370,10 +370,10 @@ def remove_servers_from_server_group(alb_client, server_group_id, instance_id):
 
 
 
-def send_file_to_ecs(client, instance_id_list, target_dir, name, content):
+def send_file_to_ecs(ecs_client, instance_id_list, target_dir, name, content):
     """
     发送文件到ecs
-    :param client:
+    :param ecs_client:
     :param instance_id_list: 最多能指定50台ECS实例ID
     :param target_dir: 文件存放目录 type-string
     :param name: 文件名 type-string
@@ -390,13 +390,13 @@ def send_file_to_ecs(client, instance_id_list, target_dir, name, content):
         request.set_Name(name)
         request.set_Overwrite(True)
         request.set_InstanceIds(instance_ids)
-        response = send_request(client=client, request=request)
+        response = send_request(ecs_client=ecs_client, request=request)
 
 
-def stop_instances(client, instance_ids, force_stop=False):
+def stop_instances(ecs_client, instance_ids, force_stop=False):
     """
     停止实例
-    :param client:
+    :param ecs_client:
     :param instance_ids: 实例ID, type-list
     :param force_stop: 是否强制关机, True-强制关机, False-正常关机, type-bool
     :return:
@@ -404,14 +404,14 @@ def stop_instances(client, instance_ids, force_stop=False):
     request = StopInstancesRequest()
     request.set_InstanceIds(instance_ids)
     request.set_ForceStop(force_stop)
-    response = send_request(client=client, request=request)
+    response = send_request(ecs_client=ecs_client, request=request)
     return response
 
 
-def release_instances(client, instance_ids, force=False):
+def release_instances(ecs_client, instance_ids, force=False):
     """
     释放实例
-    :param client:
+    :param ecs_client:
     :param instance_ids: instance_id, type-list
     :param force: 是否强制释放, True-强制释放, False-正常释放, type-bool
     :return:
@@ -419,21 +419,21 @@ def release_instances(client, instance_ids, force=False):
     request = DeleteInstancesRequest()
     request.set_InstanceIds(instance_ids)
     request.set_Force(force)
-    response = send_request(client=client, request=request)
+    response = send_request(ecs_client=ecs_client, request=request)
     return response
 
 
-def get_instances_status(client, instance_ids):
+def get_instances_status(ecs_client, instance_ids):
     """
     获取实例运行状态
-    :param client:
+    :param ecs_client:
     :param instance_ids: instance_id, type-liist
     :return:
     """
     request = DescribeInstanceStatusRequest()
     request.set_InstanceIds(instance_ids)
     request.set_PageSize(50)
-    response = send_request(client=client, request=request)
+    response = send_request(ecs_client=ecs_client, request=request)
     return response