| 
					
				 | 
			
			
				@@ -10,6 +10,7 @@ from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInst 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from aliyunsdkecs.request.v20140526.DescribeNetworkInterfacesRequest import DescribeNetworkInterfacesRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from aliyunsdkslb.request.v20140515.DescribeLoadBalancerAttributeRequest import DescribeLoadBalancerAttributeRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from aliyunsdkecs.request.v20140526.RunCommandRequest import RunCommandRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from aliyunsdkecs.request.v20140526.SendFileRequest import SendFileRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from aliyunsdkcore.request import CommonRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 logging.basicConfig(level=logging.INFO, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -126,16 +127,13 @@ def check_instance_running(client, instance_ids): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         sys.exit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-def create_multiple_instances(amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              access_key_id, access_key_secret, region_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def create_multiple_instances(amount, client, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                               image_id, vswitch_id, security_group_id, zone_id, instance_type, instance_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                               disk_size, disk_category, key_pair_name, tags): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     创建多个ECS实例 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     :param amount: 创建实例数 type-int 取值范围:[1, 100] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    :param access_key_id: access key Id, type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    :param access_key_secret: access key secret, type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    :param region_id: region_id, type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :param client: 购买机器客户端连接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     :param image_id: 使用的镜像信息 type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     :param vswitch_id: 选择的交换机 type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     :param security_group_id: 当前vpc类型的安全组 type-string 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -150,9 +148,9 @@ def create_multiple_instances(amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     logging.info(f"create instances start, request amount: {amount}.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 1. 连接客户端 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    create_instances_clt = connect_client( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        access_key_id=access_key_id, access_key_secret=access_key_secret, region_id=region_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # create_instances_clt = connect_client( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #     access_key_id=access_key_id, access_key_secret=access_key_secret, region_id=region_id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    # ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 2. 请求参数配置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request = build_create_instances_request( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         image_id=image_id, vswitch_id=vswitch_id, security_group_id=security_group_id, zone_id=zone_id, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -161,7 +159,7 @@ def create_multiple_instances(amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request.set_Amount(amount) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # 3. 发送API请求,购买机器并启动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    response = send_request(client=create_instances_clt, request=request) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    response = send_request(client=client, request=request) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if response.get('Code') is None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         instance_ids = response.get('InstanceIdSets').get('InstanceIdSet') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         logging.info(f"success amount: {len(instance_ids)}, instance ids: {instance_ids}.") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -169,8 +167,7 @@ def create_multiple_instances(amount, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         running_amount = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         while running_amount < amount: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             time.sleep(10) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            running_amount, running_instances = check_instance_running(client=create_instances_clt, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                                       instance_ids=instance_ids) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            running_amount, running_instances = check_instance_running(client=client, instance_ids=instance_ids) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             logging.info(f"running amount: {running_amount}, running instances: {running_instances}.") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return instance_ids 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     else: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -196,18 +193,19 @@ def run_command(client, instance_ids, command): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     logging.info(response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-def get_instances(client, slb_id): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def get_instance_ids(client, slb_id): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    获取slb下所有服务器信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    获取slb下所有服务器instanceId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     :param client: 客户端连接 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     :param slb_id: 负载均衡id type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    :return: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :return: instance_ids type-list 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request = DescribeLoadBalancerAttributeRequest() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request.set_accept_format('json') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request.set_LoadBalancerId(slb_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     response = send_request(client=client, request=request) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    return response 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    instance_ids = [instance["ServerId"] for instance in response["BackendServers"]["BackendServer"]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return instance_ids 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def get_ip_address(client, instance_id): 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -245,3 +243,22 @@ def set_weight_for_instances(client, slb_id, instance_id_list, weight): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     request.add_query_param('LoadBalancerId', slb_id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     response = send_request(client=client, request=request) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return response 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+def send_file_to_ecs(client, instance_id_list, target_dir, name, content): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    发送文件到ecs 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :param client: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :param instance_id_list: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :param target_dir: 文件存放目录 type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :param name: 文件名 type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :param content: 文件内容 type-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    :return: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    request = SendFileRequest() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    request.set_Content(content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    request.set_TargetDir(target_dir) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    request.set_Name(name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    request.set_Overwrite(True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    request.set_InstanceIds(instance_id_list) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    response = send_request(client=client, request=request) 
			 |