123456789101112131415161718192021222324252627282930313233343536373839 |
- import logging
- from typing import List
- from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
- from alibabacloud_ecs20140526 import models as ecs_20140526_models
- from alibabacloud_tea_util import models as util_models
- from alibabacloud_tea_util.client import Client as UtilClient
- import config
- # 发送文件到ECS实例
- def send_file_to_ecs(client: Ecs20140526Client, instance_id_list: List[str], target_dir: str, name: str, content: str) -> None:
- for instance_id in instance_id_list: # 遍历实例ID列表
- describe_instance_attribute_request = ecs_20140526_models.DescribeInstanceAttributeRequest( # 创建查询实例属性的请求
- instance_id=instance_id # 实例ID
- )
- runtime = util_models.RuntimeOptions() # 创建运行时选项
- response = client.describe_instance_attribute_with_options(describe_instance_attribute_request, runtime) # 调用ECS客户端的查询实例属性方法
- vpc_attributes = response.body.vpc_attributes # 获取VPC属性
- vpc_id = vpc_attributes.vpc_id # 获取VPC ID
- inner_ip_address = response.body.inner_ip_address # 获取内网IP地址
- ssh_client = UtilClient(vpc_id, inner_ip_address, 'root', config.ALIBABA_CLOUD_ACCESS_KEY_ID, config.ALIBABA_CLOUD_ACCESS_KEY_SECRET) # 创建SSH客户端
- ssh_client.upload_file(target_dir, name, content) # 上传文件到实例
- logging.info(f"File {name} sent to instance {instance_id}") # 记录日志
- # 在ECS实例上执行命令
- def run_command(client: Ecs20140526Client, instance_ids: List[str], command: str) -> None:
- for instance_id in instance_ids: # 遍历实例ID列表
- describe_instance_attribute_request = ecs_20140526_models.DescribeInstanceAttributeRequest( # 创建查询实例属性的请求
- instance_id=instance_id # 实例ID
- )
- runtime = util_models.RuntimeOptions() # 创建运行时选项
- response = client.describe_instance_attribute_with_options(describe_instance_attribute_request, runtime) # 调用ECS客户端的查询实例属性方法
- vpc_attributes = response.body.vpc_attributes # 获取VPC属性
- vpc_id = vpc_attributes.vpc_id # 获取VPC ID
- inner_ip_address = response.body.inner_ip_address # 获取内网IP地址
- ssh_client = UtilClient(vpc_id, inner_ip_address, 'root', config.ALIBABA_CLOUD_ACCESS_KEY_ID, config.ALIBABA_CLOUD_ACCESS_KEY_SECRET) # 创建SSH客户端
- ssh_client.run_command(command) # 在实例上执行命令
- logging.info(f"Command '{command}' executed on instance {instance_id}") # 记录日志
|