python3.6如何连续打印_python3.6 批量创建 多台阿里云ECS主机 示例

import re

import os

import configparser

import logging

import json

from aliyunsdkcore import client

from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest, DescribeRegionsRequest, \

DescribeAvailableResourceRequest, DescribeImagesRequest, DescribeSecurityGroupsRequest, DescribeVpcsRequest, \

DescribeVSwitchesRequest, CreateInstanceRequest, AllocatePublicIpAddre***equest, StartInstanceRequest, \

RunInstancesRequest

logger = logging.getLogger('test')

class AliyunEcsCreate(object):

def __init__(self, AccessKeyId, AccessKeySecret, City):

self.AccessKeyId = AccessKeyId

self.AccessKeySecret = AccessKeySecret

self.City = City

def DescribeRegions(self):

"""

地域

:return: {'cn-qingdao': '华北 1'}

"""

regionsclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret)

regionsreq = DescribeRegionsRequest.DescribeRegionsRequest()

regionsreq.set_accept_format('json')

regionsre = json.loads(regionsclt.do_action_with_exception(regionsreq), encoding='utf-8')

regions = {}

for i in regionsre['Regions']['Region']:

regions[i['RegionId']] = i['LocalName']

return regions

def DescribeAvailableResource(self, InstanceChargeType, region_id, DestinationResource, ZoneId=None):

"""

可用资源查询接口

:param ZoneId:

:param InstanceChargeType:

:param region_id: 地域

:param DestinationResource: 查询的资源类型

:return:

"""

resourceclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)

resourcereq = DescribeAvailableResourceRequest.DescribeAvailableResourceRequest()

if DestinationResource == 'InstanceType':

resourcereq.set_ZoneId(ZoneId)

resourcereq.set_IoOptimized('optimized')

resourcereq.set_InstanceChargeType(InstanceChargeType)

resourcereq.set_DestinationResource(DestinationResource)

resourcereq.set_accept_format('json')

resourcere = json.loads(resourceclt.do_action_with_exception(resourcereq), encoding='utf-8')

return resourcere

def AvailableZones(self, InstanceChargeType, region_id):

"""

可用区

:param InstanceChargeType: 计费方式

:param region_id: 地域

:return: ['cn-huhehaote-a', 'cn-huhehaote-b']

"""

zonesre = self.DescribeAvailableResource(InstanceChargeType, region_id, 'Zone')

zones = []

for i in zonesre['AvailableZones']['AvailableZone']:

zones.append(i['ZoneId'])

return zones

def AvailableInstanceType(self, InstanceChargeType, region_id, ZoneId):

"""

可用实例规格

:param ZoneId:

:param InstanceChargeType:

:param region_id: 计费方式 地域 可用区

:return:

"""

instanceres = self.DescribeAvailableResource(InstanceChargeType, region_id, 'InstanceType', ZoneId)

instance = []

instance_list = instanceres['AvailableZones']['AvailableZone'][0]['AvailableResources']['AvailableResource'][0][

'SupportedResources']['SupportedResource']

return instance_list

def DescribeImages(self, region_id):

"""

:param region_id: 地域

:return: 镜像列表 {'centos_6_09_64_20G_alibase_20180326.vhd': 'CentOS 6.9 64位',}

"""

imagesclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)

imagesreq = DescribeImagesRequest.DescribeImagesRequest()

imagesreq.set_ActionType('DescribeImages')

imagesreq.set_accept_format('json')

imagesreq.set_PageSize(100)

imagesre = json.loads(imagesclt.do_action_with_exception(imagesreq), encoding='utf-8')

images = {}

ubuntu16 = {

'cn-beijing': 'm-2ze6tsxqsldo4qkvjb3u',

'cn-zhangjiakou': 'm-8vba9qdqeeca3zpm2sc8',

}

for i in imagesre['Images']['Image']:

if i['Platform'] == 'CentOS':

images[i['ImageId']] = i['OSName']

if i['Platform'] == 'Ubuntu':

images[i['ImageId']] = i['OSName']

if i['Platform'] == 'Windows Server 2008':

images[i['ImageId']] = i['OSName']

return images

def DescribeVpcs(self, region_id):

"""

VPC

:param region_id: 地域

:return: {'vpc-hp33ep5m55q5vdebkjpxk': '华北5预发布VPC', 'vpc-hp3xfrxc78pgc0rianhge': '华北5测试'}

"""

vpcsclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)

vpcsreq = DescribeVpcsRequest.DescribeVpcsRequest()

vpcsreq.set_action_name('DescribeVpcs')

vpcsreq.set_accept_format('json')

vpcsreq.set_PageSize(50)

vpcsre = json.loads(vpcsclt.do_action_with_exception(vpcsreq), encoding='utf-8')

vpcs = {}

for i in vpcsre['Vpcs']['Vpc']:

vpcs[i['VpcId']] = i['VpcName']

return vpcs

def DescribeVSwitches(self, region_id, zone_id, vpc_id):

"""

:param region_id: 地域

:param zone_id: 可用区

:param vpc_id: vpc

:return: {'vsw-hp3ffb8524tt1gqp22utj': '华北5测试B交换机'}

"""

vswitchesclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)

vswitchesreq = DescribeVSwitchesRequest.DescribeVSwitchesRequest()

vswitchesreq.set_action_name('DescribeVSwitches')

vswitchesreq.set_VpcId(vpc_id)

vswitchesreq.set_accept_format('json')

vswitchesreq.set_PageSize(50)

vswitchesreq.set_ZoneId(zone_id)

vswitchesre = json.loads(vswitchesclt.do_action_with_exception(vswitchesreq), encoding='utf-8')

vswitches = {}

for i in vswitchesre['VSwitches']['VSwitch']:

vswitches[i['VSwitchId']] = i['VSwitchName']

return vswitches

def DescribeSecurityGroups(self, region_id, vpc_id, ):

"""

安全组

:param region_id: 地域

:param vpc_id: vpc

:return: {'sg-hp3738k45fqqbfja11fl': '华北5测试2', 'sg-hp3hzvhrr2gk8skyo3ul': '华北5测试1'}

"""

groupsclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)

groupsreq = DescribeSecurityGroupsRequest.DescribeSecurityGroupsRequest()

groupsreq.set_action_name('DescribeSecurityGroups')

groupsreq.set_VpcId(vpc_id)

groupsreq.set_accept_format('json')

groupsreq.set_PageSize(50)

groupsre = json.loads(groupsclt.do_action_with_exception(groupsreq), encoding='utf-8')

groups = {}

for i in groupsre['SecurityGroups']['SecurityGroup']:

groups[i['SecurityGroupId']] = i['SecurityGroupName']

return groups

def CreateInstance(self, region_id, ZoneId, ImageId, InstanceType, InstanceName, InstanceChargeType, HostName,

Password, VSwitchId, SecurityGroupId, SystemDiskSize, Size, Description):

"""

创建 实例

:param region_id: 地域

:param ZoneId: 可用区

:param ImageId: 镜像

:param InstanceType: 实例模板

:param InstanceName: 实例名字

:param InstanceChargeType: 实例的付费方式 ,PrePaid PostPaid

# :param InternetChargeType: 网络计费方式 PayByBandwidth:按固定带宽计费 PayByTraffic:按使用流量计费

# :param InternetMaxBandwidthOut: 出网带宽

:param HostName: 主机名字

:param Password: 密码

:param VSwitchId: 交换机

:param SecurityGroupId: 安全组

:param SystemDiskSize: 系统盘 默认40

:param Size: 数据盘

:param Description: 描述

:return: {'InstanceId': 'i-2ze210z0uiwyadm1m7x6'}

"""

createclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id, timeout=30)

createreq = CreateInstanceRequest.CreateInstanceRequest()

createreq.set_action_name('CreateInstance')

createreq.set_accept_format('json')

createreq.set_ZoneId(ZoneId)

createreq.set_ImageId(ImageId)

createreq.set_InstanceType(InstanceType)

createreq.set_InstanceName(InstanceName)

if InstanceChargeType == 'PrePaid':

createreq.set_Period('1')

createreq.set_InstanceChargeType(InstanceChargeType)

createreq.set_InternetChargeType('PayByBandwidth')

# if InternetChargeType:

# createreq.set_InternetMaxBandwidthOut(InternetMaxBandwidthOut)

createreq.set_HostName(HostName)

createreq.set_Password(Password)

createreq.set_AutoRenew('True')

createreq.set_AutoRenewPeriod('1')

createreq.set_VSwitchId(VSwitchId)

createreq.set_SecurityGroupId(SecurityGroupId)

createreq.set_SystemDiskSize(SystemDiskSize)

createreq.set_Description(Description)

if Size != 0:

createreq.set_DataDisks([{'Size': Size, 'Category': 'cloud_efficiency'}])

createre = json.loads(createclt.do_action_with_exception(createreq), encoding='utf-8')

return createre

def RunInstances(self, region_id, ZoneId, ImageId, InstanceType, InstanceName, InstanceChargeType, HostName,

Password, VSwitchId, SecurityGroupId, SystemDiskSize, Size, Description, Amount):

"""

一次创建多台 实例

:param region_id: 地域

:param ZoneId: 可用区

:param ImageId: 镜像

:param InstanceType: 实例模板

:param InstanceName: 实例名字

:param InstanceChargeType: 实例的付费方式 ,PrePaid PostPaid

# :param InternetChargeType: 网络计费方式 PayByBandwidth:按固定带宽计费 PayByTraffic:按使用流量计费

# :param InternetMaxBandwidthOut: 出网带宽

:param HostName: 主机名字

:param Password: 密码

:param VSwitchId: 交换机

:param SecurityGroupId: 安全组

:param SystemDiskSize: 系统盘 默认40

:param Size: 数据盘

:param Description: 描述

:param Amount: 数量

:return: {'InstanceId': 'i-2ze210z0uiwyadm1m7x6'}

"""

createclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id, timeout=30)

createreq = RunInstancesRequest.RunInstancesRequest()

createreq.set_action_name('RunInstances')

createreq.set_accept_format('json')

createreq.set_ZoneId(ZoneId)

createreq.set_ImageId(ImageId)

createreq.set_InstanceType(InstanceType)

createreq.set_InstanceName(InstanceName)

if InstanceChargeType == 'PrePaid':

createreq.set_Period('1')

createreq.set_InstanceChargeType(InstanceChargeType)

createreq.set_InternetChargeType('PayByBandwidth')

# if InternetChargeType:

# createreq.set_InternetMaxBandwidthOut(InternetMaxBandwidthOut)

createreq.set_HostName(HostName)

createreq.set_Password(Password)

createreq.set_AutoRenew('True')

createreq.set_VSwitchId(VSwitchId)

createreq.set_SecurityGroupId(SecurityGroupId)

createreq.set_SystemDiskSize(SystemDiskSize)

createreq.set_Description(Description)

if Size != 0:

createreq.set_DataDisks([{'Size': Size, 'Category': 'cloud_efficiency'}])

createreq.set_Amount(Amount)

createreq.set_UniqueSuffix('true')

createre = json.loads(createclt.do_action_with_exception(createreq), encoding='utf-8')

return createre

def AllocatePublicIpAddress(self, region_id, InstanceId):

"""

绑定外网IP

:param region_id: 地域

:param InstanceId: 实例ID

:return: {'IpAddress': ''}

"""

ipclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)

ipreq = AllocatePublicIpAddre***equest.AllocatePublicIpAddre***equest()

ipreq.set_action_name('AllocatePublicIpAddress')

ipreq.set_accept_format('json')

ipreq.set_InstanceId(InstanceId)

ipre = json.loads(ipclt.do_action_with_exception(ipreq), encoding='utf-8')

return ipre

def StartInstance(self, region_id, InstanceId):

"""

启动实例

:param region_id: 地域

:param InstanceId: 实例ID

:return:

"""

startclt = client.AcsClient(self.AccessKeyId, self.AccessKeySecret, region_id)

startreq = StartInstanceRequest.StartInstanceRequest()

startreq.set_action_name('StartInstance')

startreq.set_accept_format('json')

startreq.set_InstanceId(InstanceId)

start = json.loads(startclt.do_action_with_exception(startreq), encoding='utf-8')

return start

if __name__ == '__main__':

create = AliyunEcsCreate(key, secret, region)

c = create.RunInstances(传参)

print(c)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值