|
@@ -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)
|