utils.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import logging
  2. from typing import List
  3. from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
  4. from alibabacloud_ecs20140526 import models as ecs_20140526_models
  5. from alibabacloud_tea_util import models as util_models
  6. from alibabacloud_tea_util.client import Client as UtilClient
  7. import config
  8. # 发送文件到ECS实例
  9. def send_file_to_ecs(client: Ecs20140526Client, instance_id_list: List[str], target_dir: str, name: str, content: str) -> None:
  10. for instance_id in instance_id_list: # 遍历实例ID列表
  11. describe_instance_attribute_request = ecs_20140526_models.DescribeInstanceAttributeRequest( # 创建查询实例属性的请求
  12. instance_id=instance_id # 实例ID
  13. )
  14. runtime = util_models.RuntimeOptions() # 创建运行时选项
  15. response = client.describe_instance_attribute_with_options(describe_instance_attribute_request, runtime) # 调用ECS客户端的查询实例属性方法
  16. vpc_attributes = response.body.vpc_attributes # 获取VPC属性
  17. vpc_id = vpc_attributes.vpc_id # 获取VPC ID
  18. inner_ip_address = response.body.inner_ip_address # 获取内网IP地址
  19. ssh_client = UtilClient(vpc_id, inner_ip_address, 'root', config.ALIBABA_CLOUD_ACCESS_KEY_ID, config.ALIBABA_CLOUD_ACCESS_KEY_SECRET) # 创建SSH客户端
  20. ssh_client.upload_file(target_dir, name, content) # 上传文件到实例
  21. logging.info(f"File {name} sent to instance {instance_id}") # 记录日志
  22. # 在ECS实例上执行命令
  23. def run_command(client: Ecs20140526Client, instance_ids: List[str], command: str) -> None:
  24. for instance_id in instance_ids: # 遍历实例ID列表
  25. describe_instance_attribute_request = ecs_20140526_models.DescribeInstanceAttributeRequest( # 创建查询实例属性的请求
  26. instance_id=instance_id # 实例ID
  27. )
  28. runtime = util_models.RuntimeOptions() # 创建运行时选项
  29. response = client.describe_instance_attribute_with_options(describe_instance_attribute_request, runtime) # 调用ECS客户端的查询实例属性方法
  30. vpc_attributes = response.body.vpc_attributes # 获取VPC属性
  31. vpc_id = vpc_attributes.vpc_id # 获取VPC ID
  32. inner_ip_address = response.body.inner_ip_address # 获取内网IP地址
  33. ssh_client = UtilClient(vpc_id, inner_ip_address, 'root', config.ALIBABA_CLOUD_ACCESS_KEY_ID, config.ALIBABA_CLOUD_ACCESS_KEY_SECRET) # 创建SSH客户端
  34. ssh_client.run_command(command) # 在实例上执行命令
  35. logging.info(f"Command '{command}' executed on instance {instance_id}") # 记录日志