您的位置:首页 > 其它

阿里云sdk通过启动模板批量创建云服务器

2019-08-01 10:30 66 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_39160019/article/details/98036138

# 安装模块
pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-ecs

# 代码
#!/usr/bin/env python
#coding=utf-8

import sys
import json
import redis
import time
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.RunInstancesRequest import RunInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesFullStatusRequest import DescribeInstancesFullStatusRequest

#读取参数
accessKeyId = "your_key_id"
accessSecret = "your_secret"
templateId = sys.argv[1]  #启动模板id
templateName = sys.argv[2]  #启动模板名字
templateVersion =  sys.argv[3]  #启动模板版本
number = sys.argv[4]   #需要创建的云服务器数量
redisadr = sys.argv[5]  #redis 地址,把创建好的云主机ip 记录到redis

client = AcsClient(accessKeyId, accessSecret, 'cn-shanghai')

request = RunInstancesRequest()
request.set_accept_format('json')

instancesRequest = DescribeInstancesRequest()
instancesRequest.set_accept_format('json')

red = redis.Redis(host=redisadr)

request.set_Amount(number)
request.set_LaunchTemplateId(templateId)
request.set_LaunchTemplateName(templateName)
request.set_LaunchTemplateVersion(templateVersion)
request.set_Period(1)
request.set_PeriodUnit("Month")
request.set_AutoRenew(True)
request.set_AutoRenewPeriod(1)
#request.set_InstanceChargeType("PrePaid")    #包年包月
request.set_InstanceChargeType("PostPaid")  #按量

response = client.do_action_with_exception(request)
response = json.loads(response.decode('utf-8'))
time.sleep(5)

print(response["InstanceIdSets"]["InstanceIdSet"])

if len(response["InstanceIdSets"]["InstanceIdSet"]) != 0:
   for instanceId in response["InstanceIdSets"]["InstanceIdSet"] :
      continue_sel = 1
      while continue_sel > 0 :
         try:
            #查询实例的运行壮态是否ok,超时为60s
            selStatus = DescribeInstancesFullStatusRequest()
            selStatus.set_accept_format('json')
            selStatus.set_InstanceIds([instanceId])
            selStatus_rep = client.do_action_with_exception(selStatus)
            selStatus_rep = json.loads(selStatus_rep.decode('utf-8')) 
            #print(selStatus_rep)
            healthStatus = selStatus_rep["InstanceFullStatusSet"]["InstanceFullStatusType"][0]["HealthStatus"]["Name"]
            if healthStatus != "Ok":
               if continue_sel < 60: 
                  time.sleep(2)
                  print("正在等待实例%s 启动运行.......wait......" %instanceId)
                  print(instanceId,healthStatus)
                  continue_sel = continue_sel + 2
               else:
                  print("实例%s time out" %instanceId)
                  continue_sel = 0
            else: 
               continue_sel = 0
               print(instanceId,healthStatus)
         except:
            time.sleep(2)
            print("正在等待实例%s 启动运行.......wait......" %instanceId)
            continue_sel = continue_sel + 2
      #获取实例ip 
      instancesRequest.set_InstanceIds([instanceId])
      instancesRequest_rep = client.do_action_with_exception(instancesRequest)
      instancesRequest_rep = json.loads(instancesRequest_rep.decode('utf-8'))
      ip = instancesRequest_rep["Instances"]["Instance"][0]["VpcAttributes"]["PrivateIpAddress"]["IpAddress"][0]
      #ip写入到redis
      red.lpush("wait_to_doinstance_list",ip)
      print(instanceId,ip)
      

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐