|
2019-05-17
#!/usr/bin/env python # -*- coding: UTF-8 -*- # coding: utf8 # author: johnnyxsu # Create: 2022-2-17 import sys import json import time from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.cvm.v20170312 import cvm_client, models # https://console.cloud.tencent.com/cam/capi 即可获取 SecretId = "" SecretKey = "" #按照要求填写机型信息,需要多少台就依次填写多少台 InstanceType = [ {"InstanceType": "SA3.2XLARGE16"}, {"InstanceType": "SA3.2XLARGE16"}, {"InstanceType": "SA3.2XLARGE16"}, {"InstanceType": "SA3.2XLARGE16"}, ] #机器的数据盘信息,和InstanceType是一一对应的 DataDisks = [ [{"DiskSize": 100, "DiskType": "CLOUD_PREMIUM"}], [{"DiskSize": 100, "DiskType": "CLOUD_PREMIUM"}], [{"DiskSize": 100, "DiskType": "CLOUD_PREMIUM"}], [{"DiskSize": 100, "DiskType": "CLOUD_PREMIUM"}, {"DiskSize": 200, "DiskType": "CLOUD_PREMIUM"}], ] def loopCreateCVM(datas): cvms = list() print("开始创建CVM:") for data in datas: inData = dict() inData['projectId'] = data['projectId'] inData['VpcId'] = data['VpcId'] inData['SubnetId'] = data['SubnetId'] for i in range(len(InstanceType)): inData['InstanceType'] = InstanceType[i]['InstanceType'] inData['InstanceName'] = data['groupId'] + '-'+ InstanceType[i]['InstanceType'].split('.')[-1] + "-{}".format(i+1) inData['DataDisks'] = DataDisks[i] #print(inData) #inData = {"InstanceName": "", "projectId": 1222686, "VpcId": "vpc-ay2tio8z", "SubnetId": "subnet-1tgw7cos","InstanceType": "SA2.8XLARGE64", "DataDisks": []} msg = createCVM(inData) print(msg) retD = json.loads(msg) if 'InstanceIdSet' in retD and retD['InstanceIdSet']: cvms = cvms + retD['InstanceIdSet'] return cvms def createCVM(inData): # inData = {"groupId": "", "projectId": 1222686, "VpcId": "vpc-ay2tio8z", "SubnetId": "subnet-1tgw7cos", "InstanceType": "SA2.8XLARGE64", "DataDisks":[]} try: cred = credential.Credential(SecretId, SecretKey) httpProfile = HttpProfile() httpProfile.endpoint = "cvm.ap-guangzhou.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cvm_client.CvmClient(cred, "ap-guangzhou", clientProfile) req = models.RunInstancesRequest() params = { "InstanceChargeType": "POSTPAID_BY_HOUR", # PREPAID POSTPAID_BY_HOUR "InstanceChargePrepaid": { "Period": 1, "RenewFlag": "NOTIFY_AND_MANUAL_RENEW" }, "Placement": { "Zone": "ap-guangzhou-7", # 可用区 "ProjectId": inData['projectId'] # 项目ID需要修改 }, "VirtualPrivateCloud": { "AsVpcGateway": False, "VpcId": inData['VpcId'], # VPC需要修改 "SubnetId": inData['SubnetId'], # 子网需要修改 "Ipv6AddressCount": 0 }, "InstanceType": inData['InstanceType'], # 机型需要修改 "ImageId": "img-hdt9xxkt", "SystemDisk": { "DiskSize": 100, ## 系统盘大小 "DiskType": "CLOUD_PREMIUM" }, "DataDisks": inData['DataDisks'], # 磁盘信息需要修改 "InternetAccessible": { "InternetMaxBandwidthOut": 0, "PublicIpAssigned": False }, "InstanceName": inData['InstanceName'], # 实例ID需要修改 "LoginSettings": { "Password": "Tcdn@2007" }, "SecurityGroupIds": ["sg-5etqc5mt"], # 按照要求配置安全组 "InstanceCount": 1, # 创建实例个数 "EnhancedService": { "SecurityService": {"Enabled": True}, "MonitorService": {"Enabled": True}, "AutomationService": {"Enabled": True} } } req.from_json_string(json.dumps(params)) resp = client.RunInstances(req) return resp.to_json_string() except TencentCloudSDKException as err: return err def batchcreateCVM(data): cvmslist = list() print("inputData:{}".format(json.dumps(data))) print("---------------------------------------------") cvms = loopCreateCVM([data]) cvmslist.append(cvms) print("---------------------------------------------") print("创建CVM列表信息:{}".format(json.dumps(cvmslist))) print("等待120s创建虚拟机后,开始查询CVM IP信息") time.sleep(120) describeCVM(cvmslist) return cvmslist def describeCVM(cvmslist): for cvms in cvmslist: try: cred = credential.Credential(SecretId, SecretKey) httpProfile = HttpProfile() httpProfile.endpoint = "cvm.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = cvm_client.CvmClient(cred, "ap-guangzhou", clientProfile) req = models.DescribeInstancesRequest() params = { "InstanceIds": cvms } req.from_json_string(json.dumps(params)) #print(json.dumps(cvms)) resp = client.DescribeInstances(req) retD = json.loads(resp.to_json_string()) #print(resp.to_json_string()) if 'InstanceSet' in retD and retD['InstanceSet'] and 'TotalCount' in retD and retD['TotalCount'] > 0: for cvm in cvms: for ret in retD['InstanceSet']: if ret['InstanceId'] == cvm: print("{data[InstanceId]} {data[PrivateIpAddresses][0]}".format(data=ret)) break except TencentCloudSDKException as err: print(err) print("---------------------------------------------") if __name__ == '__main__': data = {"groupId": "TBASE", "projectId": 1254589, "VpcId": "vpc-lkj4qiln", "SubnetId": "subnet-1ymbb2sw"} ''' groupId: 机器名称 projectId:项目ID,如果没有修改为0即可 VpcId:创建CVM对应的VPC ID SubnetId:创建CVM对应的子网ID,子网要必须和Zone信息是对应的 ''' msg = batchcreateCVM(data) #cvmslist = [] #msg = describeCVM(cvmslist)
编辑:航网科技 来源:航网科技 本文版权归原作者所有 转载请注明出处
微信扫一扫咨询客服
全国免费服务热线
0755-36300002